X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/cd64751cac4c56591bee9b0a9c2a626ce40e67db..f384309c9c663a4b381d2e1a8545693514835395:/stglibs/srvconf.lib/parser_server_info.cpp diff --git a/stglibs/srvconf.lib/parser_server_info.cpp b/stglibs/srvconf.lib/parser_server_info.cpp index c8b1abfc..d4c610e0 100644 --- a/stglibs/srvconf.lib/parser_server_info.cpp +++ b/stglibs/srvconf.lib/parser_server_info.cpp @@ -19,7 +19,7 @@ * Author : Maxim Mamontov */ -#include "stg/parser_server_info.h" +#include "parser_server_info.h" #include "stg/common.h" @@ -28,6 +28,8 @@ #include +using namespace STG; + namespace { @@ -37,10 +39,11 @@ const size_t DIRNAME_LEN = 16; } -PARSER_SERVER_INFO::PARSER_SERVER_INFO() +SERVER_INFO::PARSER::PARSER() : callback(NULL), data(NULL), - depth(0) + depth(0), + parsingAnswer(false) { AddParser(propertyParsers, "uname", info.uname); AddParser(propertyParsers, "version", info.version); @@ -53,31 +56,32 @@ PARSER_SERVER_INFO::PARSER_SERVER_INFO() AddParser(propertyParsers, "dir_name_" + x2str(i), info.dirName[i], GetEncodedValue); } //----------------------------------------------------------------------------- -int PARSER_SERVER_INFO::ParseStart(const char *el, const char **attr) +int SERVER_INFO::PARSER::ParseStart(const char *el, const char **attr) { depth++; if (depth == 1) - if (strcasecmp(el, "ServerInfo") != 0) - error = "Invalid response."; + if (strcasecmp(el, "ServerInfo") == 0) + parsingAnswer = true; else - if (depth == 2) + if (depth == 2 && parsingAnswer) if (!TryParse(propertyParsers, ToLower(el), attr)) error = "Invalid parameter."; return 0; } //----------------------------------------------------------------------------- -void PARSER_SERVER_INFO::ParseEnd(const char * /*el*/) +void SERVER_INFO::PARSER::ParseEnd(const char * /*el*/) { depth--; -if (depth == 0) +if (depth == 0 && parsingAnswer) { if (callback) callback(error.empty(), error, info, data); error.clear(); + parsingAnswer = false; } } //----------------------------------------------------------------------------- -void PARSER_SERVER_INFO::SetCallback(CALLBACK f, void * d) +void SERVER_INFO::PARSER::SetCallback(CALLBACK f, void * d) { callback = f; data = d;