mirror of https://github.com/OpenTTD/OpenTTD
Codechange: [Network] Use std::string for server side logic of kicking and banning clients
parent
f0e1cd0129
commit
fd95736bac
|
@ -473,7 +473,7 @@ DEF_CONSOLE_CMD(ConClearBuffer)
|
||||||
* Network Core Console Commands
|
* Network Core Console Commands
|
||||||
**********************************/
|
**********************************/
|
||||||
|
|
||||||
static bool ConKickOrBan(const char *argv, bool ban, const char *reason)
|
static bool ConKickOrBan(const char *argv, bool ban, const std::string &reason)
|
||||||
{
|
{
|
||||||
uint n;
|
uint n;
|
||||||
|
|
||||||
|
@ -527,7 +527,7 @@ DEF_CONSOLE_CMD(ConKick)
|
||||||
if (argc != 2 && argc != 3) return false;
|
if (argc != 2 && argc != 3) return false;
|
||||||
|
|
||||||
/* No reason supplied for kicking */
|
/* No reason supplied for kicking */
|
||||||
if (argc == 2) return ConKickOrBan(argv[1], false, nullptr);
|
if (argc == 2) return ConKickOrBan(argv[1], false, {});
|
||||||
|
|
||||||
/* Reason for kicking supplied */
|
/* Reason for kicking supplied */
|
||||||
size_t kick_message_length = strlen(argv[2]);
|
size_t kick_message_length = strlen(argv[2]);
|
||||||
|
@ -551,7 +551,7 @@ DEF_CONSOLE_CMD(ConBan)
|
||||||
if (argc != 2 && argc != 3) return false;
|
if (argc != 2 && argc != 3) return false;
|
||||||
|
|
||||||
/* No reason supplied for kicking */
|
/* No reason supplied for kicking */
|
||||||
if (argc == 2) return ConKickOrBan(argv[1], true, nullptr);
|
if (argc == 2) return ConKickOrBan(argv[1], true, {});
|
||||||
|
|
||||||
/* Reason for kicking supplied */
|
/* Reason for kicking supplied */
|
||||||
size_t kick_message_length = strlen(argv[2]);
|
size_t kick_message_length = strlen(argv[2]);
|
||||||
|
|
|
@ -80,9 +80,9 @@ void NetworkServerDoMove(ClientID client_id, CompanyID company_id);
|
||||||
void NetworkServerSendRcon(ClientID client_id, TextColour colour_code, const std::string &string);
|
void NetworkServerSendRcon(ClientID client_id, TextColour colour_code, const std::string &string);
|
||||||
void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const std::string &msg, ClientID from_id, int64 data = 0, bool from_admin = false);
|
void NetworkServerSendChat(NetworkAction action, DestType type, int dest, const std::string &msg, ClientID from_id, int64 data = 0, bool from_admin = false);
|
||||||
|
|
||||||
void NetworkServerKickClient(ClientID client_id, const char *reason);
|
void NetworkServerKickClient(ClientID client_id, const std::string &reason);
|
||||||
uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const char *reason);
|
uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const std::string &reason);
|
||||||
uint NetworkServerKickOrBanIP(const char *ip, bool ban, const char *reason);
|
uint NetworkServerKickOrBanIP(const std::string &ip, bool ban, const std::string &reason);
|
||||||
|
|
||||||
void NetworkInitChatMessage();
|
void NetworkInitChatMessage();
|
||||||
void CDECL NetworkAddChatMessage(TextColour colour, uint duration, const std::string &message);
|
void CDECL NetworkAddChatMessage(TextColour colour, uint duration, const std::string &message);
|
||||||
|
|
|
@ -1661,7 +1661,7 @@ enum DropDownAdmin {
|
||||||
*/
|
*/
|
||||||
static void AdminClientKickCallback(Window *w, bool confirmed)
|
static void AdminClientKickCallback(Window *w, bool confirmed)
|
||||||
{
|
{
|
||||||
if (confirmed) NetworkServerKickClient(_admin_client_id, nullptr);
|
if (confirmed) NetworkServerKickClient(_admin_client_id, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1671,7 +1671,7 @@ static void AdminClientKickCallback(Window *w, bool confirmed)
|
||||||
*/
|
*/
|
||||||
static void AdminClientBanCallback(Window *w, bool confirmed)
|
static void AdminClientBanCallback(Window *w, bool confirmed)
|
||||||
{
|
{
|
||||||
if (confirmed) NetworkServerKickOrBanIP(_admin_client_id, true, nullptr);
|
if (confirmed) NetworkServerKickOrBanIP(_admin_client_id, true, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -429,12 +429,12 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo()
|
||||||
* @param error The error to disconnect for.
|
* @param error The error to disconnect for.
|
||||||
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
||||||
*/
|
*/
|
||||||
NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode error, const char *reason)
|
NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode error, const std::string &reason)
|
||||||
{
|
{
|
||||||
Packet *p = new Packet(PACKET_SERVER_ERROR);
|
Packet *p = new Packet(PACKET_SERVER_ERROR);
|
||||||
|
|
||||||
p->Send_uint8(error);
|
p->Send_uint8(error);
|
||||||
if (reason != nullptr) p->Send_string(reason);
|
if (!reason.empty()) p->Send_string(reason);
|
||||||
this->SendPacket(p);
|
this->SendPacket(p);
|
||||||
|
|
||||||
StringID strid = GetNetworkErrorMsg(error);
|
StringID strid = GetNetworkErrorMsg(error);
|
||||||
|
@ -447,7 +447,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err
|
||||||
|
|
||||||
DEBUG(net, 1, "'%s' made an error and has been disconnected: %s", client_name, GetString(strid).c_str());
|
DEBUG(net, 1, "'%s' made an error and has been disconnected: %s", client_name, GetString(strid).c_str());
|
||||||
|
|
||||||
if (error == NETWORK_ERROR_KICKED && reason != nullptr) {
|
if (error == NETWORK_ERROR_KICKED && !reason.empty()) {
|
||||||
NetworkTextMessage(NETWORK_ACTION_KICKED, CC_DEFAULT, false, client_name, reason, strid);
|
NetworkTextMessage(NETWORK_ACTION_KICKED, CC_DEFAULT, false, client_name, reason, strid);
|
||||||
} else {
|
} else {
|
||||||
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", strid);
|
NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, "", strid);
|
||||||
|
@ -2054,7 +2054,7 @@ void NetworkServerSendRcon(ClientID client_id, TextColour colour_code, const std
|
||||||
* @param client_id The client to kick.
|
* @param client_id The client to kick.
|
||||||
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
||||||
*/
|
*/
|
||||||
void NetworkServerKickClient(ClientID client_id, const char *reason)
|
void NetworkServerKickClient(ClientID client_id, const std::string &reason)
|
||||||
{
|
{
|
||||||
if (client_id == CLIENT_ID_SERVER) return;
|
if (client_id == CLIENT_ID_SERVER) return;
|
||||||
NetworkClientSocket::GetByClientID(client_id)->SendError(NETWORK_ERROR_KICKED, reason);
|
NetworkClientSocket::GetByClientID(client_id)->SendError(NETWORK_ERROR_KICKED, reason);
|
||||||
|
@ -2066,7 +2066,7 @@ void NetworkServerKickClient(ClientID client_id, const char *reason)
|
||||||
* @param ban Whether to ban or kick.
|
* @param ban Whether to ban or kick.
|
||||||
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
||||||
*/
|
*/
|
||||||
uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const char *reason)
|
uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const std::string &reason)
|
||||||
{
|
{
|
||||||
return NetworkServerKickOrBanIP(NetworkClientSocket::GetByClientID(client_id)->GetClientIP(), ban, reason);
|
return NetworkServerKickOrBanIP(NetworkClientSocket::GetByClientID(client_id)->GetClientIP(), ban, reason);
|
||||||
}
|
}
|
||||||
|
@ -2077,7 +2077,7 @@ uint NetworkServerKickOrBanIP(ClientID client_id, bool ban, const char *reason)
|
||||||
* @param ban Whether to ban or just kick.
|
* @param ban Whether to ban or just kick.
|
||||||
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
* @param reason In case of kicking a client, specifies the reason for kicking the client.
|
||||||
*/
|
*/
|
||||||
uint NetworkServerKickOrBanIP(const char *ip, bool ban, const char *reason)
|
uint NetworkServerKickOrBanIP(const std::string &ip, bool ban, const std::string &reason)
|
||||||
{
|
{
|
||||||
/* Add address to ban-list */
|
/* Add address to ban-list */
|
||||||
if (ban) {
|
if (ban) {
|
||||||
|
@ -2101,7 +2101,7 @@ uint NetworkServerKickOrBanIP(const char *ip, bool ban, const char *reason)
|
||||||
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
|
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
|
||||||
if (cs->client_id == CLIENT_ID_SERVER) continue;
|
if (cs->client_id == CLIENT_ID_SERVER) continue;
|
||||||
if (cs->client_id == _redirect_console_to_client) continue;
|
if (cs->client_id == _redirect_console_to_client) continue;
|
||||||
if (cs->client_address.IsInNetmask(ip)) {
|
if (cs->client_address.IsInNetmask(ip.c_str())) {
|
||||||
NetworkServerKickClient(cs->client_id, reason);
|
NetworkServerKickClient(cs->client_id, reason);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,7 @@ public:
|
||||||
NetworkRecvStatus SendMove(ClientID client_id, CompanyID company_id);
|
NetworkRecvStatus SendMove(ClientID client_id, CompanyID company_id);
|
||||||
|
|
||||||
NetworkRecvStatus SendClientInfo(NetworkClientInfo *ci);
|
NetworkRecvStatus SendClientInfo(NetworkClientInfo *ci);
|
||||||
NetworkRecvStatus SendError(NetworkErrorCode error, const char *reason = nullptr);
|
NetworkRecvStatus SendError(NetworkErrorCode error, const std::string &reason = {});
|
||||||
NetworkRecvStatus SendChat(NetworkAction action, ClientID client_id, bool self_send, const std::string &msg, int64 data);
|
NetworkRecvStatus SendChat(NetworkAction action, ClientID client_id, bool self_send, const std::string &msg, int64 data);
|
||||||
NetworkRecvStatus SendJoin(ClientID client_id);
|
NetworkRecvStatus SendJoin(ClientID client_id);
|
||||||
NetworkRecvStatus SendFrame();
|
NetworkRecvStatus SendFrame();
|
||||||
|
|
Loading…
Reference in New Issue