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