mirror of
https://github.com/overte-org/overte.git
synced 2025-07-22 16:53:31 +02:00
initial version of the control packet class
This commit is contained in:
parent
dd8d75b38f
commit
6dba431084
3 changed files with 110 additions and 1 deletions
54
libraries/networking/src/udt/ControlPacket.cpp
Normal file
54
libraries/networking/src/udt/ControlPacket.cpp
Normal 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;
|
||||||
|
}
|
55
libraries/networking/src/udt/ControlPacket.h
Normal file
55
libraries/networking/src/udt/ControlPacket.h
Normal 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
|
|
@ -50,7 +50,7 @@ qint64 Packet::maxPayloadSize() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 Packet::totalHeadersSize() const {
|
qint64 Packet::totalHeadersSize() const {
|
||||||
return localHeaderSize();
|
return BasePacket::localHeaderSize() + localHeaderSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 Packet::localHeaderSize() const {
|
qint64 Packet::localHeaderSize() const {
|
||||||
|
|
Loading…
Reference in a new issue