Net: Log sent and received game packets with type and status names

pull/261/head
Jonathan G Rennison 3 years ago
parent 7677d2d01a
commit 6d58115458

@ -134,6 +134,7 @@ SendPacketsState NetworkTCPSocketHandler::SendPackets(bool closing_down)
/* Is this packet sent? */
if (p->RemainingBytesToTransfer() == 0) {
/* Go to the next packet */
if (_debug_net_level >= 3) this->LogSentPacket(*p);
this->packet_queue.pop_front();
} else {
return SPS_PARTLY_SENT;
@ -216,6 +217,8 @@ std::unique_ptr<Packet> NetworkTCPSocketHandler::ReceivePacket()
return std::move(this->packet_recv);
}
void NetworkTCPSocketHandler::LogSentPacket(const Packet &pkt) {}
/**
* Check whether this socket can send or receive something.
* @return \c true when there is something to receive.

@ -54,6 +54,7 @@ public:
SendPacketsState SendPackets(bool closing_down = false);
virtual std::unique_ptr<Packet> ReceivePacket();
virtual void LogSentPacket(const Packet &pkt);
bool CanSendReceive();

@ -20,6 +20,65 @@
#include "../../safeguards.h"
static const char* _packet_game_type_names[] {
"SERVER_FULL",
"SERVER_BANNED",
"CLIENT_JOIN",
"SERVER_ERROR",
"CLIENT_COMPANY_INFO",
"SERVER_COMPANY_INFO",
"SERVER_CHECK_NEWGRFS",
"CLIENT_NEWGRFS_CHECKED",
"SERVER_NEED_GAME_PASSWORD",
"CLIENT_GAME_PASSWORD",
"SERVER_NEED_COMPANY_PASSWORD",
"CLIENT_COMPANY_PASSWORD",
"CLIENT_SETTINGS_PASSWORD",
"SERVER_SETTINGS_ACCESS",
"SERVER_WELCOME",
"SERVER_CLIENT_INFO",
"CLIENT_GETMAP",
"SERVER_WAIT",
"SERVER_MAP_BEGIN",
"SERVER_MAP_SIZE",
"SERVER_MAP_DATA",
"SERVER_MAP_DONE",
"CLIENT_MAP_OK",
"SERVER_JOIN",
"SERVER_FRAME",
"CLIENT_ACK",
"SERVER_SYNC",
"CLIENT_COMMAND",
"SERVER_COMMAND",
"CLIENT_CHAT",
"SERVER_CHAT",
"CLIENT_RCON",
"SERVER_RCON",
"CLIENT_MOVE",
"SERVER_MOVE",
"CLIENT_SET_PASSWORD",
"CLIENT_SET_NAME",
"SERVER_COMPANY_UPDATE",
"SERVER_CONFIG_UPDATE",
"SERVER_NEWGAME",
"SERVER_SHUTDOWN",
"CLIENT_QUIT",
"SERVER_QUIT",
"CLIENT_ERROR",
"SERVER_ERROR_QUIT",
"CLIENT_DESYNC_LOG",
"SERVER_DESYNC_LOG",
"CLIENT_DESYNC_MSG",
};
static_assert(lengthof(_packet_game_type_names) == PACKET_END);
const char *GetPacketGameTypeName(PacketGameType type)
{
if (type >= PACKET_END) return "[invalid packet type]";
return _packet_game_type_names[type];
}
/**
* Create a new socket for the game connection.
* @param s The socket to connect with.
@ -69,7 +128,7 @@ NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet *p)
this->last_packet = std::chrono::steady_clock::now();
this->last_pkt_type = type;
DEBUG(net, 3, "[tcp/game] received packet type %d from client %d, %s", type, this->client_id, this->GetDebugInfo().c_str());
DEBUG(net, 3, "[tcp/game] received packet type %d (%s) from client %d, %s", type, GetPacketGameTypeName(type), this->client_id, this->GetDebugInfo().c_str());
switch (this->HasClientQuit() ? PACKET_END : type) {
case PACKET_SERVER_FULL: return this->Receive_SERVER_FULL(p);
@ -212,3 +271,9 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(Packet
NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_CONFIG_UPDATE); }
std::string NetworkGameSocketHandler::GetDebugInfo() const { return ""; }
void NetworkGameSocketHandler::LogSentPacket(const Packet &pkt)
{
PacketGameType type = (PacketGameType)pkt.GetPacketType();
DEBUG(net, 3, "[tcp/game] sent packet type %d (%s) to client %d, %s", type, GetPacketGameTypeName(type), this->client_id, this->GetDebugInfo().c_str());
}

@ -129,6 +129,8 @@ enum PacketGameType {
PACKET_END, ///< Must ALWAYS be on the end of this list!! (period)
};
const char *GetPacketTypeName(PacketGameType type);
/** Packet that wraps a command */
struct CommandPacket;
@ -584,6 +586,7 @@ public:
void SendCommand(Packet *p, const CommandPacket *cp);
virtual std::string GetDebugInfo() const;
virtual void LogSentPacket(const Packet &pkt);
};
#endif /* NETWORK_CORE_TCP_GAME_H */

@ -1362,9 +1362,28 @@ void ClientNetworkGameSocketHandler::CheckConnection()
ShowErrorMessage(STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION, STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION, WL_INFO);
}
const char *ClientNetworkGameSocketHandler::GetServerStatusName(ServerStatus status)
{
static const char* _server_status_names[] {
"INACTIVE",
"COMPANY_INFO",
"JOIN",
"NEWGRFS_CHECK",
"AUTH_GAME",
"AUTH_COMPANY",
"AUTHORIZED",
"MAP_WAIT",
"MAP",
"ACTIVE",
"CLOSING",
};
static_assert(lengthof(_server_status_names) == STATUS_END);
return status < STATUS_END ? _server_status_names[status] : "[invalid status]";
}
std::string ClientNetworkGameSocketHandler::GetDebugInfo() const
{
return stdstr_fmt("status: %d", this->status);
return stdstr_fmt("status: %d (%s)", this->status, GetServerStatusName(this->status));
}

@ -40,6 +40,8 @@ private:
std::string server_desync_log;
bool emergency_save_done = false;
static const char *GetServerStatusName(ServerStatus status);
protected:
friend void NetworkExecuteLocalCommandQueue();
friend void NetworkClose(bool close_admins);

@ -1584,9 +1584,28 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet *p)
return NETWORK_RECV_STATUS_OKAY;
}
const char *ServerNetworkGameSocketHandler::GetClientStatusName(ClientStatus status)
{
static const char* _client_status_names[] {
"INACTIVE",
"NEWGRFS_CHECK",
"AUTH_GAME",
"AUTH_COMPANY",
"AUTHORIZED",
"MAP_WAIT",
"MAP",
"DONE_MAP",
"PRE_ACTIVE",
"ACTIVE",
"CLOSE_PENDING",
};
static_assert(lengthof(_client_status_names) == STATUS_END);
return status < STATUS_END ? _client_status_names[status] : "[invalid status]";
}
std::string ServerNetworkGameSocketHandler::GetDebugInfo() const
{
return stdstr_fmt("status: %d", this->status);
return stdstr_fmt("status: %d (%s)", this->status, GetClientStatusName(this->status));
}
/**

@ -66,6 +66,8 @@ public:
STATUS_END, ///< Must ALWAYS be on the end of this list!! (period).
};
static const char *GetClientStatusName(ClientStatus status);
byte lag_test; ///< Byte used for lag-testing the client
byte last_token; ///< The last random token we did send to verify the client is listening
uint32 last_token_frame; ///< The last frame we received the right token

Loading…
Cancel
Save