mirror of
https://github.com/overte-org/overte.git
synced 2025-08-04 09:43:47 +02:00
add process methods for control packet types
This commit is contained in:
parent
c14fee2ee8
commit
17d8085ab5
2 changed files with 38 additions and 20 deletions
|
@ -91,7 +91,6 @@ void Connection::sendLightACK() const {
|
|||
// create the light ACK packet, make it static so we can re-use it
|
||||
static const int LIGHT_ACK_PACKET_PAYLOAD_BYTES = sizeof(SeqNum);
|
||||
static auto lightACKPacket = ControlPacket::create(ControlPacket::ACK, LIGHT_ACK_PACKET_PAYLOAD_BYTES);
|
||||
lightACKPacket->reset(); // We need to reset it every time.
|
||||
|
||||
SeqNum nextACKNumber = nextACK();
|
||||
|
||||
|
@ -100,6 +99,9 @@ void Connection::sendLightACK() const {
|
|||
return;
|
||||
}
|
||||
|
||||
// reset the lightACKPacket before we go to write the ACK to it
|
||||
lightACKPacket->reset();
|
||||
|
||||
// pack in the ACK
|
||||
lightACKPacket->writePrimitive(nextACKNumber);
|
||||
|
||||
|
@ -151,31 +153,15 @@ void Connection::processReceivedSeqNum(SeqNum seq) {
|
|||
void Connection::processControl(unique_ptr<ControlPacket> controlPacket) {
|
||||
switch (controlPacket->getType()) {
|
||||
case ControlPacket::ACK: {
|
||||
// read the ACK sub-sequence number
|
||||
SeqNum currentACKSubSequenceNumber;
|
||||
controlPacket->readPrimitive(¤tACKSubSequenceNumber);
|
||||
|
||||
// read the ACK number
|
||||
SeqNum nextACKNumber;
|
||||
controlPacket->readPrimitive(&nextACKNumber);
|
||||
|
||||
// read the RTT and variance
|
||||
int32_t rtt, rttVariance;
|
||||
controlPacket->readPrimitive(&rtt);
|
||||
controlPacket->readPrimitive(&rttVariance);
|
||||
|
||||
processACK(move(controlPacket));
|
||||
break;
|
||||
}
|
||||
case ControlPacket::ACK2: {
|
||||
processACK2(move(controlPacket));
|
||||
break;
|
||||
}
|
||||
case ControlPacket::NAK: {
|
||||
// read the loss report
|
||||
SeqNum start, end;
|
||||
controlPacket->readPrimitive(&start);
|
||||
if (controlPacket->bytesLeftToRead() >= (qint64)sizeof(SeqNum)) {
|
||||
controlPacket->readPrimitive(&end);
|
||||
}
|
||||
processNAK(move(controlPacket));
|
||||
break;
|
||||
}
|
||||
case ControlPacket::PacketPair: {
|
||||
|
@ -184,3 +170,31 @@ void Connection::processControl(unique_ptr<ControlPacket> controlPacket) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Connection::processACK(std::unique_ptr<ControlPacket> controlPacket) {
|
||||
// read the ACK sub-sequence number
|
||||
SeqNum currentACKSubSequenceNumber;
|
||||
controlPacket->readPrimitive(¤tACKSubSequenceNumber);
|
||||
|
||||
// read the ACK number
|
||||
SeqNum nextACKNumber;
|
||||
controlPacket->readPrimitive(&nextACKNumber);
|
||||
|
||||
// read the RTT and variance
|
||||
int32_t rtt, rttVariance;
|
||||
controlPacket->readPrimitive(&rtt);
|
||||
controlPacket->readPrimitive(&rttVariance);
|
||||
}
|
||||
|
||||
void Connection::processACK2(std::unique_ptr<ControlPacket> controlPacket) {
|
||||
|
||||
}
|
||||
|
||||
void Connection::processNAK(std::unique_ptr<ControlPacket> controlPacket) {
|
||||
// read the loss report
|
||||
SeqNum start, end;
|
||||
controlPacket->readPrimitive(&start);
|
||||
if (controlPacket->bytesLeftToRead() >= (qint64)sizeof(SeqNum)) {
|
||||
controlPacket->readPrimitive(&end);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,10 @@ public:
|
|||
void processControl(std::unique_ptr<ControlPacket> controlPacket);
|
||||
|
||||
private:
|
||||
void processACK(std::unique_ptr<ControlPacket> controlPacket);
|
||||
void processACK2(std::unique_ptr<ControlPacket> controlPacket);
|
||||
void processNAK(std::unique_ptr<ControlPacket> controlPacket);
|
||||
|
||||
LossList _lossList; // List of all missing packets
|
||||
SeqNum _largestReceivedSeqNum; // The largest sequence number received from the peer
|
||||
SeqNum _lastSentACK; // The last sent ACK
|
||||
|
|
Loading…
Reference in a new issue