]> git.stg.codes - stg.git/commitdiff
Use single simple parser for one-tag answers.
authorMaxim Mamontov <faust.madf@gmail.com>
Tue, 8 Oct 2013 12:56:11 +0000 (15:56 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Tue, 8 Oct 2013 12:56:11 +0000 (15:56 +0300)
18 files changed:
stglibs/srvconf.lib/Makefile
stglibs/srvconf.lib/include/stg/servconf.h
stglibs/srvconf.lib/include/stg/servconf_types.h
stglibs/srvconf.lib/parsers/add_admin.cpp [deleted file]
stglibs/srvconf.lib/parsers/add_admin.h [deleted file]
stglibs/srvconf.lib/parsers/check_user.cpp [deleted file]
stglibs/srvconf.lib/parsers/check_user.h [deleted file]
stglibs/srvconf.lib/parsers/chg_admin.cpp
stglibs/srvconf.lib/parsers/chg_admin.h
stglibs/srvconf.lib/parsers/chg_user.cpp
stglibs/srvconf.lib/parsers/chg_user.h
stglibs/srvconf.lib/parsers/del_admin.cpp [deleted file]
stglibs/srvconf.lib/parsers/del_admin.h [deleted file]
stglibs/srvconf.lib/parsers/send_message.cpp [deleted file]
stglibs/srvconf.lib/parsers/send_message.h [deleted file]
stglibs/srvconf.lib/parsers/simple.cpp [new file with mode: 0644]
stglibs/srvconf.lib/parsers/simple.h [new file with mode: 0644]
stglibs/srvconf.lib/servconf.cpp

index 09111f1bf60bb4fe5d16ec4dfaf1930422b93e5b..60177a9770e2fb184156df40df6af3f91cc17c7a 100644 (file)
@@ -9,18 +9,15 @@ STGLIBS = -lstgcommon \
 LIBS = -lexpat
 
 SRCS =  parsers/property.cpp \
+        parsers/simple.cpp \
         parsers/server_info.cpp \
         parsers/get_admins.cpp \
         parsers/get_admin.cpp \
         parsers/chg_admin.cpp \
-        parsers/add_admin.cpp \
-        parsers/del_admin.cpp \
         parsers/auth_by.cpp \
-        parsers/check_user.cpp \
         parsers/get_user.cpp \
         parsers/get_users.cpp \
         parsers/chg_user.cpp \
-        parsers/send_message.cpp \
         netunit.cpp \
         servconf.cpp
 
index d4ab651c99bc41ec056560e2e5b643da2fb52df1..0b929317916df1deebcc066d4e71b7ddee7648a7 100644 (file)
@@ -48,16 +48,16 @@ public:
 
     int GetAdmins(GET_ADMINS::CALLBACK f, void * data);
     int GetAdmin(const std::string & login, GET_ADMIN::CALLBACK f, void * data);
-    int ChgAdmin(const ADMIN_CONF_RES & conf, CHG_ADMIN::CALLBACK f, void * data);
-    int AddAdmin(const std::string & login, const ADMIN_CONF & conf, ADD_ADMIN::CALLBACK f, void * data);
-    int DelAdmin(const std::string & login, DEL_ADMIN::CALLBACK f, void * data);
+    int ChgAdmin(const ADMIN_CONF_RES & conf, SIMPLE::CALLBACK f, void * data);
+    int AddAdmin(const std::string & login, const ADMIN_CONF & conf, SIMPLE::CALLBACK f, void * data);
+    int DelAdmin(const std::string & login, SIMPLE::CALLBACK f, void * data);
 
     int GetUsers(GET_USERS::CALLBACK f, void * data);
     int GetUser(const std::string & login, GET_USER::CALLBACK f, void * data);
-    int ChgUser(const std::string & request, CHG_USER::CALLBACK f, void * data);
+    int ChgUser(const std::string & request, SIMPLE::CALLBACK f, void * data);
     int AuthBy(const std::string & login, AUTH_BY::CALLBACK f, void * data);
-    int SendMessage(const std::string & request, SEND_MESSAGE::CALLBACK f, void * data);
-    int CheckUser(const std::string & login, const std::string & password, CHECK_USER::CALLBACK f, void * data);
+    int SendMessage(const std::string & request, SIMPLE::CALLBACK f, void * data);
+    int CheckUser(const std::string & login, const std::string & password, SIMPLE::CALLBACK f, void * data);
 
     const std::string & GetStrError() const;
 
index 09f9b9702eb6419441114e49deb411ab0fcef8c8..f46aadb5e80c1647c7456f7eca19a2eb03b8efbf 100644 (file)
@@ -67,7 +67,12 @@ confLoginCipher,
 confData
 };
 
