* Author : Maxim Mamontov <faust@stargazer.dp.ua>
*/
-#include "stg/parser_server_info.h"
+#include "parser_server_info.h"
#include "stg/common.h"
#include <strings.h>
+using namespace STG;
+
namespace
{
}
-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);
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;