1
0
mirror of https://github.com/danog/libtgvoip.git synced 2024-12-02 09:37:52 +01:00
libtgvoip/VoIPServerConfig.cpp

102 lines
2.3 KiB
C++
Raw Normal View History

2017-03-30 16:06:59 +02:00
//
// libtgvoip is free and unencumbered public domain software.
// For more information, see http://unlicense.org or the UNLICENSE file
// you should have received with this source code distribution.
//
#include "VoIPServerConfig.h"
#include <stdlib.h>
#include "logging.h"
#include <sstream>
#include <locale>
2017-03-30 16:06:59 +02:00
using namespace tgvoip;
2017-03-30 16:06:59 +02:00
ServerConfig* ServerConfig::sharedInstance=NULL;
ServerConfig::ServerConfig(){
2017-03-30 16:06:59 +02:00
}
ServerConfig::~ServerConfig(){
2017-03-30 16:06:59 +02:00
}
ServerConfig *ServerConfig::GetSharedInstance(){
2017-03-30 16:06:59 +02:00
if(!sharedInstance)
sharedInstance=new ServerConfig();
2017-03-30 16:06:59 +02:00
return sharedInstance;
}
bool ServerConfig::GetBoolean(std::string name, bool fallback){
MutexGuard sync(mutex);
2017-03-30 16:06:59 +02:00
if(ContainsKey(name)){
std::string val=config[name];
if(val=="true")
return true;
if(val=="false")
return false;
}
return fallback;
}
double ServerConfig::GetDouble(std::string name, double fallback){
MutexGuard sync(mutex);
2017-03-30 16:06:59 +02:00
if(ContainsKey(name)){
std::string val=config[name];
std::istringstream stm(val);
double rval=fallback;
stm.imbue(std::locale("C"));
stm >> rval;
if(!stm.fail())
return rval;
2017-03-30 16:06:59 +02:00
}
return fallback;
}
int32_t ServerConfig::GetInt(std::string name, int32_t fallback){
MutexGuard sync(mutex);
2017-03-30 16:06:59 +02:00
if(ContainsKey(name)){
std::string val=config[name];
char* end;
const char* start=val.c_str();
int32_t d=strtol(start, &end, 0);
if(end!=start){
return d;
}
}
return fallback;
}
std::string ServerConfig::GetString(std::string name, std::string fallback){
MutexGuard sync(mutex);
2017-03-30 16:06:59 +02:00
if(ContainsKey(name))
return config[name];
return fallback;
}
void ServerConfig::Update(std::map<std::string, std::string> newValues){
MutexGuard sync(mutex);
2017-03-30 16:06:59 +02:00
LOGD("=== Updating voip config ===");
config.clear();
for(std::map<std::string, std::string>::iterator itr=newValues.begin();itr!=newValues.end();++itr){
std::string key=itr->first;
std::string val=itr->second;
LOGV("%s -> %s", key.c_str(), val.c_str());
config[key]=val;
}
}
void ServerConfig::Update(const char **values, int count) {
2017-03-30 16:06:59 +02:00
std::map<std::string, std::string> result;
for (int i = 0; i < count / 2; i++) {
result[values[i * 2 + 0]] = std::string(values[i * 2 + 1]);
}
Update(result);
}
bool ServerConfig::ContainsKey(std::string key){
2017-03-30 16:06:59 +02:00
return config.find(key)!=config.end();
}