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] [#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