using namespace STG;
-CHG_ADMIN::PARSER::PARSER(SIMPLE::CALLBACK f, void * d)
- : callback(f),
- data(d),
- depth(0)
-{
-}
-//-----------------------------------------------------------------------------
-int CHG_ADMIN::PARSER::ParseStart(const char *el, const char **attr)
-{
-depth++;
-if (depth == 1)
- if (strcasecmp(el, "SetAdmin") == 0)
- ParseAnswer(el, attr);
-return 0;
-}
-//-----------------------------------------------------------------------------
-void CHG_ADMIN::PARSER::ParseEnd(const char *)
-{
-depth--;
-}
-//-----------------------------------------------------------------------------
-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[1], data);
-else
- callback(false, "Invalid response.", data);
-}
-
std::string CHG_ADMIN::Serialize(const ADMIN_CONF_RES & conf)
{
std::string params;
namespace CHG_ADMIN
{
-class PARSER: public STG::PARSER
-{
-public:
- PARSER(SIMPLE::CALLBACK f, void * data);
- int ParseStart(const char * el, const char ** attr);
- void ParseEnd(const char * el);
-
-private:
- SIMPLE::CALLBACK callback;
- void * data;
- int depth;
-
- void ParseAnswer(const char * el, const char ** attr);
-};
-
std::string Serialize(const ADMIN_CONF_RES & conf);
} // namespace CHG_ADMIN
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);
+return pImpl->Exec<SIMPLE::PARSER>("ChgAdmin", "<ChgAdmin" + CHG_ADMIN::Serialize(conf) + "/>", f, data);
}
int SERVCONF::AddAdmin(const std::string & login, const ADMIN_CONF & conf, SIMPLE::CALLBACK f, void * 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);
+return pImpl->Exec<SIMPLE::PARSER>("ChgAdmin", "<ChgAdmin" + CHG_ADMIN::Serialize(conf) + "/>", f, data);
}
int SERVCONF::DelAdmin(const std::string & login, SIMPLE::CALLBACK f, void * data)