1
#include <configparser.h>
2
#include <xmlpullparser.h>
3
#include <exceptions.h>
10
namespace newsbeuter {
12
configparser::configparser(const char * file) : filename(file) { }
14
configparser::~configparser() { }
16
void configparser::parse() {
17
unsigned int linecounter = 1;
18
std::fstream f(filename.c_str());
21
while (f.is_open() && !f.eof()) {
22
GetLogger().log(LOG_DEBUG,"configparser::parse: tokenizing %s",line.c_str());
23
std::vector<std::string> tokens = utils::tokenize_quoted(line);
24
if (tokens.size() > 0) {
25
std::string cmd = tokens[0];
26
config_action_handler * handler = action_handlers[cmd];
28
tokens.erase(tokens.begin()); // delete first element
29
action_handler_status status = handler->handle_action(cmd,tokens);
30
if (status != AHS_OK) {
33
if (status == AHS_INVALID_PARAMS) {
34
errmsg = _("invalid parameters.");
35
} else if (status == AHS_TOO_FEW_PARAMS) {
36
errmsg = _("too few parameters.");
37
} else if (status == AHS_INVALID_COMMAND) {
38
errmsg = _("unknown command (bug).");
40
errmsg = _("unknown error (bug).");
42
snprintf(buf, sizeof(buf), _("Error while processing command `%s' (%s line %u): %s"), cmd.c_str(), filename.c_str(), linecounter, errmsg);
43
throw configexception(buf);
47
snprintf(buf, sizeof(buf), _("unknown command `%s'"), cmd.c_str());
48
throw configexception(buf);
56
void configparser::register_handler(const std::string& cmd, config_action_handler * handler) {
57
GetLogger().log(LOG_DEBUG,"configparser::register_handler: cmd = %s handler = %p", cmd.c_str(), handler);
58
action_handlers[cmd] = handler;
61
void configparser::unregister_handler(const std::string& cmd) {
62
GetLogger().log(LOG_DEBUG,"configparser::unregister_handler: cmd = %s", cmd.c_str());
63
action_handlers[cmd] = 0;