mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 18:18:02 +02:00
Write session uuid and connection hash in packet header
This commit is contained in:
parent
a7fa0a733b
commit
0b32a5d935
4 changed files with 46 additions and 23 deletions
|
@ -214,7 +214,19 @@ bool LimitedNodeList::packetSourceAndHashMatch(const NLPacket& packet, SharedNod
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::writeDatagram(const NLPacket& packet, const HifiSockAddr& destinationSockAddr) {
|
// NLPacket helper for filling the header
|
||||||
|
void writePacketheader(const NLPacket& packet, const QUuid& sessionUUID = QUuid(), const QUuid& connectionSecret = QUuid()) {
|
||||||
|
if (!NON_SOURCED_PACKETS.contains(packet.getType())) {
|
||||||
|
const_cast<NLPacket&>(packet).writeSourceID(sessionUUID);
|
||||||
|
}
|
||||||
|
if (!connectionSecret.isNull() && !NON_VERIFIED_PACKETS.contains(packet.getType())) {
|
||||||
|
const_cast<NLPacket&>(packet).writeVerificationHash(packet.payloadHashWithConnectionUUID(connectionSecret));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qint64 LimitedNodeList::writeDatagram(const NLPacket& packet, const HifiSockAddr& destinationSockAddr,
|
||||||
|
const QUuid& connectionSecret) {
|
||||||
|
writePacketheader(packet, getSessionUUID(), connectionSecret);
|
||||||
return writeDatagram({packet.getData(), static_cast<int>(packet.getSizeWithHeader())}, destinationSockAddr);
|
return writeDatagram({packet.getData(), static_cast<int>(packet.getSizeWithHeader())}, destinationSockAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,31 +247,35 @@ qint64 LimitedNodeList::writeDatagram(const QByteArray& datagram, const HifiSock
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::sendUnreliablePacket(const NLPacket& packet, const Node& destinationNode) {
|
qint64 LimitedNodeList::sendUnreliablePacket(const NLPacket& packet, const Node& destinationNode) {
|
||||||
if (!destinationNode.getActiveSocket()) {
|
const HifiSockAddr* activeSocket = destinationNode.getActiveSocket();
|
||||||
|
if (!activeSocket) {
|
||||||
// we don't have a socket to send to, return 0
|
// we don't have a socket to send to, return 0
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use the node's active socket as the destination socket
|
// use the node's active socket as the destination socket
|
||||||
return sendUnreliablePacket(packet, *destinationNode.getActiveSocket());
|
return sendUnreliablePacket(packet, *activeSocket, destinationNode.getConnectionSecret());
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::sendUnreliablePacket(const NLPacket& packet, const HifiSockAddr& sockAddr) {
|
qint64 LimitedNodeList::sendUnreliablePacket(const NLPacket& packet, const HifiSockAddr& sockAddr,
|
||||||
return writeDatagram(packet, sockAddr);
|
const QUuid& connectionSecret) {
|
||||||
|
return writeDatagram(packet, sockAddr, connectionSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::sendPacket(std::unique_ptr<NLPacket> packet, const Node& destinationNode) {
|
qint64 LimitedNodeList::sendPacket(std::unique_ptr<NLPacket> packet, const Node& destinationNode) {
|
||||||
if (!destinationNode.getActiveSocket()) {
|
const HifiSockAddr* activeSocket = destinationNode.getActiveSocket();
|
||||||
|
if (!activeSocket) {
|
||||||
// we don't have a socket to send to, return 0
|
// we don't have a socket to send to, return 0
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// use the node's active socket as the destination socket
|
// use the node's active socket as the destination socket
|
||||||
return sendPacket(std::move(packet), *destinationNode.getActiveSocket());
|
return sendPacket(std::move(packet), *activeSocket, destinationNode.getConnectionSecret());
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::sendPacket(std::unique_ptr<NLPacket> packet, const HifiSockAddr& sockAddr) {
|
qint64 LimitedNodeList::sendPacket(std::unique_ptr<NLPacket> packet, const HifiSockAddr& sockAddr,
|
||||||
return writeDatagram(*packet, sockAddr);
|
const QUuid& connectionSecret) {
|
||||||
|
return writeDatagram(*packet, sockAddr, connectionSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::sendPacketList(NLPacketList& packetList, const Node& destinationNode) {
|
qint64 LimitedNodeList::sendPacketList(NLPacketList& packetList, const Node& destinationNode) {
|
||||||
|
@ -268,17 +284,20 @@ qint64 LimitedNodeList::sendPacketList(NLPacketList& packetList, const Node& des
|
||||||
// we don't have a socket to send to, return 0
|
// we don't have a socket to send to, return 0
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return sendPacketList(packetList, *activeSocket);
|
|
||||||
|
// use the node's active socket as the destination socket
|
||||||
|
return sendPacketList(packetList, *activeSocket, destinationNode.getConnectionSecret());
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 LimitedNodeList::sendPacketList(NLPacketList& packetList, const HifiSockAddr& sockAddr) {
|
qint64 LimitedNodeList::sendPacketList(NLPacketList& packetList, const HifiSockAddr& sockAddr,
|
||||||
qint64 bytesSent { 0 };
|
const QUuid& connectionSecret) {
|
||||||
|
qint64 bytesSent{ 0 };
|
||||||
|
|
||||||
// close the last packet in the list
|
// close the last packet in the list
|
||||||
packetList.closeCurrentPacket();
|
packetList.closeCurrentPacket();
|
||||||
|
|
||||||
while (!packetList._packets.empty()) {
|
while (!packetList._packets.empty()) {
|
||||||
bytesSent += sendPacket(std::move(packetList.takeFront<NLPacket>()), sockAddr);
|
bytesSent += sendPacket(std::move(packetList.takeFront<NLPacket>()), sockAddr, connectionSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytesSent;
|
return bytesSent;
|
||||||
|
@ -289,7 +308,7 @@ qint64 LimitedNodeList::sendPacket(std::unique_ptr<NLPacket> packet, const Node&
|
||||||
// use the node's active socket as the destination socket if there is no overriden socket address
|
// use the node's active socket as the destination socket if there is no overriden socket address
|
||||||
auto& destinationSockAddr = (overridenSockAddr.isNull()) ? *destinationNode.getActiveSocket()
|
auto& destinationSockAddr = (overridenSockAddr.isNull()) ? *destinationNode.getActiveSocket()
|
||||||
: overridenSockAddr;
|
: overridenSockAddr;
|
||||||
return sendPacket(std::move(packet), destinationSockAddr);
|
return sendPacket(std::move(packet), destinationSockAddr, destinationNode.getConnectionSecret());
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketSequenceNumber LimitedNodeList::getNextSequenceNumberForPacket(const QUuid& nodeUUID, PacketType::Value packetType) {
|
PacketSequenceNumber LimitedNodeList::getNextSequenceNumberForPacket(const QUuid& nodeUUID, PacketType::Value packetType) {
|
||||||
|
|
|
@ -120,13 +120,16 @@ public:
|
||||||
PacketReceiver& getPacketReceiver() { return _packetReceiver; }
|
PacketReceiver& getPacketReceiver() { return _packetReceiver; }
|
||||||
|
|
||||||
qint64 sendUnreliablePacket(const NLPacket& packet, const Node& destinationNode);
|
qint64 sendUnreliablePacket(const NLPacket& packet, const Node& destinationNode);
|
||||||
qint64 sendUnreliablePacket(const NLPacket& packet, const HifiSockAddr& sockAddr);
|
qint64 sendUnreliablePacket(const NLPacket& packet, const HifiSockAddr& sockAddr,
|
||||||
|
const QUuid& connectionSecret = QUuid());
|
||||||
|
|
||||||
qint64 sendPacket(std::unique_ptr<NLPacket> packet, const Node& destinationNode);
|
qint64 sendPacket(std::unique_ptr<NLPacket> packet, const Node& destinationNode);
|
||||||
qint64 sendPacket(std::unique_ptr<NLPacket> packet, const HifiSockAddr& sockAddr);
|
qint64 sendPacket(std::unique_ptr<NLPacket> packet, const HifiSockAddr& sockAddr,
|
||||||
|
const QUuid& connectionSecret = QUuid());
|
||||||
|
|
||||||
qint64 sendPacketList(NLPacketList& packetList, const Node& destinationNode);
|
qint64 sendPacketList(NLPacketList& packetList, const Node& destinationNode);
|
||||||
qint64 sendPacketList(NLPacketList& packetList, const HifiSockAddr& sockAddr);
|
qint64 sendPacketList(NLPacketList& packetList, const HifiSockAddr& sockAddr,
|
||||||
|
const QUuid& connectionSecret = QUuid());
|
||||||
|
|
||||||
void (*linkedDataCreateCallback)(Node *);
|
void (*linkedDataCreateCallback)(Node *);
|
||||||
|
|
||||||
|
@ -245,7 +248,8 @@ protected:
|
||||||
LimitedNodeList(LimitedNodeList const&); // Don't implement, needed to avoid copies of singleton
|
LimitedNodeList(LimitedNodeList const&); // Don't implement, needed to avoid copies of singleton
|
||||||
void operator=(LimitedNodeList const&); // Don't implement, needed to avoid copies of singleton
|
void operator=(LimitedNodeList const&); // Don't implement, needed to avoid copies of singleton
|
||||||
|
|
||||||
qint64 writeDatagram(const NLPacket& packet, const HifiSockAddr& destinationSockAddr);
|
qint64 writeDatagram(const NLPacket& packet, const HifiSockAddr& destinationSockAddr,
|
||||||
|
const QUuid& connectionSecret = QUuid());
|
||||||
qint64 writeDatagram(const QByteArray& datagram, const HifiSockAddr& destinationSockAddr);
|
qint64 writeDatagram(const QByteArray& datagram, const HifiSockAddr& destinationSockAddr);
|
||||||
|
|
||||||
PacketSequenceNumber getNextSequenceNumberForPacket(const QUuid& nodeUUID, PacketType::Value packetType);
|
PacketSequenceNumber getNextSequenceNumberForPacket(const QUuid& nodeUUID, PacketType::Value packetType);
|
||||||
|
|
|
@ -115,7 +115,7 @@ void NLPacket::readVerificationHash() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NLPacket::setSourceID(const QUuid& sourceID) {
|
void NLPacket::writeSourceID(const QUuid& sourceID) {
|
||||||
Q_ASSERT(!NON_SOURCED_PACKETS.contains(_type));
|
Q_ASSERT(!NON_SOURCED_PACKETS.contains(_type));
|
||||||
|
|
||||||
auto offset = Packet::totalHeadersSize();
|
auto offset = Packet::totalHeadersSize();
|
||||||
|
@ -124,7 +124,7 @@ void NLPacket::setSourceID(const QUuid& sourceID) {
|
||||||
_sourceID = sourceID;
|
_sourceID = sourceID;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NLPacket::setVerificationHash(const QByteArray& verificationHash) {
|
void NLPacket::writeVerificationHash(const QByteArray& verificationHash) {
|
||||||
Q_ASSERT(!NON_SOURCED_PACKETS.contains(_type) && !NON_VERIFIED_PACKETS.contains(_type));
|
Q_ASSERT(!NON_SOURCED_PACKETS.contains(_type) && !NON_VERIFIED_PACKETS.contains(_type));
|
||||||
|
|
||||||
auto offset = Packet::totalHeadersSize() + NUM_BYTES_RFC4122_UUID;
|
auto offset = Packet::totalHeadersSize() + NUM_BYTES_RFC4122_UUID;
|
||||||
|
|
|
@ -33,6 +33,9 @@ public:
|
||||||
|
|
||||||
const QUuid& getSourceID() const { return _sourceID; }
|
const QUuid& getSourceID() const { return _sourceID; }
|
||||||
const QByteArray& getVerificationHash() const { return _verificationHash; }
|
const QByteArray& getVerificationHash() const { return _verificationHash; }
|
||||||
|
|
||||||
|
void writeSourceID(const QUuid& sourceID);
|
||||||
|
void writeVerificationHash(const QByteArray& verificationHash);
|
||||||
|
|
||||||
QByteArray payloadHashWithConnectionUUID(const QUuid& connectionUUID) const;
|
QByteArray payloadHashWithConnectionUUID(const QUuid& connectionUUID) const;
|
||||||
|
|
||||||
|
@ -43,10 +46,7 @@ protected:
|
||||||
NLPacket(const NLPacket& other);
|
NLPacket(const NLPacket& other);
|
||||||
|
|
||||||
void readSourceID();
|
void readSourceID();
|
||||||
void setSourceID(const QUuid& sourceID);
|
|
||||||
|
|
||||||
void readVerificationHash();
|
void readVerificationHash();
|
||||||
void setVerificationHash(const QByteArray& verificationHash);
|
|
||||||
|
|
||||||
QUuid _sourceID;
|
QUuid _sourceID;
|
||||||
QByteArray _verificationHash;
|
QByteArray _verificationHash;
|
||||||
|
|
Loading…
Reference in a new issue