Changeset - r25249:deeb506a6e53
[Not reviewed]
master
0 4 0
Rubidium - 3 years ago 2021-04-20 16:50:46
rubidium@openttd.org
Codechange: remove public access to the next pointer in Packet
4 files changed with 38 insertions and 35 deletions:
0 comments (0 inline, 0 general)
src/network/core/packet.cpp
Show inline comments
 
@@ -63,6 +63,32 @@ Packet::~Packet()
 
}
 

	
 
/**
 
 * Add the given Packet to the end of the queue of packets.
 
 * @param queue  The pointer to the begin of the queue.
 
 * @param packet The packet to append to the queue.
 
 */
 
/* static */ void Packet::AddToQueue(Packet **queue, Packet *packet)
 
{
 
	while (*queue != nullptr) queue = &(*queue)->next;
 
	*queue = packet;
 
}
 

	
 
/**
 
 * Pop the packet from the begin of the queue and set the
 
 * begin of the queue to the second element in the queue.
 
 * @param queue  The pointer to the begin of the queue.
 
 * @return The Packet that used to be a the begin of the queue.
 
 */
 
/* static */ Packet *Packet::PopFromQueue(Packet **queue)
 
{
 
	Packet *p = *queue;
 
	*queue = p->next;
 
	p->next = nullptr;
 
	return p;
 
}
 

	
 

	
 
/**
 
 * Writes the packet size from the raw packet from packet->size
 
 */
 
void Packet::PrepareToSend()
src/network/core/packet.h
Show inline comments
 
@@ -62,6 +62,9 @@ public:
 
	Packet(PacketType type);
 
	~Packet();
 

	
 
	static void AddToQueue(Packet **queue, Packet *packet);
 
	static Packet *PopFromQueue(Packet **queue);
 

	
 
	/* Sending/writing of packets */
 
	void PrepareToSend();
 

	
src/network/core/tcp.cpp
Show inline comments
 
@@ -42,9 +42,7 @@ NetworkRecvStatus NetworkTCPSocketHandle
 

	
 
	/* Free all pending and partially received packets */
 
	while (this->packet_queue != nullptr) {
 
		Packet *p = this->packet_queue->next;
 
		delete this->packet_queue;
 
		this->packet_queue = p;
 
		delete Packet::PopFromQueue(&this->packet_queue);
 
	}
 
	delete this->packet_recv;
 
	this->packet_recv = nullptr;
 
@@ -60,21 +58,10 @@ NetworkRecvStatus NetworkTCPSocketHandle
 
 */
 
void NetworkTCPSocketHandler::SendPacket(Packet *packet)
 
{
 
	Packet *p;
 
	assert(packet != nullptr);
 

	
 
	packet->PrepareToSend();
 

	
 
	/* Locate last packet buffered for the client */
 
	p = this->packet_queue;
 
	if (p == nullptr) {
 
		/* No packets yet */
 
		this->packet_queue = packet;
 
	} else {
 
		/* Skip to the last packet */
 
		while (p->next != nullptr) p = p->next;
 
		p->next = packet;
 
	}
 
	Packet::AddToQueue(&this->packet_queue, packet);
 
}
 

	
 
/**
 
@@ -96,8 +83,7 @@ SendPacketsState NetworkTCPSocketHandler
 
	if (!this->writable) return SPS_NONE_SENT;
 
	if (!this->IsConnected()) return SPS_CLOSED;
 

	
 
	p = this->packet_queue;
 
	while (p != nullptr) {
 
	while ((p = this->packet_queue) != nullptr) {
 
		res = p->TransferOut<int>(send, this->sock, 0);
 
		if (res == -1) {
 
			int err = GET_LAST_ERROR();
 
@@ -120,9 +106,7 @@ SendPacketsState NetworkTCPSocketHandler
 
		/* Is this packet sent? */
 
		if (p->RemainingBytesToTransfer() == 0) {
 
			/* Go to the next packet */
 
			this->packet_queue = p->next;
 
			delete p;
 
			p = this->packet_queue;
 
			delete Packet::PopFromQueue(&this->packet_queue);
 
		} else {
 
			return SPS_PARTLY_SENT;
 
		}
src/network/network_server.cpp
Show inline comments
 
@@ -79,9 +79,7 @@ struct PacketWriter : SaveFilter {
 
		/* This must all wait until the Destroy function is called. */
 

	
 
		while (this->packets != nullptr) {
 
			Packet *p = this->packets->next;
 
			delete this->packets;
 
			this->packets = p;
 
			delete Packet::PopFromQueue(&this->packets);
 
		}
 

	
 
		delete this->current;
 
@@ -132,11 +130,7 @@ struct PacketWriter : SaveFilter {
 
	{
 
		std::lock_guard<std::mutex> lock(this->mutex);
 

	
 
		Packet *p = this->packets;
 
		this->packets = p->next;
 
		p->next = nullptr;
 

	
 
		return p;
 
		return Packet::PopFromQueue(&this->packets);
 
	}
 

	
 
	/** Append the current packet to the queue. */
 
@@ -144,12 +138,7 @@ struct PacketWriter : SaveFilter {
 
	{
 
		if (this->current == nullptr) return;
 

	
 
		Packet **p = &this->packets;
 
		while (*p != nullptr) {
 
			p = &(*p)->next;
 
		}
 
		*p = this->current;
 

	
 
		Packet::AddToQueue(&this->packets, this->current);
 
		this->current = nullptr;
 
	}
 

	
 
@@ -158,7 +147,8 @@ struct PacketWriter : SaveFilter {
 
	{
 
		if (this->current == nullptr) return;
 

	
 
		this->current->next = this->packets;
 
		/* Reversed from AppendQueue so the queue gets added to the current one. */
 
		Packet::AddToQueue(&this->current, this->packets);
 
		this->packets = this->current;
 
		this->current = nullptr;
 
	}
0 comments (0 inline, 0 general)