diff options
Diffstat (limited to 'src/network/connection.h')
-rw-r--r-- | src/network/connection.h | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/network/connection.h b/src/network/connection.h index 346c7f886..057bd39f6 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -103,16 +103,16 @@ struct BufferedPacket }; // This adds the base headers to the data and makes a packet out of it -BufferedPacket makePacket(Address &address, SharedBuffer<u8> data, +BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data, u32 protocol_id, session_t sender_peer_id, u8 channel); // Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet // Increments split_seqnum if a split packet is made -void makeAutoSplitPacket(SharedBuffer<u8> data, u32 chunksize_max, +void makeAutoSplitPacket(const SharedBuffer<u8> &data, u32 chunksize_max, u16 &split_seqnum, std::list<SharedBuffer<u8>> *list); // Add the TYPE_RELIABLE header to the data -SharedBuffer<u8> makeReliablePacket(SharedBuffer<u8> data, u16 seqnum); +SharedBuffer<u8> makeReliablePacket(const SharedBuffer<u8> &data, u16 seqnum); struct IncomingSplitPacket { @@ -121,16 +121,20 @@ struct IncomingSplitPacket IncomingSplitPacket() = delete; - // Key is chunk number, value is data without headers - std::map<u16, SharedBuffer<u8>> chunks; - u32 chunk_count; float time = 0.0f; // Seconds from adding - bool reliable = false; // If true, isn't deleted on timeout + u32 chunk_count; + bool reliable; // If true, isn't deleted on timeout bool allReceived() const { return (chunks.size() == chunk_count); } + bool insert(u32 chunk_num, SharedBuffer<u8> &chunkdata); + SharedBuffer<u8> reassemble(); + +private: + // Key is chunk number, value is data without headers + std::map<u16, SharedBuffer<u8>> chunks; }; /* @@ -240,7 +244,7 @@ public: BufferedPacket popFirst(); BufferedPacket popSeqnum(u16 seqnum); - void insert(BufferedPacket &p,u16 next_expected); + void insert(BufferedPacket &p, u16 next_expected); void incrementTimeouts(float dtime); std::list<BufferedPacket> getTimedOuts(float timeout, @@ -248,16 +252,14 @@ public: void print(); bool empty(); - bool containsPacket(u16 seqnum); RPBSearchResult notFound(); u32 size(); private: - RPBSearchResult findPacket(u16 seqnum); + RPBSearchResult findPacket(u16 seqnum); // does not perform locking std::list<BufferedPacket> m_list; - u32 m_list_size = 0; u16 m_oldest_non_answered_ack; |