-typedef void (* SIMPLE_CALLBACK)(bool result, const std::string & reason, void * data);
+namespace SIMPLE
+{
+
+typedef void (* CALLBACK)(bool result, const std::string & reason, void * data);
+
+} // namespace SIMPLE
 
 namespace AUTH_BY
 {
@@ -94,13 +99,6 @@ typedef void (* CALLBACK)(bool result, const std::string & reason, const INFO &
 
 } // namespace SERVER_INFO
 
-namespace CHECK_USER
-{
-
-typedef SIMPLE_CALLBACK CALLBACK;
-
-} // namespace CHECK_USER
-
 namespace GET_USER
 {
 
@@ -152,20 +150,6 @@ typedef void (* CALLBACK)(bool result, const std::string & reason, const INFO &
 
 } // namespace GET_USERS
 
-namespace CHG_USER
-{
-
-typedef SIMPLE_CALLBACK CALLBACK;
-
-}
-
-namespace SEND_MESSAGE
-{
-
-typedef SIMPLE_CALLBACK CALLBACK;
-
-}
-
 namespace GET_ADMIN
 {
 
@@ -182,27 +166,6 @@ typedef void (* CALLBACK)(bool result, const std::string & reason, const INFO &
 
 }
 
-namespace ADD_ADMIN
-{
-
-typedef SIMPLE_CALLBACK CALLBACK;
-
-}
-
-namespace DEL_ADMIN
-{
-
-typedef SIMPLE_CALLBACK CALLBACK;
-
-}
-
-namespace CHG_ADMIN
-{
-
-typedef SIMPLE_CALLBACK CALLBACK;
-
-}
-
 } // namespace STG
 
 #endif
diff --git a/stglibs/srvconf.lib/parsers/add_admin.cpp b/stglibs/srvconf.lib/parsers/add_admin.cpp
deleted file mode 100644 (file)
index 786fc1e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#include "add_admin.h"
-
-#include <strings.h>
-
-using namespace STG;
-
-ADD_ADMIN::PARSER::PARSER(CALLBACK f, void * d)
-    : callback(f),
-      data(d),
-      depth(0)
-{
-}
-//-----------------------------------------------------------------------------
-int ADD_ADMIN::PARSER::ParseStart(const char *el, const char **attr)
-{
-depth++;
-if (depth == 1)
-    if (strcasecmp(el, "AddAdmin") == 0)
-        ParseAnswer(el, attr);
-return 0;
-}
-//-----------------------------------------------------------------------------
-void ADD_ADMIN::PARSER::ParseEnd(const char *)
-{
-depth--;
-}
-//-----------------------------------------------------------------------------
-void ADD_ADMIN::PARSER::ParseAnswer(const char * /*el*/, const char ** attr)
-{
-if (!callback)
-    return;
-if (attr && attr[0] && attr[1])
-    callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data);
-else
-    callback(false, "Invalid response.", data);
-}
diff --git a/stglibs/srvconf.lib/parsers/add_admin.h b/stglibs/srvconf.lib/parsers/add_admin.h
deleted file mode 100644 (file)
index a1349d9..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#ifndef __STG_STGLIBS_SRVCONF_PARSER_ADD_ADMIN_H__
-#define __STG_STGLIBS_SRVCONF_PARSER_ADD_ADMIN_H__
-
-#include "base.h"
-
-#include "stg/servconf_types.h"
-
-namespace STG
-{
-namespace ADD_ADMIN
-{
-
-class PARSER: public STG::PARSER
-{
-public:
-    PARSER(CALLBACK f, void * data);
-    int  ParseStart(const char * el, const char ** attr);
-    void ParseEnd(const char * el);
-
-private:
-    CALLBACK callback;
-    void * data;
-    int depth;
-
-    void ParseAnswer(const char * el, const char ** attr);
-};
-
-} // namespace ADD_ADMIN
-} // namespace STG
-
-#endif
diff --git a/stglibs/srvconf.lib/parsers/check_user.cpp b/stglibs/srvconf.lib/parsers/check_user.cpp
deleted file mode 100644 (file)
index 5f13129..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#include "check_user.h"
-
-#include <strings.h>
-
-using namespace STG;
-
-CHECK_USER::PARSER::PARSER(CALLBACK f, void * d)
-    : callback(f),
-      data(d),
-      depth(0)
-{
-}
-//-----------------------------------------------------------------------------
-int CHECK_USER::PARSER::ParseStart(const char * el, const char ** attr)
-{
-depth++;
-if (depth == 1)
-    if (strcasecmp(el, "CheckUser") == 0)
-        ParseAnswer(el, attr);
-return 0;
-}
-//-----------------------------------------------------------------------------
-void CHECK_USER::PARSER::ParseEnd(const char *)
-{
-depth--;
-}
-//-----------------------------------------------------------------------------
-void CHECK_USER::PARSER::ParseAnswer(const char *, const char **attr)
-{
-if (!callback)
-    return;
-if (attr && attr[0] && attr[1] && strcasecmp(attr[0], "value") == 0)
-    callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data);
-else
-    callback(false, "Invalid response.", data);
-}
diff --git a/stglibs/srvconf.lib/parsers/check_user.h b/stglibs/srvconf.lib/parsers/check_user.h
deleted file mode 100644 (file)
index 71dfec1..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#ifndef __STG_STGLIBS_SRVCONF_PARSER_CHECK_USER_H__
-#define __STG_STGLIBS_SRVCONF_PARSER_CHECK_USER_H__
-
-#include "base.h"
-
-#include "stg/servconf_types.h"
-
-namespace STG
-{
-namespace CHECK_USER
-{
-
-class PARSER: public STG::PARSER
-{
-public:
-    PARSER(CALLBACK f, void * data);
-    int  ParseStart(const char * el, const char ** attr);
-    void ParseEnd(const char * el);
-
-private:
-    CALLBACK callback;
-    void * data;
-    int depth;
-
-    void ParseAnswer(const char * el, const char ** attr);
-};
-
-} // namespace CHECK_USER
-} // namespace STG
-
-#endif
index 6edcec1cba768651a0072259a85a0678b057ba16..de9185148e23c205a7ef93baa0e64e37a0a2be22 100644 (file)
@@ -27,7 +27,7 @@
 
 using namespace STG;
 
