From 84aacf416569bf974423b7ca6b0f77e860cec344 Mon Sep 17 00:00:00 2001 From: RD42 <42702181+dashr9230@users.noreply.github.com> Date: Sat, 13 Apr 2024 22:15:50 +0800 Subject: [PATCH] [raknet] Implement `RakPeer::DeallocatePacket(...)` --- raknet/NetworkTypes.h | 8 ++++++++ raknet/RakPeer.cpp | 16 ++++++++++++++-- raknet/RakPeer.h | 5 ++++- raknet/RakPeerInterface.h | 5 ++++- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/raknet/NetworkTypes.h b/raknet/NetworkTypes.h index 44952f6..f87e4e7 100644 --- a/raknet/NetworkTypes.h +++ b/raknet/NetworkTypes.h @@ -33,12 +33,20 @@ struct RAK_DLL_EXPORT PlayerID /// This represents a user message from another system. struct Packet { + char _gap0[8]; + /// The length of the data in bytes /// \deprecated You should use bitSize. unsigned int length; + char _gapC[4]; + /// The data from the sender unsigned char* data; + + /// @internal + /// Indicates whether to delete the data, or to simply delete the packet. + bool deleteData; }; struct RPCParameters diff --git a/raknet/RakPeer.cpp b/raknet/RakPeer.cpp index d488938..c934fef 100644 --- a/raknet/RakPeer.cpp +++ b/raknet/RakPeer.cpp @@ -3,6 +3,7 @@ #include "RakPeer.h" #include +#include RakPeer::RakPeer() { @@ -158,9 +159,20 @@ void RakPeer::vftable_38() // TODO: RakPeer::vftable_38() (saco W: 10040FD0) (server W: 458510 L: 806EA30) (bot W: 40BCE0 L: 8073806) } -void RakPeer::vftable_3C() +// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// Description: +// Call this to deallocate a packet returned by Receive, in the same order returned to you from Receive +// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +void RakPeer::DeallocatePacket( Packet *packet ) { - // TODO: RakPeer::vftable_3C() (saco W: 100385B0) (server W: 4500B0 L: 8071D60) (bot W: 404050 L: 80739A2) + if ( packet == 0 ) + return; + + if (packet->deleteData) + if (packet->data) + delete packet->data; + + free(packet); } // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/raknet/RakPeer.h b/raknet/RakPeer.h index 7686d4f..d93c265 100644 --- a/raknet/RakPeer.h +++ b/raknet/RakPeer.h @@ -67,7 +67,10 @@ public: void vftable_30(); void vftable_34(); void vftable_38(); - void vftable_3C(); + + /// Call this to deallocate a message returned by Receive() when you are done handling it. + /// \param[in] packet The message to deallocate. + void DeallocatePacket( Packet *packet ); /// Return the total number of connections we are allowed unsigned short GetMaximumNumberOfPeers( void ) const; diff --git a/raknet/RakPeerInterface.h b/raknet/RakPeerInterface.h index fe6b6b9..82242e1 100644 --- a/raknet/RakPeerInterface.h +++ b/raknet/RakPeerInterface.h @@ -63,7 +63,10 @@ public: virtual void vftable_30()=0; virtual void vftable_34()=0; virtual void vftable_38()=0; - virtual void vftable_3C()=0; + + /// Call this to deallocate a message returned by Receive() when you are done handling it. + /// \param[in] packet The message to deallocate. + virtual void DeallocatePacket( Packet *packet )=0; /// Return the total number of connections we are allowed // TODO - rename for RakNet 3.0