]> git.stg.codes - stg.git/blobdiff - stglibs/srvconf.lib/parser_server_info.cpp
Moved base and utility classes from global scope.
[stg.git] / stglibs / srvconf.lib / parser_server_info.cpp
index c8b1abfcfeea13f90fcc9639d6a1cfb4b25f48d3..d4c610e0aea839f9311011cb2d02160aceff2cbf 100644 (file)
@@ -19,7 +19,7 @@
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#include "stg/parser_server_info.h"
+#include "parser_server_info.h"
 
 #include "stg/common.h"
 
@@ -28,6 +28,8 @@
 
 #include <strings.h>
 
+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;