-CHG_ADMIN::PARSER::PARSER(CALLBACK f, void * d)
+CHG_ADMIN::PARSER::PARSER(SIMPLE::CALLBACK f, void * d)
     : callback(f),
       data(d),
       depth(0)
@@ -53,7 +53,7 @@ void CHG_ADMIN::PARSER::ParseAnswer(const char * /*el*/, const char ** attr)
 if (!callback)
     return;
 if (attr && attr[0] && attr[1])
-    callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data);
+    callback(strcasecmp(attr[1], "ok") == 0, attr[1], data);
 else
     callback(false, "Invalid response.", data);
 }
index 03da22c3731b5735251cbdae46764e7942098f43..9fd38104aa51312195650fb9c9072e3aaa780693 100644 (file)
@@ -37,12 +37,12 @@ namespace CHG_ADMIN
 class PARSER: public STG::PARSER
 {
 public:
-    PARSER(CALLBACK f, void * data);
+    PARSER(SIMPLE::CALLBACK f, void * data);
     int  ParseStart(const char * el, const char ** attr);
     void ParseEnd(const char * el);
 
 private:
-    CALLBACK callback;
+    SIMPLE::CALLBACK callback;
     void * data;
     int depth;
 
index f05c21fdb385d59407f4ce428f439ccdd728f2c0..a656c287b0bb0154af2ef8ce1cc750c7172a3836 100644 (file)
@@ -25,7 +25,7 @@
 
 using namespace STG;
 
-CHG_USER::PARSER::PARSER(CALLBACK f, void * d)
+CHG_USER::PARSER::PARSER(SIMPLE::CALLBACK f, void * d)
     : callback(f),
       data(d),
       depth(0)
index c3ec1888118f9f5ffb62a90adebb4fb0e99d3bed..6bc76fde869bc00cfe22f5efd5d9b858dd544b62 100644 (file)
@@ -34,12 +34,12 @@ namespace CHG_USER
 class PARSER: public STG::PARSER
 {
 public:
-    PARSER(CALLBACK f, void * data);
+    PARSER(SIMPLE::CALLBACK f, void * data);
     int  ParseStart(const char * el, const char ** attr);
     void ParseEnd(const char * el);
 
 private:
-    CALLBACK callback;
+    SIMPLE::CALLBACK callback;
     void * data;
     int depth;
 
diff --git a/stglibs/srvconf.lib/parsers/del_admin.cpp b/stglibs/srvconf.lib/parsers/del_admin.cpp
deleted file mode 100644 (file)
index 2357cbc..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#include "del_admin.h"
-
-#include <strings.h>
-
-using namespace STG;
-
-DEL_ADMIN::PARSER::PARSER(CALLBACK f, void * d)
-    : callback(f),
-      data(d),
-      depth(0)
-{
-}
-//-----------------------------------------------------------------------------
-int DEL_ADMIN::PARSER::ParseStart(const char *el, const char **attr)
-{
-depth++;
-if (depth == 1)
-    if (strcasecmp(el, "DelAdmin") == 0)
-        ParseAnswer(el, attr);
-return 0;
-}
-//-----------------------------------------------------------------------------
-void DEL_ADMIN::PARSER::ParseEnd(const char *)
-{
-depth--;
-}
-//-----------------------------------------------------------------------------
-void DEL_ADMIN::PARSER::ParseAnswer(const char * /*el*/, const char ** attr)
-{
-if (!callback)
-    return;
-if (attr && attr[0] && attr[1])
-    callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data);
-else
-    callback(false, "Invalid response.", data);
-}
diff --git a/stglibs/srvconf.lib/parsers/del_admin.h b/stglibs/srvconf.lib/parsers/del_admin.h
deleted file mode 100644 (file)
index ec44ef6..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#ifndef __STG_STGLIBS_SRVCONF_PARSER_DEL_ADMIN_H__
-#define __STG_STGLIBS_SRVCONF_PARSER_DEL_ADMIN_H__
-
-#include "base.h"
-
-#include "stg/servconf_types.h"
-
-namespace STG
-{
-namespace DEL_ADMIN
-{
-
-class PARSER: public STG::PARSER
-{
-public:
-    PARSER(CALLBACK f, void * data);
-    int  ParseStart(const char * el, const char ** attr);
-    void ParseEnd(const char * el);
-
-private:
-    CALLBACK callback;
-    void * data;
-    int depth;
-
-    void ParseAnswer(const char * el, const char ** attr);
-};
-
-} // namespace DEL_ADMIN
-} // namespace STG
-
-#endif
diff --git a/stglibs/srvconf.lib/parsers/send_message.cpp b/stglibs/srvconf.lib/parsers/send_message.cpp
deleted file mode 100644 (file)
index 053583f..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#include "send_message.h"
-
-#include <strings.h>
-
-using namespace STG;
-
-SEND_MESSAGE::PARSER::PARSER(CALLBACK f, void * d)
-    : callback(f),
-      data(d),
-      depth(0)
-{
-}
-//-----------------------------------------------------------------------------
-int SEND_MESSAGE::PARSER::ParseStart(const char * el, const char ** attr)
-{
-depth++;
-if (depth == 1)
-    if (strcasecmp(el, "SendMessageResult") == 0)
-        ParseAnswer(el, attr);
-return 0;
-}
-//-----------------------------------------------------------------------------
-void SEND_MESSAGE::PARSER::ParseEnd(const char * /*el*/)
-{
-depth--;
-}
-//-----------------------------------------------------------------------------
-void SEND_MESSAGE::PARSER::ParseAnswer(const char * /*el*/, const char **attr)
-{
-if (!callback)
-    return;
-if (attr && attr[0] && attr[1])
-    callback(strcasecmp(attr[1], "ok") == 0, attr[1], data);
-else
-    callback(false, "Invalid response.", data);
-}
diff --git a/stglibs/srvconf.lib/parsers/send_message.h b/stglibs/srvconf.lib/parsers/send_message.h
deleted file mode 100644 (file)
index 13132a0..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *    This program is free software; you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation; either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    This program is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-/*
- *    Author : Boris Mikhailenko <stg34@stargazer.dp.ua>
- *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
- */
-
-#ifndef __STG_STGLIBS_SRVCONF_PARSER_SEND_MESSAGE_H__
-#define __STG_STGLIBS_SRVCONF_PARSER_SEND_MESSAGE_H__
-
-#include "base.h"
-
-#include "stg/servconf_types.h"
-
-namespace STG
-{
-namespace SEND_MESSAGE
-{
-
-class PARSER: public STG::PARSER
-{
-public:
-    PARSER(CALLBACK f, void * data);
-    int  ParseStart(const char * el, const char ** attr);
-    void ParseEnd(const char * el);
-
-private:
-    CALLBACK callback;
-    void * data;
-    int depth;
-
-    void ParseAnswer(const char * el, const char ** attr);
-};
-
-} // namespace SEND_MESSAGE
-} // namespace STG
-
-#endif
diff --git a/stglibs/srvconf.lib/parsers/simple.cpp b/stglibs/srvconf.lib/parsers/simple.cpp
new file mode 100644 (file)
index 0000000..89537f2
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
+ */
+
+#include "simple.h"
+
+#include <strings.h>
+
+using namespace STG;
+
+SIMPLE::PARSER::PARSER(const std::string & t, CALLBACK f, void * d)
+    : tag(t),
+      callback(f),
+      data(d),
+      depth(0)
+{
+}
+//-----------------------------------------------------------------------------
+int SIMPLE::PARSER::ParseStart(const char *el, const char **attr)
+{
+depth++;
+if (depth == 1)
+    if (strcasecmp(el, tag.c_str()) == 0)
+        ParseAnswer(el, attr);
+return 0;
+}
+//-----------------------------------------------------------------------------
+void SIMPLE::PARSER::ParseEnd(const char *)
+{
+depth--;
+}
+//-----------------------------------------------------------------------------
+void SIMPLE::PARSER::ParseAnswer(const char * /*el*/, const char ** attr)
+{
+if (!callback)
+    return;
+if (attr && attr[0] && attr[1])
+    callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : attr[1], data);
+else
+    callback(false, "Invalid response.", data);
+}
diff --git a/stglibs/srvconf.lib/parsers/simple.h b/stglibs/srvconf.lib/parsers/simple.h
new file mode 100644 (file)
index 0000000..03c950b
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
+ */
+
+#ifndef __STG_STGLIBS_SRVCONF_PARSER_SIMPLE_H__
+#define __STG_STGLIBS_SRVCONF_PARSER_SIMPLE_H__
+
+#include "base.h"
+
+#include "stg/servconf_types.h"
+
+#include <string>
+
+namespace STG
+{
+namespace SIMPLE
+{
+
+class PARSER: public STG::PARSER
+{
+public:
+    PARSER(const std::string & tag, CALLBACK f, void * data);
+    int  ParseStart(const char * el, const char ** attr);
+    void ParseEnd(const char * el);
+
+private:
+    std::string tag;
+    CALLBACK callback;
+    void * data;
+    int depth;
+
+    void ParseAnswer(const char * el, const char ** attr);
+};
+
+} // namespace SIMPLE
+} // namespace STG
+
+#endif
index d2241b0e93aa78a435d80cb782d8095fd102277e..e8e07e1071703974b18b389bee9752ea6eb8cead 100644 (file)
 
 #include "netunit.h"
 
