R-Type 0.1
Loading...
Searching...
No Matches
PacketTracker.hpp
1#pragma once
2
8#include <cstdint>
9
13enum class PacketReceiveRes {
14 New,
15 Dup,
16 Out,
17 TooOld
18};
19
24public:
29
34 std::uint32_t getNextSequence();
35
41 PacketReceiveRes onPacketReceived(std::uint32_t sequence);
42
47 std::uint32_t getAck() const;
48
53 std::uint32_t getAckBits() const;
54
62 static bool isPacketinAck(std::uint32_t sequence, std::uint32_t ack,
63 std::uint32_t ackBits);
64
65private:
66 std::uint32_t _nextSequence;
67 bool _hasReceivedPacket;
68 std::uint32_t _lastReceived;
69 std::uint32_t _receivedBits;
70};
71
Generates outgoing sequence numbers and tracks received ones.
Definition PacketTracker.hpp:23
PacketReceiveRes onPacketReceived(std::uint32_t sequence)
Records a received sequence number.
Definition PacketTracker.cpp:10
static bool isPacketinAck(std::uint32_t sequence, std::uint32_t ack, std::uint32_t ackBits)
Tells whether an ack and its bitfield cover a sequence number.
Definition PacketTracker.cpp:46
std::uint32_t getAck() const
Returns the latest received sequence number.
Definition PacketTracker.cpp:61
std::uint32_t getAckBits() const
Returns the bitfield of the 32 sequences before the latest one.
Definition PacketTracker.cpp:65
PacketTracker()
Creates a tracker whose first sequence number is 1.
Definition PacketTracker.cpp:4
std::uint32_t getNextSequence()
Returns the sequence number for the next outgoing packet.
Definition PacketTracker.cpp:8
PacketReceiveRes
Classification of a received packet sequence number.
Definition PacketTracker.hpp:13
@ New
Newer than every packet received so far.
@ Dup
Already received.
@ Out
Older than the latest one but inside the 32 packet window.
@ TooOld
Older than the 32 packet window.