]> git.stg.codes - stg.git/blobdiff - stglibs/srvconf.lib/parser_get_users.cpp
Moved GET_USER and GET_USERS parsers from global scope.
[stg.git] / stglibs / srvconf.lib / parser_get_users.cpp
index 6996dbaf3859056988d579eb6ea4e126bda01fea..ecc2917cb2794290918c4c4aac10ce2ef1ed8862 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#include "stg/parser_get_users.h"
+#include "parser_get_users.h"
 
 #include <cstddef>
 
 #include <strings.h>
 
-PARSER_GET_USERS::PARSER_GET_USERS()
-    : callabck(NULL),
+using namespace STG;
+
+GET_USERS::PARSER::PARSER()
+    : callback(NULL),
       data(NULL),
-      depth(0)
+      depth(0),
+      parsingAnswer(false)
 {
-    userParser.SetCallback(&PARSER_GET_USERS::UserCallback, this);
+    userParser.SetCallback(&GET_USERS::PARSER::UserCallback, this);
 }
 //-----------------------------------------------------------------------------
-int PARSER_GET_USERS::ParseStart(const char * el, const char ** attr)
+int GET_USERS::PARSER::ParseStart(const char * el, const char ** attr)
 {
 depth++;
-if (depth == 1)
-    ParseUsers(el, attr);
+if (depth == 1 && strcasecmp(el, "users") == 0)
+    parsingAnswer = true;
 
-if (depth > 1)
+if (depth > 1 && parsingAnswer)
     userParser.ParseStart(el, attr);
 
 return 0;
 }
 //-----------------------------------------------------------------------------
-void PARSER_GET_USERS::ParseEnd(const char * el)
+void GET_USERS::PARSER::ParseEnd(const char * el)
 {
 depth--;
-if (depth > 0)
+if (depth > 0 && parsingAnswer)
     userParser.ParseEnd(el);
 
-if (depth == 0)
+if (depth == 0 && parsingAnswer)
+    {
     if (callback)
-        callback(&info, data);
-}
-//-----------------------------------------------------------------------------
-void PARSER_GET_USERS::ParseUsers(const char * el, const char ** /*attr*/)
-{
-if (strcasecmp(el, "users") == 0)
+        callback(error.empty(), error, info, data);
+    error.clear();
     info.clear();
+    parsingAnswer = false;
+    }
 }
 //-----------------------------------------------------------------------------
-void PARSER_GET_USERS::AddUser(const PARSER_GET_USER::INFO & userInfo)
+void GET_USERS::PARSER::AddUser(const GET_USER::INFO & userInfo)
 {
 info.push_back(userInfo);
 }
 //-----------------------------------------------------------------------------
-void PARSER_GET_USERS::SetCallback(CALLBACK f, void * d)
+void GET_USERS::PARSER::SetCallback(CALLBACK f, void * d)
 {
 callback = f;
-data = data;
+data = d;
 }
 //-----------------------------------------------------------------------------
-void PARSER_GET_USERS::UserCallback(const PARSER_GET_USER::INFO & info, void * data)
+void GET_USERS::PARSER::UserCallback(bool result, const std::string & error, const GET_USER::INFO & info, void * data)
 {
-    PARSER_GET_USERS * parser = static_cast<PARSER_GET_USERS *>(data);
-    parser->AddUser(info);
+    GET_USERS::PARSER * parser = static_cast<GET_USERS::PARSER *>(data);
+    if (!result)
+        parser->SetError(error);
+    else
+        parser->AddUser(info);
 }