+#include "parsers/simple.h"
+
 #include "parsers/server_info.h"
 
 #include "parsers/get_admins.h"
 #include "parsers/get_admin.h"
 #include "parsers/chg_admin.h"
-#include "parsers/add_admin.h"
-#include "parsers/del_admin.h"
 
 #include "parsers/auth_by.h"
-#include "parsers/check_user.h"
 #include "parsers/get_users.h"
 #include "parsers/get_user.h"
 #include "parsers/chg_user.h"
-#include "parsers/send_message.h"
 
 #include "parsers/base.h"
 
@@ -65,6 +63,13 @@ public:
         return ExecImpl(request, cp);
     }
 
+    template <class P, typename C>
+    int Exec(const std::string & tag, const std::string & request, C callback, void * data)
+    {
+        P cp(tag, callback, data);
+        return ExecImpl(request, cp);
+    }
+
 private:
     NETTRANSACT nt;
 
@@ -119,22 +124,22 @@ int SERVCONF::GetAdmin(const std::string & login, GET_ADMIN::CALLBACK f, void *
 return pImpl->Exec<GET_ADMIN::PARSER>("<GetAdmin login=\"" + login + "\"/>", f, data);
 }
 
-int SERVCONF::ChgAdmin(const ADMIN_CONF_RES & conf, CHG_ADMIN::CALLBACK f, void * data)
+int SERVCONF::ChgAdmin(const ADMIN_CONF_RES & conf, SIMPLE::CALLBACK f, void * data)
 {
 return pImpl->Exec<CHG_ADMIN::PARSER>("<ChgAdmin" + CHG_ADMIN::Serialize(conf) + "/>", f, data);
 }
 
