initial version of the control packet class

This commit is contained in:
Stephen Birarda 2015-07-24 11:38:51 -07:00
parent dd8d75b38f
commit 6dba431084
3 changed files with 110 additions and 1 deletions

View file

@ -0,0 +1,54 @@
//
// ControlPacket.cpp
// libraries/networking/src/udt
//
// Created by Stephen Birarda on 2015-07-24.
// Copyright 2015 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "ControlPacket.h"
using namespace udt;
std::unique_ptr<ControlPacket> ControlPacket::create(Type type, const SequenceNumberList& sequenceNumbers) {
return ControlPacket::create(type, sequenceNumbers);
}
qint64 ControlPacket::localHeaderSize() {
return sizeof(TypeAndSubSequenceNumber);
}
qint64 ControlPacket::totalHeadersSize() const {
return BasePacket::localHeaderSize() + localHeaderSize();
}
ControlPacket::ControlPacket(Type type, const SequenceNumberList& sequenceNumbers) :
BasePacket(localHeaderSize() + (sizeof(Packet::SequenceNumber) * sequenceNumbers.size()))
{
qint64 headerSize = localHeaderSize();
_payloadCapacity -= headerSize;
_payloadStart += headerSize;
open(QIODevice::ReadWrite);
// pack in the sequence numbers
for(auto& sequenceNumber : sequenceNumbers) {
writePrimitive(sequenceNumber);
}
}
ControlPacket::ControlPacket(ControlPacket&& other) :
BasePacket(std::move(other))
{
}
ControlPacket& ControlPacket::operator=(Packet&& other) {
BasePacket::operator=(std::move(other));
return *this;
}

View file

@ -0,0 +1,55 @@
//
// ControlPacket.h
// libraries/networking/src/udt
//
// Created by Stephen Birarda on 2015-07-24.
// Copyright 2015 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#pragma once
#ifndef hifi_ControlPacket_h
#define hifi_ControlPacket_h
#include <vector>
#include "BasePacket.h"
#include "Packet.h"
namespace udt {
using SequenceNumberList = std::vector<Packet::SequenceNumber>;
class ControlPacket : public BasePacket {
Q_OBJECT
public:
using TypeAndSubSequenceNumber = uint32_t;
enum class Type : uint16_t {
ACK,
ACK2,
NAK,
PacketPair
};
std::unique_ptr<ControlPacket> create(Type type, const SequenceNumberList& sequenceNumbers);
static qint64 localHeaderSize(); // Current level's header size
virtual qint64 totalHeadersSize() const; // Cumulated size of all the headers
private:
ControlPacket(Type type, const SequenceNumberList& sequenceNumbers);
ControlPacket(ControlPacket&& other);
ControlPacket(const Packet& other) = delete;
ControlPacket& operator=(Packet&& other);
ControlPacket& operator=(const Packet& other) = delete;
};
} // namespace udt
#endif // hifi_ControlPacket_h

View file

@ -50,7 +50,7 @@ qint64 Packet::maxPayloadSize() const {
}
qint64 Packet::totalHeadersSize() const {
return localHeaderSize();
return BasePacket::localHeaderSize() + localHeaderSize();
}
qint64 Packet::localHeaderSize() const {