aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared/Configuration/Config.cpp
diff options
context:
space:
mode:
authorleak <leak@bitmx.net>2014-06-22 15:45:54 +0200
committerleak <leak@bitmx.net>2014-06-22 15:45:54 +0200
commitca3327dbed76d7d13b9e2754990b717267700be9 (patch)
tree51d194b4c2be37b7cd0ec0cd326cf907d5c76ef1 /src/server/shared/Configuration/Config.cpp
parent7dd6f0f1d8dcd14c8b9306553170f0023d30fc66 (diff)
Replaced ACE_Configuration_Heap based config file handling with boost::property_tree::ini_parser
Diffstat (limited to 'src/server/shared/Configuration/Config.cpp')
-rw-r--r--src/server/shared/Configuration/Config.cpp120
1 files changed, 42 insertions, 78 deletions
diff --git a/src/server/shared/Configuration/Config.cpp b/src/server/shared/Configuration/Config.cpp
index 3f8997e6d55..95336457428 100644
--- a/src/server/shared/Configuration/Config.cpp
+++ b/src/server/shared/Configuration/Config.cpp
@@ -16,57 +16,41 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <algorithm>
+#include <mutex>
+#include <boost/property_tree/ptree.hpp>
+#include <boost/property_tree/ini_parser.hpp>
#include "Config.h"
#include "Errors.h"
-// Defined here as it must not be exposed to end-users.
-bool ConfigMgr::GetValueHelper(const char* name, ACE_TString &result)
-{
- GuardType guard(_configLock);
-
- if (_config.get() == 0)
- return false;
-
- ACE_TString section_name;
- ACE_Configuration_Section_Key section_key;
- const ACE_Configuration_Section_Key &root_key = _config->root_section();
-
- int i = 0;
- while (_config->enumerate_sections(root_key, i, section_name) == 0)
- {
- _config->open_section(root_key, section_name.c_str(), 0, section_key);
- if (_config->get_string_value(section_key, name, result) == 0)
- return true;
- ++i;
- }
-
- return false;
-}
+using namespace boost::property_tree;
bool ConfigMgr::LoadInitial(char const* file)
{
ASSERT(file);
- GuardType guard(_configLock);
+ std::lock_guard<std::mutex> lock(_configLock);
_filename = file;
- _config.reset(new ACE_Configuration_Heap());
- if (_config->open() == 0)
- if (LoadData(_filename.c_str()))
- return true;
- _config.reset();
- return false;
-}
+ try
+ {
+ ptree temp;
+ boost::property_tree::ini_parser::read_ini(file, temp);
-bool ConfigMgr::LoadMore(char const* file)
-{
- ASSERT(file);
- ASSERT(_config);
- GuardType guard(_configLock);
+ for (auto bla : temp)
+ {
+ _config = bla.second;
+ break;
+ }
+ }
+ catch (std::exception const& /*ex*/)
+ {
+ return false;
+ }
- return LoadData(file);
+ return true;
}
bool ConfigMgr::Reload()
@@ -74,78 +58,58 @@ bool ConfigMgr::Reload()
return LoadInitial(_filename.c_str());
}
-bool ConfigMgr::LoadData(char const* file)
+std::string ConfigMgr::GetStringDefault(const char* name, const std::string &def)
{
- ACE_Ini_ImpExp config_importer(*_config.get());
- if (config_importer.import_config(file) == 0)
- return true;
+ std::string value = _config.get<std::string>(ptree::path_type(name,'/'), def);
- return false;
-}
+ value.erase(std::remove(value.begin(), value.end(), '"'), value.end());
-std::string ConfigMgr::GetStringDefault(const char* name, const std::string &def)
-{
- ACE_TString val;
- return GetValueHelper(name, val) ? val.c_str() : def;
+ return value;
}
bool ConfigMgr::GetBoolDefault(const char* name, bool def)
{
- ACE_TString val;
-
- if (!GetValueHelper(name, val))
+ try
+ {
+ std::string val = _config.get<std::string>(name);
+ val.erase(std::remove(val.begin(), val.end(), '"'), val.end());
+ return (val == "true" || val == "TRUE" || val == "yes" || val == "YES" || val == "1");
+ }
+ catch (std::exception const& /*ex*/)
+ {
return def;
-
- return (val == "true" || val == "TRUE" || val == "yes" || val == "YES" ||
- val == "1");
+ }
}
int ConfigMgr::GetIntDefault(const char* name, int def)
{
- ACE_TString val;
- return GetValueHelper(name, val) ? atoi(val.c_str()) : def;
+ return _config.get<int>(name, def);
}
float ConfigMgr::GetFloatDefault(const char* name, float def)
{
- ACE_TString val;
- return GetValueHelper(name, val) ? (float)atof(val.c_str()) : def;
+ return _config.get<float>(name, def);
}
std::string const& ConfigMgr::GetFilename()
{
- GuardType guard(_configLock);
+ std::lock_guard<std::mutex> lock(_configLock);
return _filename;
}
std::list<std::string> ConfigMgr::GetKeysByString(std::string const& name)
{
- GuardType guard(_configLock);
+ std::lock_guard<std::mutex> lock(_configLock);
std::list<std::string> keys;
- if (_config.get() == 0)
- return keys;
- ACE_TString section_name;
- ACE_Configuration_Section_Key section_key;
- const ACE_Configuration_Section_Key &root_key = _config->root_section();
-
- int i = 0;
- while (_config->enumerate_sections(root_key, i++, section_name) == 0)
+ for (const ptree::value_type& child : _config)
{
- _config->open_section(root_key, section_name.c_str(), 0, section_key);
-
- ACE_TString key_name;
- ACE_Configuration::VALUETYPE type;
- int j = 0;
- while (_config->enumerate_values(section_key, j++, key_name, type) == 0)
+ if (child.first.compare(0, name.length(), name) == 0)
{
- std::string temp = key_name.c_str();
-
- if (!temp.find(name))
- keys.push_back(temp);
+ keys.push_back(child.first);
}
}
-
+
return keys;
}