mirror of https://github.com/minetest/minetest.git
Protocol 25: Repurpose string field for access denial
Send it always, and make client use it as fallback for unknown reason strings. This gives us future-proof-ness.
This commit is contained in:
parent
bf7174f3f9
commit
a9213fd12c
|
@ -217,9 +217,11 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt)
|
|||
*pkt >> denyCode;
|
||||
if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
|
||||
*pkt >> m_access_denied_reason;
|
||||
}
|
||||
else if (denyCode < SERVER_ACCESSDENIED_MAX) {
|
||||
} else if (denyCode < SERVER_ACCESSDENIED_MAX) {
|
||||
m_access_denied_reason = accessDeniedStrings[denyCode];
|
||||
} else {
|
||||
// Use the fallback string sent by the server
|
||||
*pkt >> m_access_denied_reason;
|
||||
}
|
||||
}
|
||||
// 13/03/15 Legacy code from 0.4.12 and lesser. must stay 1 year
|
||||
|
|
|
@ -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 reason == SERVER_ACCESSDENIED_CUSTOM_STRING),
|
||||
also used as string fallback for new reasons beyond the initial 10.
|
||||
*/
|
||||
TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks
|
||||
TOCLIENT_ADDNODE = 0x21,
|
||||
|
|
|
@ -1523,16 +1523,17 @@ void Server::SendBreath(u16 peer_id, u16 breath)
|
|||
Send(&pkt);
|
||||
}
|
||||
|
||||
void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason)
|
||||
void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason,
|
||||
const std::string &str_reason)
|
||||
{
|
||||
DSTACK(__FUNCTION_NAME);
|
||||
|
||||
NetworkPacket pkt(TOCLIENT_ACCESS_DENIED, 1, peer_id);
|
||||
pkt << (u8) reason;
|
||||
|
||||
if (reason == SERVER_ACCESSDENIED_CUSTOM_STRING) {
|
||||
pkt << custom_reason;
|
||||
}
|
||||
// Custom or fallback reason
|
||||
pkt << str_reason;
|
||||
|
||||
Send(&pkt);
|
||||
}
|
||||
|
||||
|
@ -2575,11 +2576,18 @@ void Server::DenySudoAccess(u16 peer_id)
|
|||
Send(&pkt);
|
||||
}
|
||||
|
||||
void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason)
|
||||
void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason,
|
||||
const std::string &custom_reason)
|
||||
{
|
||||
DSTACK(__FUNCTION_NAME);
|
||||
|
||||
if((u8) reason > 10) {
|
||||
// Send fallback
|
||||
SendAccessDenied(peer_id, reason, accessDeniedStrings[(u8) reason]);
|
||||
} else {
|
||||
SendAccessDenied(peer_id, reason, custom_reason);
|
||||
}
|
||||
|
||||
m_clients.event(peer_id, CSE_SetDenied);
|
||||
m_con.DisconnectPeer(peer_id);
|
||||
}
|
||||
|
|
|
@ -390,7 +390,7 @@ private:
|
|||
void SendMovement(u16 peer_id);
|
||||
void SendHP(u16 peer_id, u8 hp);
|
||||
void SendBreath(u16 peer_id, u16 breath);
|
||||
void SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason);
|
||||
void SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &str_reason);
|
||||
void SendAccessDenied_Legacy(u16 peer_id, const std::wstring &reason);
|
||||
void SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target);
|
||||
void SendItemDef(u16 peer_id,IItemDefManager *itemdef, u16 protocol_version);
|
||||
|
|
Loading…
Reference in New Issue