summaryrefslogtreecommitdiff
path: root/src/network/network_admin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/network_admin.cpp')
-rw-r--r--src/network/network_admin.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp
index 811daaced..49b222f36 100644
--- a/src/network/network_admin.cpp
+++ b/src/network/network_admin.cpp
@@ -790,6 +790,25 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_CHAT(Packet *p)
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
*/