Changeset - r25248:b859cebb80a5
[Not reviewed]
master
0 5 0
Rubidium - 3 years ago 2021-04-18 10:29:34
rubidium@openttd.org
Codechange: encapsulate reading the size of a Packet
5 files changed with 17 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/network/core/packet.cpp
Show inline comments
 
@@ -231,6 +231,18 @@ bool Packet::HasPacketSizeData() const
 
}
 

	
 
/**
 
 * Get the number of bytes in the packet.
 
 * When sending a packet this is the size of the data up to that moment.
 
 * When receiving a packet (before PrepareToRead) this is the allocated size for the data to be read.
 
 * When reading a packet (after PrepareToRead) this is the full size of the packet.
 
 * @return The packet's size.
 
 */
 
size_t Packet::Size() const
 
{
 
	return this->size;
 
}
 

	
 
/**
 
 * Reads the packet size from the raw packet and stores it in the packet->size
 
 * @return True iff the packet size seems plausible.
 
 */
src/network/core/packet.h
Show inline comments
 
@@ -77,6 +77,7 @@ public:
 
	/* Reading/receiving of packets */
 
	bool HasPacketSizeData() const;
 
	bool ParsePacketSize();
 
	size_t Size() const;
 
	void PrepareToRead();
 

	
 
	bool   CanReadFromPacket(size_t bytes_to_read, bool close_connection = false);
src/network/core/udp.cpp
Show inline comments
 
@@ -137,7 +137,7 @@ void NetworkUDPSocketHandler::ReceivePac
 

	
 
			/* If the size does not match the packet must be corrupted.
 
			 * Otherwise it will be marked as corrupted later on. */
 
			if (!p.ParsePacketSize() || nbytes != p.size) {
 
			if (!p.ParsePacketSize() || (size_t)nbytes != p.Size()) {
 
				DEBUG(net, 1, "received a packet with mismatching size from %s", address.GetAddressAsString().c_str());
 
				continue;
 
			}
src/network/network_server.cpp
Show inline comments
 
@@ -247,7 +247,7 @@ Packet *ServerNetworkGameSocketHandler::
 
	/* We can receive a packet, so try that and if needed account for
 
	 * the amount of received data. */
 
	Packet *p = this->NetworkTCPSocketHandler::ReceivePacket();
 
	if (p != nullptr) this->receive_limit -= p->size;
 
	if (p != nullptr) this->receive_limit -= p->Size();
 
	return p;
 
}
 

	
 
@@ -1832,7 +1832,7 @@ void NetworkServer_Tick(bool send_frame)
 
	for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
 
		/* We allow a number of bytes per frame, but only to the burst amount
 
		 * to be available for packet receiving at any particular time. */
 
		cs->receive_limit = std::min<int>(cs->receive_limit + _settings_client.network.bytes_per_frame,
 
		cs->receive_limit = std::min<size_t>(cs->receive_limit + _settings_client.network.bytes_per_frame,
 
				_settings_client.network.bytes_per_frame_burst);
 

	
 
		/* Check if the speed of the client is what we can expect from a client */
src/network/network_server.h
Show inline comments
 
@@ -67,7 +67,7 @@ public:
 
	uint32 last_token_frame;     ///< The last frame we received the right token
 
	ClientStatus status;         ///< Status of this client
 
	CommandQueue outgoing_queue; ///< The command-queue awaiting delivery
 
	int receive_limit;           ///< Amount of bytes that we can receive at this moment
 
	size_t receive_limit;        ///< Amount of bytes that we can receive at this moment
 

	
 
	struct PacketWriter *savegame; ///< Writer used to write the savegame.
 
	NetworkAddress client_address; ///< IP-address of the client (so he can be banned)
0 comments (0 inline, 0 general)