diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -790,6 +790,25 @@ NetworkRecvStatus ServerNetworkAdminSock return NETWORK_RECV_STATUS_OKAY; } +NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_EXTERNAL_CHAT(Packet *p) +{ + if (this->status == ADMIN_STATUS_INACTIVE) return this->SendError(NETWORK_ERROR_NOT_EXPECTED); + + std::string source = p->Recv_string(NETWORK_CHAT_LENGTH); + TextColour colour = (TextColour)p->Recv_uint16(); + std::string user = p->Recv_string(NETWORK_CHAT_LENGTH); + std::string msg = p->Recv_string(NETWORK_CHAT_LENGTH); + + if (!IsValidConsoleColour(colour)) { + Debug(net, 1, "[admin] Not supported chat colour {} ({}, {}, {}) from '{}' ({}).", (uint16)colour, source, user, msg, this->admin_name, this->admin_version); + return this->SendError(NETWORK_ERROR_ILLEGAL_PACKET); + } + + NetworkServerSendExternalChat(source, colour, user, msg); + + return NETWORK_RECV_STATUS_OKAY; +} + /* * Useful wrapper functions */