1 /*
2  *  The ManaPlus Client
3  *  Copyright (C) 2004-2009  The Mana World Development Team
4  *  Copyright (C) 2009-2010  The Mana Developers
5  *  Copyright (C) 2011-2019  The ManaPlus Developers
6  *  Copyright (C) 2019-2021  Andrei Karas
7  *
8  *  This file is part of The ManaPlus Client.
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #include "net/ea/loginrecv.h"
25 
26 #include "client.h"
27 
28 #include "fs/paths.h"
29 
30 #include "gui/windows/logindialog.h"
31 
32 #include "utils/gettext.h"
33 
34 #include "net/logindata.h"
35 #include "net/messagein.h"
36 
37 #include "debug.h"
38 
39 namespace Ea
40 {
41 
42 namespace LoginRecv
43 {
44     std::string mUpdateHost;
45     Worlds mWorlds;
46     Token mToken;
47     bool mVersionResponse = false;
48     bool mRegistrationEnabled = true;
49 }  // namespace LoginRecv
50 
processUpdateHost(Net::MessageIn & msg)51 void LoginRecv::processUpdateHost(Net::MessageIn &msg)
52 {
53     const int len = msg.readInt16("len") - 4;
54     mUpdateHost = msg.readString(len, "update host");
55 
56     if (!checkPath(mUpdateHost))
57     {
58         mUpdateHost.clear();
59         logger->log1("Warning: incorrect update server name");
60     }
61     loginData.updateHost = mUpdateHost;
62 
63     logger->log("Received update host \"%s\" from login server.",
64         mUpdateHost.c_str());
65 }
66 
processLoginError(Net::MessageIn & msg)67 void LoginRecv::processLoginError(Net::MessageIn &msg)
68 {
69     const uint8_t code = msg.readUInt8("error");
70     logger->log("Login::error code: %u", CAST_U32(code));
71     std::string date = msg.readString(20, "date");
72 
73     switch (code)
74     {
75         case 0:
76             // TRANSLATORS: error message
77             errorMessage = _("Unregistered ID.");
78             break;
79         case 1:
80             // TRANSLATORS: error message
81             errorMessage = _("Wrong password.");
82             LoginDialog::savedPassword.clear();
83             break;
84         case 2:
85             // TRANSLATORS: error message
86             errorMessage = _("Account expired.");
87             break;
88         case 3:
89             // TRANSLATORS: error message
90             errorMessage = _("Rejected from server.");
91             break;
92         case 4:
93             // TRANSLATORS: error message
94             errorMessage = _("You have been permanently banned from "
95                               "the game. Please contact the GM team.");
96             break;
97         case 5:
98             // TRANSLATORS: error message
99             errorMessage = _("Client too old or wrong server type.\n"
100                 "Please update client on http://manaplus.org");
101             break;
102         case 6:
103             // TRANSLATORS: error message
104             errorMessage = strprintf(_("You have been temporarily "
105                 "banned from the game until %s.\nPlease contact the GM "
106                 "team via the forums."), date.c_str());
107             break;
108         case 7:
109             // TRANSLATORS: error message
110             errorMessage = _("Server overpopulated.");
111             break;
112         case 9:
113             // TRANSLATORS: error message
114             errorMessage = _("This user name is already taken.");
115             break;
116         case 10:
117             // TRANSLATORS: error message
118             errorMessage = _("Wrong name.");
119             break;
120         case 11:
121             // TRANSLATORS: error message
122             errorMessage = _("Incorrect email.");
123             break;
124         case 99:
125             // TRANSLATORS: error message
126             errorMessage = _("Username permanently erased.");
127             break;
128         default:
129             // TRANSLATORS: error message
130             errorMessage = _("Unknown error.");
131             break;
132     }
133     client->setState(State::ERROR);
134 }
135 
136 }  // namespace Ea
137