]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/sgconfig-ng/parser_info.cpp
Better handling of errors from server. Refactoring.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig-ng / parser_info.cpp
1 #include <sys/utsname.h>
2
3 #include <sstream>
4
5 #include "version.h"
6 // TODO: Fix this shit!
7 #include "../../../settings.h"
8 #include "parser_info.h"
9
10 PARSER_GET_SERVER_INFO::PARSER_GET_SERVER_INFO(const SETTINGS * s, int tn, int un)
11     : PARSER(),
12       result("<error message=\"Not implemented\"/>"),
13       settings(s),
14       tariffsNum(tn),
15       usersNum(un)
16 {
17 }
18
19 PARSER_GET_SERVER_INFO::~PARSER_GET_SERVER_INFO()
20 {
21 }
22
23 bool PARSER_GET_SERVER_INFO::StartTag(const char * name, const char ** attr)
24 {
25     std::string tag(name);
26     if (tag != "GetServerInfo") {
27         return false;
28     }
29
30     return true;
31 }
32
33 bool PARSER_GET_SERVER_INFO::EndTag(const char * name)
34 {
35     std::string tag(name);
36     if (tag != "GetServerInfo") {
37         return false;
38     }
39
40     std::stringstream answer;
41     answer << "<ServerInfo>\n";
42     answer << "\t<version value=\"" << SERVER_VERSION << "\"/>\n";
43     answer << "\t<tariff_num value=\"" << tariffsNum << "\"/>\n";
44     answer << "\t<tariff value=\"2\"/>\n";
45     answer << "\t<users_num value=\"" << usersNum << "\"/>\n";
46     struct utsname utsn;
47     uname(&utsn);
48     answer << "\t<uname value=\"" << utsn.sysname << " " << utsn.release << " " << utsn.machine << " " << utsn.nodename << "\"/>\n";
49     answer << "\t<dir_num value=\"" << DIR_NUM << "\"/>\n";
50     answer << "\t<day_fee value=\"" << settings->GetDayFee() << "\"/>\n";
51     for (int i = 0; i < DIR_NUM; ++i) {
52         std::string encoded;
53         Encode12str(encoded, settings->GetDirName(i));
54         answer << "\t<dir_name_" << i << " value=\"" << encoded << "\"/>\n";
55     }
56     answer << "</ServerInfo>";
57
58     result = answer.str();
59
60     return true;
61 }