diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp index 40374d99431a6898fb503644399eb75caf31db29..f1043603cb7ce6d805b6fe82e7fe9728ac3a85e3 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 4c1e8cbc4f07e259d2073af9acfdfeb8df0e08b9..a9b190d1ad311a14c10e0b6d12b8097d43343a7c 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 19ff01b301885535cab3d9ed3fd7ac6b9c1773c6..432f65adb2abcd74733c01632dfb8669529b5571 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 7b8f93dc97ebfa328719e28e7a72db05ead5e9db..caa7623b7ea86f25f262ec4ebdbc8e689537e511 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 8b176a579f56c1e28b7db4e3df5481e647fc20fa..24d15a524e17a27429f6473a1debbcb6eb8bdd2c 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 dfd8f6a5032ec2f29f31a22491a0d124ee3ce1df..bf8f5f277f405ad0254ae0216de5ae93621354cb 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