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;
|
*pkt >> denyCode;
|
||||||
if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
|
if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) {
|
||||||
*pkt >> m_access_denied_reason;
|
*pkt >> m_access_denied_reason;
|
||||||
}
|
} else if (denyCode < SERVER_ACCESSDENIED_MAX) {
|
||||||
else if (denyCode < SERVER_ACCESSDENIED_MAX) {
|
|
||||||
m_access_denied_reason = accessDeniedStrings[denyCode];
|
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
|
// 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,
|
TOCLIENT_ACCESS_DENIED = 0x0A,
|
||||||
/*
|
/*
|
||||||
u8 reason
|
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_BLOCKDATA = 0x20, //TODO: Multiple blocks
|
||||||
TOCLIENT_ADDNODE = 0x21,
|
TOCLIENT_ADDNODE = 0x21,
|
||||||
|
|
|
@ -1523,16 +1523,17 @@ void Server::SendBreath(u16 peer_id, u16 breath)
|
||||||
Send(&pkt);
|
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);
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
|
||||||
NetworkPacket pkt(TOCLIENT_ACCESS_DENIED, 1, peer_id);
|
NetworkPacket pkt(TOCLIENT_ACCESS_DENIED, 1, peer_id);
|
||||||
pkt << (u8) reason;
|
pkt << (u8) reason;
|
||||||
|
|
||||||
if (reason == SERVER_ACCESSDENIED_CUSTOM_STRING) {
|
// Custom or fallback reason
|
||||||
pkt << custom_reason;
|
pkt << str_reason;
|
||||||
}
|
|
||||||
Send(&pkt);
|
Send(&pkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2575,11 +2576,18 @@ void Server::DenySudoAccess(u16 peer_id)
|
||||||
Send(&pkt);
|
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);
|
DSTACK(__FUNCTION_NAME);
|
||||||
|
|
||||||
SendAccessDenied(peer_id, reason, custom_reason);
|
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_clients.event(peer_id, CSE_SetDenied);
|
||||||
m_con.DisconnectPeer(peer_id);
|
m_con.DisconnectPeer(peer_id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -390,7 +390,7 @@ private:
|
||||||
void SendMovement(u16 peer_id);
|
void SendMovement(u16 peer_id);
|
||||||
void SendHP(u16 peer_id, u8 hp);
|
void SendHP(u16 peer_id, u8 hp);
|
||||||
void SendBreath(u16 peer_id, u16 breath);
|
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 SendAccessDenied_Legacy(u16 peer_id, const std::wstring &reason);
|
||||||
void SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target);
|
void SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target);
|
||||||
void SendItemDef(u16 peer_id,IItemDefManager *itemdef, u16 protocol_version);
|
void SendItemDef(u16 peer_id,IItemDefManager *itemdef, u16 protocol_version);
|
||||||
|
|
Loading…
Reference in New Issue