From 3abefdf56190ef55d8680acb1aeab9f1b2fc8108 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Tue, 20 Apr 2021 18:50:46 +0200 Subject: Codechange: remove public access to the next pointer in Packet --- src/network/core/packet.cpp | 26 ++++++++++++++++++++++++++ src/network/core/packet.h | 3 +++ src/network/core/tcp.cpp | 24 ++++-------------------- src/network/network_server.cpp | 20 +++++--------------- 4 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index e32b7fad8..9e9ce6901 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -62,6 +62,32 @@ Packet::~Packet() free(this->buffer); } +/** + * 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 */ diff --git a/src/network/core/packet.h b/src/network/core/packet.h index b6a7ff5d3..d7ab7fee6 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -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(); diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index c779beb96..a749b6195 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -42,9 +42,7 @@ NetworkRecvStatus NetworkTCPSocketHandler::CloseConnection(bool error) /* 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 NetworkTCPSocketHandler::CloseConnection(bool error) */ 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::SendPackets(bool closing_down) 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(send, this->sock, 0); if (res == -1) { int err = GET_LAST_ERROR(); @@ -120,9 +106,7 @@ SendPacketsState NetworkTCPSocketHandler::SendPackets(bool closing_down) /* 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; } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 5301bd084..80a9c56a0 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -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 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; } -- cgit v1.2.3-70-g09d2