-int SERVCONF::AddAdmin(const std::string & login, const ADMIN_CONF & conf, ADD_ADMIN::CALLBACK f, void * data)
+int SERVCONF::AddAdmin(const std::string & login, const ADMIN_CONF & conf, SIMPLE::CALLBACK f, void * data)
 {
-int res = pImpl->Exec<ADD_ADMIN::PARSER>("<AddAdmin login=\"" + login + "\"/>", f, data);
+int res = pImpl->Exec<SIMPLE::PARSER>("AddAdmin", "<AddAdmin login=\"" + login + "\"/>", f, data);
 if (res != st_ok)
     return res;
 return pImpl->Exec<CHG_ADMIN::PARSER>("<ChgAdmin" + CHG_ADMIN::Serialize(conf) + "/>", f, data);
 }
 
-int SERVCONF::DelAdmin(const std::string & login, DEL_ADMIN::CALLBACK f, void * data)
+int SERVCONF::DelAdmin(const std::string & login, SIMPLE::CALLBACK f, void * data)
 {
-return pImpl->Exec<DEL_ADMIN::PARSER>("<DelAdmin login=\"" + login + "\"/>", f, data);
+return pImpl->Exec<SIMPLE::PARSER>("DelAdmin", "<DelAdmin login=\"" + login + "\"/>", f, data);
 }
 
 // -- Users --
