From 26be4d8df351ef2bd5925d1e2c3983b87438e756 Mon Sep 17 00:00:00 2001
From: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
Date: Fri, 23 Mar 2012 03:23:38 -0400
Subject: [PATCH] daemon: hookpreference: cleanup

---
 daemon/src/dbus/configurationmanager.cpp |  4 +-
 daemon/src/managerimpl.cpp               | 28 +------------
 daemon/src/managerimpl.h                 | 11 -----
 daemon/src/preferences.cpp               | 28 +++++++++++++
 daemon/src/preferences.h                 | 52 ++++--------------------
 daemon/src/sip/sipvoiplink.cpp           | 11 +++--
 6 files changed, 45 insertions(+), 89 deletions(-)

diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp
index 40374d9943..f1043603cb 100644
--- a/daemon/src/dbus/configurationmanager.cpp
+++ b/daemon/src/dbus/configurationmanager.cpp
@@ -389,13 +389,13 @@ void ConfigurationManager::setAddressbookList(
 
 std::map<std::string, std::string> ConfigurationManager::getHookSettings()
 {
-    return Manager::instance().getHookSettings();
+    return Manager::instance().hookPreference.toMap();
 }
 
 void ConfigurationManager::setHookSettings(const std::map<std::string,
         std::string>& settings)
 {
-    Manager::instance().setHookSettings(settings);
+    Manager::instance().hookPreference = HookPreference(settings);
 }
 
 void ConfigurationManager::setAccountsOrder(const std::string& order)
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index 4c1e8cbc4f..a9b190d1ad 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -191,9 +191,7 @@ bool ManagerImpl::outgoingCall(const std::string& account_id,
 
     std::string current_call_id(getCurrentCallId());
 
-    std::string prefix;
-    if (hookPreference.getNumberEnabled())
-        prefix = hookPreference.getNumberAddPrefix();
+    std::string prefix(hookPreference.getNumberAddPrefix());
 
     std::string to_cleaned(NumberCleaner::clean(to, prefix));
 
@@ -2748,30 +2746,6 @@ std::vector<std::string> ManagerImpl::getAddressbookList() const
     return unserialize(addressbookPreference.getList());
 }
 
-std::map<std::string, std::string> ManagerImpl::getHookSettings() const
-{
-    std::map<std::string, std::string> settings;
-
-    settings["URLHOOK_IAX2_ENABLED"] = hookPreference.getIax2Enabled() ? "true" : "false";
-    settings["PHONE_NUMBER_HOOK_ADD_PREFIX"] = hookPreference.getNumberAddPrefix();
-    settings["PHONE_NUMBER_HOOK_ENABLED"] = hookPreference.getNumberEnabled() ? "true" : "false";
-    settings["URLHOOK_SIP_ENABLED"] = hookPreference.getSipEnabled() ? "true" : "false";
-    settings["URLHOOK_COMMAND"] = hookPreference.getUrlCommand();
-    settings["URLHOOK_SIP_FIELD"] = hookPreference.getUrlSipField();
-
-    return settings;
-}
-
-void ManagerImpl::setHookSettings(const std::map<std::string, std::string>& settings)
-{
-    hookPreference.setIax2Enabled(settings.find("URLHOOK_IAX2_ENABLED")->second == "true");
-    hookPreference.setNumberAddPrefix(settings.find("PHONE_NUMBER_HOOK_ADD_PREFIX")->second);
-    hookPreference.setNumberEnabled(settings.find("PHONE_NUMBER_HOOK_ENABLED")->second == "true");
-    hookPreference.setSipEnabled(settings.find("URLHOOK_SIP_ENABLED")->second == "true");
-    hookPreference.setUrlCommand(settings.find("URLHOOK_COMMAND")->second);
-    hookPreference.setUrlSipField(settings.find("URLHOOK_SIP_FIELD")->second);
-}
-
 void ManagerImpl::setIPToIPForCall(const std::string& callID, bool IPToIP)
 {
     if (not isIPToIP(callID)) // no IPToIP calls with the same ID
diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h
index 19ff01b301..432f65adb2 100644
--- a/daemon/src/managerimpl.h
+++ b/daemon/src/managerimpl.h
@@ -691,17 +691,6 @@ class ManagerImpl {
          */
         std::vector <std::string> getAddressbookList() const;
 
-        /**
-         * Hook configuration
-         */
-        std::map<std::string, std::string> getHookSettings() const;
-
-        /**
-         * Hook configuration
-         */
-        void setHookSettings(const std::map<std::string, std::string>& settings);
-
-
         /**
          * Get the audio manager
          * @return int The audio manager
diff --git a/daemon/src/preferences.cpp b/daemon/src/preferences.cpp
index 7b8f93dc97..caa7623b7e 100644
--- a/daemon/src/preferences.cpp
+++ b/daemon/src/preferences.cpp
@@ -33,6 +33,7 @@
 #include "audio/pulseaudio/pulselayer.h"
 #include "config/yamlemitter.h"
 #include "config/yamlnode.h"
+#include "hooks/urlhook.h"
 #include <sstream>
 #include "global.h"
 #include <cassert>
@@ -216,6 +217,28 @@ HookPreference::HookPreference() : iax2Enabled_(false)
     , urlSipField_("X-sflphone-url")
 {}
 
+HookPreference::HookPreference(const std::map<std::string, std::string> &settings) :
+    iax2Enabled_(settings.find("URLHOOK_IAX2_ENABLED")->second == "true")
+    , numberAddPrefix_(settings.find("PHONE_NUMBER_HOOK_ADD_PREFIX")->second)
+    , numberEnabled_(settings.find("PHONE_NUMBER_HOOK_ENABLED")->second == "true")
+    , sipEnabled_(settings.find("URLHOOK_SIP_ENABLED")->second == "true")
+    , urlCommand_(settings.find("URLHOOK_COMMAND")->second)
+    , urlSipField_(settings.find("URLHOOK_SIP_FIELD")->second)
+{}
+
+std::map<std::string, std::string> HookPreference::toMap() const
+{
+    std::map<std::string, std::string> settings;
+    settings["URLHOOK_IAX2_ENABLED"] = iax2Enabled_ ? "true" : "false";
+    settings["PHONE_NUMBER_HOOK_ADD_PREFIX"] = numberAddPrefix_;
+    settings["PHONE_NUMBER_HOOK_ENABLED"] = numberEnabled_ ? "true" : "false";
+    settings["URLHOOK_SIP_ENABLED"] = sipEnabled_ ? "true" : "false";
+    settings["URLHOOK_COMMAND"] = urlCommand_;
+    settings["URLHOOK_SIP_FIELD"] = urlSipField_;
+
+    return settings;
+}
+
 void HookPreference::serialize(Conf::YamlEmitter *emitter)
 {
     Conf::MappingNode preferencemap(NULL);
@@ -252,6 +275,11 @@ void HookPreference::unserialize(const Conf::MappingNode *map)
     map->getValue(urlSipFieldKey, &urlSipField_);
 }
 
+void HookPreference::run(const std::string &header)
+{
+    UrlHook::runAction(urlCommand_, header);
+}
+
 AudioPreference::AudioPreference() :
     audioApi_(PULSEAUDIO_API_STR)
     , cardin_(atoi(ALSA_DFT_CARD)) // ALSA_DFT_CARD
diff --git a/daemon/src/preferences.h b/daemon/src/preferences.h
index 8b176a579f..24d15a524e 100644
--- a/daemon/src/preferences.h
+++ b/daemon/src/preferences.h
@@ -335,56 +335,23 @@ class AddressbookPreference : public Serializable {
 class HookPreference : public Serializable {
     public:
         HookPreference();
+        HookPreference(const std::map<std::string, std::string> &settings);
 
         virtual void serialize(Conf::YamlEmitter *emitter);
 
         virtual void unserialize(const Conf::MappingNode *map);
 
-        bool getIax2Enabled() const {
-            return iax2Enabled_;
-        }
-
-        void setIax2Enabled(bool i) {
-            iax2Enabled_ = i;
-        }
-
         std::string getNumberAddPrefix() const {
-            return numberAddPrefix_;
-        }
-
-        void setNumberAddPrefix(const std::string &n) {
-            numberAddPrefix_ = n;
-        }
-
-        bool getNumberEnabled() const {
-            return numberEnabled_;
-        }
-
-        void setNumberEnabled(bool n) {
-            numberEnabled_ = n;
+            if (numberEnabled_)
+                return numberAddPrefix_;
+            else
+                return "";
         }
 
-        bool getSipEnabled() const {
-            return sipEnabled_;
-        }
-
-        void setSipEnabled(bool s) {
-            sipEnabled_ = s;
-        }
-
-        std::string getUrlCommand() const {
-            return urlCommand_;
-        }
-        void setUrlCommand(const std::string &u) {
-            urlCommand_ = u;
-        }
-
-        std::string getUrlSipField() const {
-            return urlSipField_;
-        }
-        void setUrlSipField(const std::string &u) {
-            urlSipField_ = u;
-        }
+        std::map<std::string, std::string> toMap() const;
+        bool getSipEnabled() const { return sipEnabled_; }
+        std::string getUrlSipField() const { return urlSipField_; }
+        void run(const std::string &header);
 
     private:
         bool iax2Enabled_;
@@ -393,7 +360,6 @@ class HookPreference : public Serializable {
         bool sipEnabled_;
         std::string urlCommand_;
         std::string urlSipField_;
-
 };
 
 class AudioPreference : public Serializable {
diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index dfd8f6a503..bf8f5f277f 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -48,7 +48,6 @@
 #include "dbus/dbusmanager.h"
 #include "dbus/callmanager.h"
 
-#include "hooks/urlhook.h"
 #include "im/instant_messaging.h"
 
 #include "audio/audiolayer.h"
@@ -309,7 +308,7 @@ pj_bool_t transaction_request_cb(pjsip_rx_data *rdata)
 
     if (Manager::instance().hookPreference.getSipEnabled()) {
         std::string header_value(fetchHeaderValue(rdata->msg_info.msg, Manager::instance().hookPreference.getUrlSipField()));
-        UrlHook::runAction(Manager::instance().hookPreference.getUrlCommand(), header_value);
+        Manager::instance().hookPreference.run(header_value);
     }
 
     SIPCall* call = new SIPCall(Manager::instance().getNewCallID(), Call::INCOMING, cp_);
@@ -2126,14 +2125,14 @@ std::string fetchHeaderValue(pjsip_msg *msg, const std::string &field)
     if (!hdr)
         return "";
 
-    std::string value(std::string(hdr->hvalue.ptr, hdr->hvalue.slen));
+    std::string value(hdr->hvalue.ptr, hdr->hvalue.slen);
 
     size_t pos = value.find("\n");
 
-    if (pos == std::string::npos)
+    if (pos != std::string::npos)
+        return value.substr(0, pos);
+    else
         return "";
-
-    return value.substr(0, pos);
 }
 } // end anonymous namespace
 
-- 
GitLab