aboutsummaryrefslogtreecommitdiff
path: root/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/network')
-rw-r--r--src/network/clientpackethandler.cpp23
-rw-r--r--src/network/networkprotocol.h9
2 files changed, 27 insertions, 5 deletions
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 15d5456fa..2133543d9 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -215,11 +215,28 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA;
*pkt >> denyCode;
- if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
+ if (denyCode == SERVER_ACCESSDENIED_SHUTDOWN ||
+ denyCode == SERVER_ACCESSDENIED_CRASH) {
*pkt >> m_access_denied_reason;
- }
- else if (denyCode < SERVER_ACCESSDENIED_MAX) {
+ if (m_access_denied_reason == "") {
+ m_access_denied_reason = accessDeniedStrings[denyCode];
+ }
+ u8 reconnect;
+ *pkt >> reconnect;
+ m_access_denied_reconnect = reconnect & 1;
+ } else if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
+ *pkt >> m_access_denied_reason;
+ } else if (denyCode < SERVER_ACCESSDENIED_MAX) {
m_access_denied_reason = accessDeniedStrings[denyCode];
+ } else {
+ // Allow us to add new error messages to the
+ // protocol without raising the protocol version, if we want to.
+ // Until then (which may be never), this is outside
+ // of the defined protocol.
+ *pkt >> m_access_denied_reason;
+ if (m_access_denied_reason == "") {
+ m_access_denied_reason = "Unknown";
+ }
}
}
// 13/03/15 Legacy code from 0.4.12 and lesser. must stay 1 year
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h
index e4b566740..feb18e509 100644
--- a/src/network/networkprotocol.h
+++ b/src/network/networkprotocol.h
@@ -202,7 +202,8 @@ enum ToClientCommand
TOCLIENT_ACCESS_DENIED = 0x0A,
/*
u8 reason
- std::string custom reason (if reason == SERVER_ACCESSDENIED_CUSTOM_STRING)
+ std::string custom reason (if needed, otherwise "")
+ u8 (bool) reconnect
*/
TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
TOCLIENT_ADDNODE = 0x21,
@@ -937,6 +938,8 @@ enum AccessDeniedCode {
SERVER_ACCESSDENIED_ALREADY_CONNECTED,
SERVER_ACCESSDENIED_SERVER_FAIL,
SERVER_ACCESSDENIED_CUSTOM_STRING,
+ SERVER_ACCESSDENIED_SHUTDOWN,
+ SERVER_ACCESSDENIED_CRASH,
SERVER_ACCESSDENIED_MAX,
};
@@ -954,8 +957,10 @@ const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = {
"Too many users.",
"Empty passwords are disallowed. Set a password and try again.",
"Another client is connected with this name. If your client closed unexpectedly, try again in a minute.",
- "Server authention failed. This is likely a server error."
+ "Server authentication failed. This is likely a server error.",
"",
+ "Server shutting down.",
+ "This server has experienced an internal error. You will now be disconnected."
};
#endif