@@ -149,7 +154,7 @@ int SERVCONF::GetUser(const std::string & login, GET_USER::CALLBACK f, void * da
 return pImpl->Exec<GET_USER::PARSER>("<GetUser login=\"" + login + "\"/>", f, data);
 }
 
-int SERVCONF::ChgUser(const std::string & request, CHG_USER::CALLBACK f, void * data)
+int SERVCONF::ChgUser(const std::string & request, SIMPLE::CALLBACK f, void * data)
 {
 return pImpl->Exec<CHG_USER::PARSER>(request, f, data);
 }
@@ -159,14 +164,14 @@ int SERVCONF::AuthBy(const std::string & login, AUTH_BY::CALLBACK f, void * data
 return pImpl->Exec<AUTH_BY::PARSER>("<GetUserAuthBy login=\"" + login + "\"/>", f, data);
 }
 
-int SERVCONF::SendMessage(const std::string & request, SEND_MESSAGE::CALLBACK f, void * data)
+int SERVCONF::SendMessage(const std::string & request, SIMPLE::CALLBACK f, void * data)
 {
-return pImpl->Exec<SEND_MESSAGE::PARSER>(request, f, data);
+return pImpl->Exec<SIMPLE::PARSER>("SendMessage", request, f, data);
 }
 
-int SERVCONF::CheckUser(const std::string & login, const std::string & password, CHECK_USER::CALLBACK f, void * data)
+int SERVCONF::CheckUser(const std::string & login, const std::string & password, SIMPLE::CALLBACK f, void * data)
 {
-return pImpl->Exec<CHECK_USER::PARSER>("<CheckUser login=\"" + login + "\" password=\"" + password + "\"/>", f, data);
+return pImpl->Exec<SIMPLE::PARSER>("CheckUser", "<CheckUser login=\"" + login + "\" password=\"" + password + "\"/>", f, data);
 }
 
 const std::string & SERVCONF::GetStrError() const