X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/1b2ab8e6d556a8ed30d4feadc72263b3f4c86665..8c6fa3fbaccc22127280bf77a48fab5a3ee0716e:/stglibs/srvconf.lib/parsers/get_service.cpp diff --git a/stglibs/srvconf.lib/parsers/get_service.cpp b/stglibs/srvconf.lib/parsers/get_service.cpp index 105b7395..e9949cbc 100644 --- a/stglibs/srvconf.lib/parsers/get_service.cpp +++ b/stglibs/srvconf.lib/parsers/get_service.cpp @@ -28,14 +28,15 @@ using namespace STG; -GET_SERVICE::PARSER::PARSER(CALLBACK f, void * d) +GET_SERVICE::PARSER::PARSER(CALLBACK f, void * d, const std::string & e) : callback(f), data(d), + encoding(e), depth(0), parsingAnswer(false) { AddParser(propertyParsers, "name", info.name); - AddParser(propertyParsers, "comment", info.comment); + AddParser(propertyParsers, "comment", info.comment, GetEncodedValue); AddParser(propertyParsers, "cost", info.cost); AddParser(propertyParsers, "payDay", info.payDay); } @@ -53,8 +54,8 @@ depth++; if (depth == 1) ParseService(el, attr); -if (depth == 2 && parsingAnswer) - ParseServiceParams(el, attr); +/*if (depth == 2 && parsingAnswer) + ParseServiceParams(el, attr);*/ return 0; } @@ -85,15 +86,23 @@ if (strcasecmp(el, "service") == 0) error = "Service not found."; } else + { parsingAnswer = true; + for (const char ** pos = attr; *pos != NULL; pos = pos + 2) + if (!TryParse(propertyParsers, ToLower(*pos), pos, encoding, *pos)) + { + error = std::string("Invalid parameter '") + *pos + "' or value '" + *(pos + 1) + "'."; + break; + } + } } else parsingAnswer = true; } } //----------------------------------------------------------------------------- -void GET_SERVICE::PARSER::ParseServiceParams(const char * el, const char ** attr) +/*void GET_SERVICE::PARSER::ParseServiceParams(const char * el, const char ** attr) { -if (!TryParse(propertyParsers, ToLower(el), attr)) +if (!TryParse(propertyParsers, ToLower(el), attr, encoding)) error = "Invalid parameter."; -} +}*/