mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 12:37:51 +02:00
remove dependency of PacketHeaders on NodeList
This commit is contained in:
parent
c76ae56d64
commit
6b3cf1ba4a
27 changed files with 144 additions and 107 deletions
|
@ -88,7 +88,7 @@ void AssignmentClientMonitor::stopChildProcesses() {
|
||||||
nodeList->eachNode([&](const SharedNodePointer& node) {
|
nodeList->eachNode([&](const SharedNodePointer& node) {
|
||||||
qDebug() << "asking child" << node->getUUID() << "to exit.";
|
qDebug() << "asking child" << node->getUUID() << "to exit.";
|
||||||
node->activateLocalSocket();
|
node->activateLocalSocket();
|
||||||
QByteArray diePacket = byteArrayWithPopulatedHeader(PacketTypeStopNode);
|
QByteArray diePacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeStopNode);
|
||||||
nodeList->writeUnverifiedDatagram(diePacket, *node->getActiveSocket());
|
nodeList->writeUnverifiedDatagram(diePacket, *node->getActiveSocket());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ void AssignmentClientMonitor::checkSpares() {
|
||||||
qDebug() << "asking child" << aSpareId << "to exit.";
|
qDebug() << "asking child" << aSpareId << "to exit.";
|
||||||
SharedNodePointer childNode = nodeList->nodeWithUUID(aSpareId);
|
SharedNodePointer childNode = nodeList->nodeWithUUID(aSpareId);
|
||||||
childNode->activateLocalSocket();
|
childNode->activateLocalSocket();
|
||||||
QByteArray diePacket = byteArrayWithPopulatedHeader(PacketTypeStopNode);
|
QByteArray diePacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeStopNode);
|
||||||
nodeList->writeUnverifiedDatagram(diePacket, childNode);
|
nodeList->writeUnverifiedDatagram(diePacket, childNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ void AssignmentClientMonitor::readPendingDatagrams() {
|
||||||
} else {
|
} else {
|
||||||
// tell unknown assignment-client child to exit.
|
// tell unknown assignment-client child to exit.
|
||||||
qDebug() << "asking unknown child to exit.";
|
qDebug() << "asking unknown child to exit.";
|
||||||
QByteArray diePacket = byteArrayWithPopulatedHeader(PacketTypeStopNode);
|
QByteArray diePacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeStopNode);
|
||||||
nodeList->writeUnverifiedDatagram(diePacket, senderSockAddr);
|
nodeList->writeUnverifiedDatagram(diePacket, senderSockAddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -514,7 +514,8 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) {
|
||||||
bool sendData = dataChanged || (randFloat() < CHANCE_OF_SEND);
|
bool sendData = dataChanged || (randFloat() < CHANCE_OF_SEND);
|
||||||
|
|
||||||
if (sendData) {
|
if (sendData) {
|
||||||
int numBytesEnvPacketHeader = populatePacketHeader(clientEnvBuffer, PacketTypeAudioEnvironment);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
int numBytesEnvPacketHeader = nodeList->populatePacketHeader(clientEnvBuffer, PacketTypeAudioEnvironment);
|
||||||
char* envDataAt = clientEnvBuffer + numBytesEnvPacketHeader;
|
char* envDataAt = clientEnvBuffer + numBytesEnvPacketHeader;
|
||||||
|
|
||||||
unsigned char bitset = 0;
|
unsigned char bitset = 0;
|
||||||
|
@ -531,7 +532,7 @@ void AudioMixer::sendAudioEnvironmentPacket(SharedNodePointer node) {
|
||||||
memcpy(envDataAt, &wetLevel, sizeof(float));
|
memcpy(envDataAt, &wetLevel, sizeof(float));
|
||||||
envDataAt += sizeof(float);
|
envDataAt += sizeof(float);
|
||||||
}
|
}
|
||||||
DependencyManager::get<NodeList>()->writeDatagram(clientEnvBuffer, envDataAt - clientEnvBuffer, node);
|
nodeList->writeDatagram(clientEnvBuffer, envDataAt - clientEnvBuffer, node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -552,7 +553,7 @@ void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const Hif
|
||||||
SharedNodePointer sendingNode = nodeList->sendingNodeForPacket(receivedPacket);
|
SharedNodePointer sendingNode = nodeList->sendingNodeForPacket(receivedPacket);
|
||||||
if (sendingNode->getCanAdjustLocks()) {
|
if (sendingNode->getCanAdjustLocks()) {
|
||||||
QByteArray packet = receivedPacket;
|
QByteArray packet = receivedPacket;
|
||||||
populatePacketHeader(packet, PacketTypeMuteEnvironment);
|
nodeList->populatePacketHeader(packet, PacketTypeMuteEnvironment);
|
||||||
|
|
||||||
nodeList->eachNode([&](const SharedNodePointer& node){
|
nodeList->eachNode([&](const SharedNodePointer& node){
|
||||||
if (node->getType() == NodeType::Agent && node->getActiveSocket() &&
|
if (node->getType() == NodeType::Agent && node->getActiveSocket() &&
|
||||||
|
@ -794,7 +795,7 @@ void AudioMixer::run() {
|
||||||
// if the stream should be muted, send mute packet
|
// if the stream should be muted, send mute packet
|
||||||
if (nodeData->getAvatarAudioStream()
|
if (nodeData->getAvatarAudioStream()
|
||||||
&& shouldMute(nodeData->getAvatarAudioStream()->getQuietestFrameLoudness())) {
|
&& shouldMute(nodeData->getAvatarAudioStream()->getQuietestFrameLoudness())) {
|
||||||
QByteArray packet = byteArrayWithPopulatedHeader(PacketTypeNoisyMute);
|
QByteArray packet = nodeList->byteArrayWithPopulatedHeader(PacketTypeNoisyMute);
|
||||||
nodeList->writeDatagram(packet, node);
|
nodeList->writeDatagram(packet, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +807,7 @@ void AudioMixer::run() {
|
||||||
char* mixDataAt;
|
char* mixDataAt;
|
||||||
if (streamsMixed > 0) {
|
if (streamsMixed > 0) {
|
||||||
// pack header
|
// pack header
|
||||||
int numBytesMixPacketHeader = populatePacketHeader(clientMixBuffer, PacketTypeMixedAudio);
|
int numBytesMixPacketHeader = nodeList->populatePacketHeader(clientMixBuffer, PacketTypeMixedAudio);
|
||||||
mixDataAt = clientMixBuffer + numBytesMixPacketHeader;
|
mixDataAt = clientMixBuffer + numBytesMixPacketHeader;
|
||||||
|
|
||||||
// pack sequence number
|
// pack sequence number
|
||||||
|
@ -819,7 +820,7 @@ void AudioMixer::run() {
|
||||||
mixDataAt += AudioConstants::NETWORK_FRAME_BYTES_STEREO;
|
mixDataAt += AudioConstants::NETWORK_FRAME_BYTES_STEREO;
|
||||||
} else {
|
} else {
|
||||||
// pack header
|
// pack header
|
||||||
int numBytesPacketHeader = populatePacketHeader(clientMixBuffer, PacketTypeSilentAudioFrame);
|
int numBytesPacketHeader = nodeList->populatePacketHeader(clientMixBuffer, PacketTypeSilentAudioFrame);
|
||||||
mixDataAt = clientMixBuffer + numBytesPacketHeader;
|
mixDataAt = clientMixBuffer + numBytesPacketHeader;
|
||||||
|
|
||||||
// pack sequence number
|
// pack sequence number
|
||||||
|
|
|
@ -157,7 +157,7 @@ void AudioMixerClientData::sendAudioStreamStatsPackets(const SharedNodePointer&
|
||||||
quint8 appendFlag = 0;
|
quint8 appendFlag = 0;
|
||||||
|
|
||||||
// pack header
|
// pack header
|
||||||
int numBytesPacketHeader = populatePacketHeader(packet, PacketTypeAudioStreamStats);
|
int numBytesPacketHeader = nodeList->populatePacketHeader(packet, PacketTypeAudioStreamStats);
|
||||||
char* headerEndAt = packet + numBytesPacketHeader;
|
char* headerEndAt = packet + numBytesPacketHeader;
|
||||||
|
|
||||||
// calculate how many stream stat structs we can fit in each packet
|
// calculate how many stream stat structs we can fit in each packet
|
||||||
|
|
|
@ -129,10 +129,9 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
|
|
||||||
static QByteArray mixedAvatarByteArray;
|
static QByteArray mixedAvatarByteArray;
|
||||||
|
|
||||||
int numPacketHeaderBytes = populatePacketHeader(mixedAvatarByteArray, PacketTypeBulkAvatarData);
|
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
int numPacketHeaderBytes = nodeList->populatePacketHeader(mixedAvatarByteArray, PacketTypeBulkAvatarData);
|
||||||
|
|
||||||
// setup for distributed random floating point values
|
// setup for distributed random floating point values
|
||||||
std::random_device randomDevice;
|
std::random_device randomDevice;
|
||||||
std::mt19937 generator(randomDevice());
|
std::mt19937 generator(randomDevice());
|
||||||
|
@ -287,7 +286,7 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
&& (forceSend
|
&& (forceSend
|
||||||
|| otherNodeData->getBillboardChangeTimestamp() > _lastFrameTimestamp
|
|| otherNodeData->getBillboardChangeTimestamp() > _lastFrameTimestamp
|
||||||
|| randFloat() < BILLBOARD_AND_IDENTITY_SEND_PROBABILITY)) {
|
|| randFloat() < BILLBOARD_AND_IDENTITY_SEND_PROBABILITY)) {
|
||||||
QByteArray billboardPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard);
|
QByteArray billboardPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard);
|
||||||
billboardPacket.append(otherNode->getUUID().toRfc4122());
|
billboardPacket.append(otherNode->getUUID().toRfc4122());
|
||||||
billboardPacket.append(otherNodeData->getAvatar().getBillboard());
|
billboardPacket.append(otherNodeData->getAvatar().getBillboard());
|
||||||
|
|
||||||
|
@ -301,7 +300,7 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
|| otherNodeData->getIdentityChangeTimestamp() > _lastFrameTimestamp
|
|| otherNodeData->getIdentityChangeTimestamp() > _lastFrameTimestamp
|
||||||
|| randFloat() < BILLBOARD_AND_IDENTITY_SEND_PROBABILITY)) {
|
|| randFloat() < BILLBOARD_AND_IDENTITY_SEND_PROBABILITY)) {
|
||||||
|
|
||||||
QByteArray identityPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity);
|
QByteArray identityPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity);
|
||||||
|
|
||||||
QByteArray individualData = otherNodeData->getAvatar().identityByteArray();
|
QByteArray individualData = otherNodeData->getAvatar().identityByteArray();
|
||||||
individualData.replace(0, NUM_BYTES_RFC4122_UUID, otherNode->getUUID().toRfc4122());
|
individualData.replace(0, NUM_BYTES_RFC4122_UUID, otherNode->getUUID().toRfc4122());
|
||||||
|
@ -334,13 +333,13 @@ void AvatarMixer::broadcastAvatarData() {
|
||||||
void AvatarMixer::nodeKilled(SharedNodePointer killedNode) {
|
void AvatarMixer::nodeKilled(SharedNodePointer killedNode) {
|
||||||
if (killedNode->getType() == NodeType::Agent
|
if (killedNode->getType() == NodeType::Agent
|
||||||
&& killedNode->getLinkedData()) {
|
&& killedNode->getLinkedData()) {
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
// this was an avatar we were sending to other people
|
// this was an avatar we were sending to other people
|
||||||
// send a kill packet for it to our other nodes
|
// send a kill packet for it to our other nodes
|
||||||
QByteArray killPacket = byteArrayWithPopulatedHeader(PacketTypeKillAvatar);
|
QByteArray killPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeKillAvatar);
|
||||||
killPacket += killedNode->getUUID().toRfc4122();
|
killPacket += killedNode->getUUID().toRfc4122();
|
||||||
|
|
||||||
DependencyManager::get<NodeList>()->broadcastToNodes(killPacket,
|
nodeList->broadcastToNodes(killPacket, NodeSet() << NodeType::Agent);
|
||||||
NodeSet() << NodeType::Agent);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,9 @@ void EntityServer::entityCreated(const EntityItem& newEntity, const SharedNodePo
|
||||||
unsigned char outputBuffer[MAX_PACKET_SIZE];
|
unsigned char outputBuffer[MAX_PACKET_SIZE];
|
||||||
unsigned char* copyAt = outputBuffer;
|
unsigned char* copyAt = outputBuffer;
|
||||||
|
|
||||||
int numBytesPacketHeader = populatePacketHeader(reinterpret_cast<char*>(outputBuffer), PacketTypeEntityAddResponse);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
int numBytesPacketHeader = nodeList->populatePacketHeader(reinterpret_cast<char*>(outputBuffer), PacketTypeEntityAddResponse);
|
||||||
int packetLength = numBytesPacketHeader;
|
int packetLength = numBytesPacketHeader;
|
||||||
copyAt += numBytesPacketHeader;
|
copyAt += numBytesPacketHeader;
|
||||||
|
|
||||||
|
@ -81,7 +83,7 @@ void EntityServer::entityCreated(const EntityItem& newEntity, const SharedNodePo
|
||||||
copyAt += sizeof(entityID);
|
copyAt += sizeof(entityID);
|
||||||
packetLength += sizeof(entityID);
|
packetLength += sizeof(entityID);
|
||||||
|
|
||||||
DependencyManager::get<NodeList>()->writeDatagram((char*) outputBuffer, packetLength, senderNode);
|
nodeList->writeDatagram((char*) outputBuffer, packetLength, senderNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -277,9 +277,11 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
|
|
||||||
char* dataAt = packet;
|
char* dataAt = packet;
|
||||||
int bytesRemaining = MAX_PACKET_SIZE;
|
int bytesRemaining = MAX_PACKET_SIZE;
|
||||||
|
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
// pack header
|
// pack header
|
||||||
int numBytesPacketHeader = populatePacketHeader(packet, _myServer->getMyEditNackType());
|
int numBytesPacketHeader = nodeList->populatePacketHeader(packet, _myServer->getMyEditNackType());
|
||||||
dataAt += numBytesPacketHeader;
|
dataAt += numBytesPacketHeader;
|
||||||
bytesRemaining -= numBytesPacketHeader;
|
bytesRemaining -= numBytesPacketHeader;
|
||||||
|
|
||||||
|
@ -301,7 +303,7 @@ int OctreeInboundPacketProcessor::sendNackPackets() {
|
||||||
numSequenceNumbersAvailable -= numSequenceNumbers;
|
numSequenceNumbersAvailable -= numSequenceNumbers;
|
||||||
|
|
||||||
// send it
|
// send it
|
||||||
DependencyManager::get<NodeList>()->writeUnverifiedDatagram(packet, dataAt - packet, destinationNode);
|
nodeList->writeUnverifiedDatagram(packet, dataAt - packet, destinationNode);
|
||||||
packetsSent++;
|
packetsSent++;
|
||||||
|
|
||||||
qDebug() << "NACK Sent back to editor/client... destinationNode=" << nodeUUID;
|
qDebug() << "NACK Sent back to editor/client... destinationNode=" << nodeUUID;
|
||||||
|
|
|
@ -189,7 +189,9 @@ void OctreeQueryNode::resetOctreePacket() {
|
||||||
}
|
}
|
||||||
|
|
||||||
_octreePacketAvailableBytes = MAX_PACKET_SIZE;
|
_octreePacketAvailableBytes = MAX_PACKET_SIZE;
|
||||||
int numBytesPacketHeader = populatePacketHeader(reinterpret_cast<char*>(_octreePacket), _myPacketType);
|
int numBytesPacketHeader = DependencyManager::get<NodeList>()->populatePacketHeader(reinterpret_cast<char*>(_octreePacket),
|
||||||
|
_myPacketType);
|
||||||
|
|
||||||
_octreePacketAt = _octreePacket + numBytesPacketHeader;
|
_octreePacketAt = _octreePacket + numBytesPacketHeader;
|
||||||
_octreePacketAvailableBytes -= numBytesPacketHeader;
|
_octreePacketAvailableBytes -= numBytesPacketHeader;
|
||||||
|
|
||||||
|
|
|
@ -619,10 +619,12 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock
|
||||||
|
|
||||||
packetStream >> nodeInterestList >> username >> usernameSignature;
|
packetStream >> nodeInterestList >> username >> usernameSignature;
|
||||||
|
|
||||||
|
auto limitedNodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
|
|
||||||
QString reason;
|
QString reason;
|
||||||
if (!isAssignment && !shouldAllowConnectionFromNode(username, usernameSignature, senderSockAddr, reason)) {
|
if (!isAssignment && !shouldAllowConnectionFromNode(username, usernameSignature, senderSockAddr, reason)) {
|
||||||
// this is an agent and we've decided we won't let them connect - send them a packet to deny connection
|
// this is an agent and we've decided we won't let them connect - send them a packet to deny connection
|
||||||
QByteArray connectionDeniedByteArray = byteArrayWithPopulatedHeader(PacketTypeDomainConnectionDenied);
|
QByteArray connectionDeniedByteArray = limitedNodeList->byteArrayWithPopulatedHeader(PacketTypeDomainConnectionDenied);
|
||||||
QDataStream out(&connectionDeniedByteArray, QIODevice::WriteOnly | QIODevice::Append);
|
QDataStream out(&connectionDeniedByteArray, QIODevice::WriteOnly | QIODevice::Append);
|
||||||
out << reason;
|
out << reason;
|
||||||
// tell client it has been refused.
|
// tell client it has been refused.
|
||||||
|
@ -664,10 +666,9 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock
|
||||||
canRez = canAdjustLocks;
|
canRez = canAdjustLocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedNodePointer newNode =
|
SharedNodePointer newNode = limitedNodeList->addOrUpdateNode(nodeUUID, nodeType,
|
||||||
DependencyManager::get<LimitedNodeList>()->addOrUpdateNode(nodeUUID, nodeType,
|
publicSockAddr, localSockAddr,
|
||||||
publicSockAddr, localSockAddr,
|
canAdjustLocks, canRez);
|
||||||
canAdjustLocks, canRez);
|
|
||||||
// when the newNode is created the linked data is also created
|
// when the newNode is created the linked data is also created
|
||||||
// if this was a static assignment set the UUID, set the sendingSockAddr
|
// if this was a static assignment set the UUID, set the sendingSockAddr
|
||||||
DomainServerNodeData* nodeData = reinterpret_cast<DomainServerNodeData*>(newNode->getLinkedData());
|
DomainServerNodeData* nodeData = reinterpret_cast<DomainServerNodeData*>(newNode->getLinkedData());
|
||||||
|
@ -926,8 +927,8 @@ NodeSet DomainServer::nodeInterestListFromPacket(const QByteArray& packet, int n
|
||||||
|
|
||||||
void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const HifiSockAddr &senderSockAddr,
|
void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const HifiSockAddr &senderSockAddr,
|
||||||
const NodeSet& nodeInterestList) {
|
const NodeSet& nodeInterestList) {
|
||||||
|
auto limitedNodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
QByteArray broadcastPacket = byteArrayWithPopulatedHeader(PacketTypeDomainList);
|
QByteArray broadcastPacket = limitedNodeList->byteArrayWithPopulatedHeader(PacketTypeDomainList);
|
||||||
|
|
||||||
// always send the node their own UUID back
|
// always send the node their own UUID back
|
||||||
QDataStream broadcastDataStream(&broadcastPacket, QIODevice::Append);
|
QDataStream broadcastDataStream(&broadcastPacket, QIODevice::Append);
|
||||||
|
@ -939,8 +940,6 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif
|
||||||
|
|
||||||
DomainServerNodeData* nodeData = reinterpret_cast<DomainServerNodeData*>(node->getLinkedData());
|
DomainServerNodeData* nodeData = reinterpret_cast<DomainServerNodeData*>(node->getLinkedData());
|
||||||
|
|
||||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
|
||||||
|
|
||||||
// if we've established a connection via ICE with this peer, use that socket
|
// if we've established a connection via ICE with this peer, use that socket
|
||||||
// otherwise just try to reply back to them on their sending socket (although that may not work)
|
// otherwise just try to reply back to them on their sending socket (although that may not work)
|
||||||
HifiSockAddr destinationSockAddr = _connectedICEPeers.value(node->getUUID());
|
HifiSockAddr destinationSockAddr = _connectedICEPeers.value(node->getUUID());
|
||||||
|
@ -955,7 +954,7 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif
|
||||||
|
|
||||||
if (nodeData->isAuthenticated()) {
|
if (nodeData->isAuthenticated()) {
|
||||||
// if this authenticated node has any interest types, send back those nodes as well
|
// if this authenticated node has any interest types, send back those nodes as well
|
||||||
nodeList->eachNode([&](const SharedNodePointer& otherNode){
|
limitedNodeList->eachNode([&](const SharedNodePointer& otherNode){
|
||||||
// reset our nodeByteArray and nodeDataStream
|
// reset our nodeByteArray and nodeDataStream
|
||||||
QByteArray nodeByteArray;
|
QByteArray nodeByteArray;
|
||||||
QDataStream nodeDataStream(&nodeByteArray, QIODevice::Append);
|
QDataStream nodeDataStream(&nodeByteArray, QIODevice::Append);
|
||||||
|
@ -986,7 +985,7 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif
|
||||||
// we need to break here and start a new packet
|
// we need to break here and start a new packet
|
||||||
// so send the current one
|
// so send the current one
|
||||||
|
|
||||||
nodeList->writeDatagram(broadcastPacket, node, senderSockAddr);
|
limitedNodeList->writeDatagram(broadcastPacket, node, senderSockAddr);
|
||||||
|
|
||||||
// reset the broadcastPacket structure
|
// reset the broadcastPacket structure
|
||||||
broadcastPacket.resize(numBroadcastPacketLeadBytes);
|
broadcastPacket.resize(numBroadcastPacketLeadBytes);
|
||||||
|
@ -1001,24 +1000,24 @@ void DomainServer::sendDomainListToNode(const SharedNodePointer& node, const Hif
|
||||||
}
|
}
|
||||||
|
|
||||||
// always write the last broadcastPacket
|
// always write the last broadcastPacket
|
||||||
nodeList->writeDatagram(broadcastPacket, node, senderSockAddr);
|
limitedNodeList->writeDatagram(broadcastPacket, node, senderSockAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomainServer::readAvailableDatagrams() {
|
void DomainServer::readAvailableDatagrams() {
|
||||||
auto nodeList = DependencyManager::get<LimitedNodeList>();
|
auto limitedNodeList = DependencyManager::get<LimitedNodeList>();
|
||||||
|
|
||||||
HifiSockAddr senderSockAddr;
|
HifiSockAddr senderSockAddr;
|
||||||
QByteArray receivedPacket;
|
QByteArray receivedPacket;
|
||||||
|
|
||||||
static QByteArray assignmentPacket = byteArrayWithPopulatedHeader(PacketTypeCreateAssignment);
|
static QByteArray assignmentPacket = limitedNodeList->byteArrayWithPopulatedHeader(PacketTypeCreateAssignment);
|
||||||
static int numAssignmentPacketHeaderBytes = assignmentPacket.size();
|
static int numAssignmentPacketHeaderBytes = assignmentPacket.size();
|
||||||
|
|
||||||
while (nodeList->getNodeSocket().hasPendingDatagrams()) {
|
while (limitedNodeList->getNodeSocket().hasPendingDatagrams()) {
|
||||||
receivedPacket.resize(nodeList->getNodeSocket().pendingDatagramSize());
|
receivedPacket.resize(limitedNodeList->getNodeSocket().pendingDatagramSize());
|
||||||
nodeList->getNodeSocket().readDatagram(receivedPacket.data(), receivedPacket.size(),
|
limitedNodeList->getNodeSocket().readDatagram(receivedPacket.data(), receivedPacket.size(),
|
||||||
senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer());
|
senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer());
|
||||||
if (packetTypeForPacket(receivedPacket) == PacketTypeRequestAssignment
|
if (packetTypeForPacket(receivedPacket) == PacketTypeRequestAssignment
|
||||||
&& nodeList->packetVersionAndHashMatch(receivedPacket)) {
|
&& limitedNodeList->packetVersionAndHashMatch(receivedPacket)) {
|
||||||
|
|
||||||
// construct the requested assignment from the packet data
|
// construct the requested assignment from the packet data
|
||||||
Assignment requestAssignment(receivedPacket);
|
Assignment requestAssignment(receivedPacket);
|
||||||
|
@ -1059,7 +1058,7 @@ void DomainServer::readAvailableDatagrams() {
|
||||||
|
|
||||||
assignmentStream << uniqueAssignment;
|
assignmentStream << uniqueAssignment;
|
||||||
|
|
||||||
nodeList->getNodeSocket().writeDatagram(assignmentPacket,
|
limitedNodeList->getNodeSocket().writeDatagram(assignmentPacket,
|
||||||
senderSockAddr.getAddress(), senderSockAddr.getPort());
|
senderSockAddr.getAddress(), senderSockAddr.getPort());
|
||||||
|
|
||||||
// add the information for that deployed assignment to the hash of pending assigned nodes
|
// add the information for that deployed assignment to the hash of pending assigned nodes
|
||||||
|
@ -1081,16 +1080,16 @@ void DomainServer::readAvailableDatagrams() {
|
||||||
processDatagram(receivedPacket, senderSockAddr);
|
processDatagram(receivedPacket, senderSockAddr);
|
||||||
} else {
|
} else {
|
||||||
// we're using DTLS, so tell the sender to get back to us using DTLS
|
// we're using DTLS, so tell the sender to get back to us using DTLS
|
||||||
static QByteArray dtlsRequiredPacket = byteArrayWithPopulatedHeader(PacketTypeDomainServerRequireDTLS);
|
static QByteArray dtlsRequiredPacket = limitedNodeList->byteArrayWithPopulatedHeader(PacketTypeDomainServerRequireDTLS);
|
||||||
static int numBytesDTLSHeader = numBytesForPacketHeaderGivenPacketType(PacketTypeDomainServerRequireDTLS);
|
static int numBytesDTLSHeader = numBytesForPacketHeaderGivenPacketType(PacketTypeDomainServerRequireDTLS);
|
||||||
|
|
||||||
if (dtlsRequiredPacket.size() == numBytesDTLSHeader) {
|
if (dtlsRequiredPacket.size() == numBytesDTLSHeader) {
|
||||||
// pack the port that we accept DTLS traffic on
|
// pack the port that we accept DTLS traffic on
|
||||||
unsigned short dtlsPort = nodeList->getDTLSSocket().localPort();
|
unsigned short dtlsPort = limitedNodeList->getDTLSSocket().localPort();
|
||||||
dtlsRequiredPacket.replace(numBytesDTLSHeader, sizeof(dtlsPort), reinterpret_cast<const char*>(&dtlsPort));
|
dtlsRequiredPacket.replace(numBytesDTLSHeader, sizeof(dtlsPort), reinterpret_cast<const char*>(&dtlsPort));
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeList->writeUnverifiedDatagram(dtlsRequiredPacket, senderSockAddr);
|
limitedNodeList->writeUnverifiedDatagram(dtlsRequiredPacket, senderSockAddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,7 +117,7 @@ void IceServer::sendHeartbeatResponse(const HifiSockAddr& destinationSockAddr, Q
|
||||||
QSet<QUuid>::iterator peerID = connections.begin();
|
QSet<QUuid>::iterator peerID = connections.begin();
|
||||||
|
|
||||||
QByteArray outgoingPacket(MAX_PACKET_SIZE, 0);
|
QByteArray outgoingPacket(MAX_PACKET_SIZE, 0);
|
||||||
int currentPacketSize = populatePacketHeader(outgoingPacket, PacketTypeIceServerHeartbeatResponse, _id);
|
int currentPacketSize = populatePacketHeaderWithUUID(outgoingPacket, PacketTypeIceServerHeartbeatResponse, _id);
|
||||||
int numHeaderBytes = currentPacketSize;
|
int numHeaderBytes = currentPacketSize;
|
||||||
|
|
||||||
// go through the connections, sending packets containing connection information for those nodes
|
// go through the connections, sending packets containing connection information for those nodes
|
||||||
|
@ -136,7 +136,7 @@ void IceServer::sendHeartbeatResponse(const HifiSockAddr& destinationSockAddr, Q
|
||||||
destinationSockAddr.getAddress(), destinationSockAddr.getPort());
|
destinationSockAddr.getAddress(), destinationSockAddr.getPort());
|
||||||
|
|
||||||
// reset the packet size to our number of header bytes
|
// reset the packet size to our number of header bytes
|
||||||
currentPacketSize = populatePacketHeader(outgoingPacket, PacketTypeIceServerHeartbeatResponse, _id);
|
currentPacketSize = populatePacketHeaderWithUUID(outgoingPacket, PacketTypeIceServerHeartbeatResponse, _id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// append the current peer bytes
|
// append the current peer bytes
|
||||||
|
|
|
@ -2478,7 +2478,7 @@ int Application::sendNackPackets() {
|
||||||
int bytesRemaining = MAX_PACKET_SIZE;
|
int bytesRemaining = MAX_PACKET_SIZE;
|
||||||
|
|
||||||
// pack header
|
// pack header
|
||||||
int numBytesPacketHeader = populatePacketHeader(packet, PacketTypeOctreeDataNack);
|
int numBytesPacketHeader = nodeList->populatePacketHeader(packet, PacketTypeOctreeDataNack);
|
||||||
dataAt += numBytesPacketHeader;
|
dataAt += numBytesPacketHeader;
|
||||||
bytesRemaining -= numBytesPacketHeader;
|
bytesRemaining -= numBytesPacketHeader;
|
||||||
|
|
||||||
|
@ -2672,7 +2672,7 @@ void Application::queryOctree(NodeType_t serverType, PacketType packetType, Node
|
||||||
unsigned char* endOfQueryPacket = queryPacket;
|
unsigned char* endOfQueryPacket = queryPacket;
|
||||||
|
|
||||||
// insert packet type/version and node UUID
|
// insert packet type/version and node UUID
|
||||||
endOfQueryPacket += populatePacketHeader(reinterpret_cast<char*>(endOfQueryPacket), packetType);
|
endOfQueryPacket += nodeList->populatePacketHeader(reinterpret_cast<char*>(endOfQueryPacket), packetType);
|
||||||
|
|
||||||
// encode the query data...
|
// encode the query data...
|
||||||
endOfQueryPacket += _octreeQuery.getBroadcastData(endOfQueryPacket);
|
endOfQueryPacket += _octreeQuery.getBroadcastData(endOfQueryPacket);
|
||||||
|
|
|
@ -846,8 +846,9 @@ int MyAvatar::parseDataAtOffset(const QByteArray& packet, int offset) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::sendKillAvatar() {
|
void MyAvatar::sendKillAvatar() {
|
||||||
QByteArray killPacket = byteArrayWithPopulatedHeader(PacketTypeKillAvatar);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
DependencyManager::get<NodeList>()->broadcastToNodes(killPacket, NodeSet() << NodeType::AvatarMixer);
|
QByteArray killPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeKillAvatar);
|
||||||
|
nodeList->broadcastToNodes(killPacket, NodeSet() << NodeType::AvatarMixer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyAvatar::updateLookAtTargetAvatar() {
|
void MyAvatar::updateLookAtTargetAvatar() {
|
||||||
|
|
|
@ -837,7 +837,7 @@ void AudioClient::handleAudioInput() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char* currentPacketPtr = audioDataPacket + populatePacketHeader(audioDataPacket, packetType);
|
char* currentPacketPtr = audioDataPacket + nodeList->populatePacketHeader(audioDataPacket, packetType);
|
||||||
|
|
||||||
// pack sequence number
|
// pack sequence number
|
||||||
memcpy(currentPacketPtr, &_outgoingAvatarAudioSequenceNumber, sizeof(quint16));
|
memcpy(currentPacketPtr, &_outgoingAvatarAudioSequenceNumber, sizeof(quint16));
|
||||||
|
@ -899,7 +899,9 @@ void AudioClient::processReceivedSamples(const QByteArray& inputBuffer, QByteArr
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioClient::sendMuteEnvironmentPacket() {
|
void AudioClient::sendMuteEnvironmentPacket() {
|
||||||
QByteArray mutePacket = byteArrayWithPopulatedHeader(PacketTypeMuteEnvironment);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
QByteArray mutePacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeMuteEnvironment);
|
||||||
int headerSize = mutePacket.size();
|
int headerSize = mutePacket.size();
|
||||||
|
|
||||||
const float MUTE_RADIUS = 50;
|
const float MUTE_RADIUS = 50;
|
||||||
|
@ -910,12 +912,11 @@ void AudioClient::sendMuteEnvironmentPacket() {
|
||||||
memcpy(mutePacket.data() + headerSize + sizeof(glm::vec3), &MUTE_RADIUS, sizeof(float));
|
memcpy(mutePacket.data() + headerSize + sizeof(glm::vec3), &MUTE_RADIUS, sizeof(float));
|
||||||
|
|
||||||
// grab our audio mixer from the NodeList, if it exists
|
// grab our audio mixer from the NodeList, if it exists
|
||||||
auto nodelist = DependencyManager::get<NodeList>();
|
SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
||||||
SharedNodePointer audioMixer = nodelist->soloNodeOfType(NodeType::AudioMixer);
|
|
||||||
|
|
||||||
if (audioMixer) {
|
if (audioMixer) {
|
||||||
// send off this mute packet
|
// send off this mute packet
|
||||||
nodelist->writeDatagram(mutePacket, audioMixer);
|
nodeList->writeDatagram(mutePacket, audioMixer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -104,10 +104,12 @@ void AudioIOStats::sendDownstreamAudioStatsPacket() {
|
||||||
// also, call _receivedAudioStream's per-second callback
|
// also, call _receivedAudioStream's per-second callback
|
||||||
_receivedAudioStream->perSecondCallbackForUpdatingStats();
|
_receivedAudioStream->perSecondCallbackForUpdatingStats();
|
||||||
|
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
char packet[MAX_PACKET_SIZE];
|
char packet[MAX_PACKET_SIZE];
|
||||||
|
|
||||||
// pack header
|
// pack header
|
||||||
int numBytesPacketHeader = populatePacketHeader(packet, PacketTypeAudioStreamStats);
|
int numBytesPacketHeader = nodeList->populatePacketHeader(packet, PacketTypeAudioStreamStats);
|
||||||
char* dataAt = packet + numBytesPacketHeader;
|
char* dataAt = packet + numBytesPacketHeader;
|
||||||
|
|
||||||
// pack append flag
|
// pack append flag
|
||||||
|
@ -126,7 +128,6 @@ void AudioIOStats::sendDownstreamAudioStatsPacket() {
|
||||||
dataAt += sizeof(AudioStreamStats);
|
dataAt += sizeof(AudioStreamStats);
|
||||||
|
|
||||||
// send packet
|
// send packet
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
|
||||||
SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
||||||
nodeList->writeDatagram(packet, dataAt - packet, audioMixer);
|
nodeList->writeDatagram(packet, dataAt - packet, audioMixer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,11 +141,13 @@ void AudioInjector::injectToMixer() {
|
||||||
_currentSendPosition = 0;
|
_currentSendPosition = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
// make sure we actually have samples downloaded to inject
|
// make sure we actually have samples downloaded to inject
|
||||||
if (_audioData.size()) {
|
if (_audioData.size()) {
|
||||||
|
|
||||||
// setup the packet for injected audio
|
// setup the packet for injected audio
|
||||||
QByteArray injectAudioPacket = byteArrayWithPopulatedHeader(PacketTypeInjectAudio);
|
QByteArray injectAudioPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeInjectAudio);
|
||||||
QDataStream packetStream(&injectAudioPacket, QIODevice::Append);
|
QDataStream packetStream(&injectAudioPacket, QIODevice::Append);
|
||||||
|
|
||||||
// pack some placeholder sequence number for now
|
// pack some placeholder sequence number for now
|
||||||
|
@ -226,7 +228,6 @@ void AudioInjector::injectToMixer() {
|
||||||
_audioData.data() + _currentSendPosition, bytesToCopy);
|
_audioData.data() + _currentSendPosition, bytesToCopy);
|
||||||
|
|
||||||
// grab our audio mixer from the NodeList, if it exists
|
// grab our audio mixer from the NodeList, if it exists
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
|
||||||
SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
SharedNodePointer audioMixer = nodeList->soloNodeOfType(NodeType::AudioMixer);
|
||||||
|
|
||||||
// send off this audio packet
|
// send off this audio packet
|
||||||
|
|
|
@ -1077,25 +1077,31 @@ void AvatarData::setJointMappingsFromNetworkReply() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarData::sendAvatarDataPacket() {
|
void AvatarData::sendAvatarDataPacket() {
|
||||||
QByteArray dataPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarData);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
QByteArray dataPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeAvatarData);
|
||||||
dataPacket.append(toByteArray());
|
dataPacket.append(toByteArray());
|
||||||
|
|
||||||
DependencyManager::get<NodeList>()->broadcastToNodes(dataPacket, NodeSet() << NodeType::AvatarMixer);
|
nodeList->broadcastToNodes(dataPacket, NodeSet() << NodeType::AvatarMixer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarData::sendIdentityPacket() {
|
void AvatarData::sendIdentityPacket() {
|
||||||
QByteArray identityPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
QByteArray identityPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeAvatarIdentity);
|
||||||
identityPacket.append(identityByteArray());
|
identityPacket.append(identityByteArray());
|
||||||
|
|
||||||
DependencyManager::get<NodeList>()->broadcastToNodes(identityPacket, NodeSet() << NodeType::AvatarMixer);
|
nodeList->broadcastToNodes(identityPacket, NodeSet() << NodeType::AvatarMixer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AvatarData::sendBillboardPacket() {
|
void AvatarData::sendBillboardPacket() {
|
||||||
if (!_billboard.isEmpty()) {
|
if (!_billboard.isEmpty()) {
|
||||||
QByteArray billboardPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard);
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
QByteArray billboardPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeAvatarBillboard);
|
||||||
billboardPacket.append(_billboard);
|
billboardPacket.append(_billboard);
|
||||||
|
|
||||||
DependencyManager::get<NodeList>()->broadcastToNodes(billboardPacket, NodeSet() << NodeType::AvatarMixer);
|
nodeList->broadcastToNodes(billboardPacket, NodeSet() << NodeType::AvatarMixer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -788,7 +788,8 @@ bool EntityTree::encodeEntitiesDeletedSince(OCTREE_PACKET_SEQUENCE sequenceNumbe
|
||||||
bool hasMoreToSend = true;
|
bool hasMoreToSend = true;
|
||||||
|
|
||||||
unsigned char* copyAt = outputBuffer;
|
unsigned char* copyAt = outputBuffer;
|
||||||
size_t numBytesPacketHeader = populatePacketHeader(reinterpret_cast<char*>(outputBuffer), PacketTypeEntityErase);
|
size_t numBytesPacketHeader = DependencyManager::get<NodeList>()->populatePacketHeader(reinterpret_cast<char*>(outputBuffer),
|
||||||
|
PacketTypeEntityErase);
|
||||||
copyAt += numBytesPacketHeader;
|
copyAt += numBytesPacketHeader;
|
||||||
outputLength = numBytesPacketHeader;
|
outputLength = numBytesPacketHeader;
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include "LimitedNodeList.h"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
@ -28,8 +30,6 @@
|
||||||
#include "AccountManager.h"
|
#include "AccountManager.h"
|
||||||
#include "Assignment.h"
|
#include "Assignment.h"
|
||||||
#include "HifiSockAddr.h"
|
#include "HifiSockAddr.h"
|
||||||
#include "LimitedNodeList.h"
|
|
||||||
#include "PacketHeaders.h"
|
|
||||||
#include "UUID.h"
|
#include "UUID.h"
|
||||||
#include "NetworkLogging.h"
|
#include "NetworkLogging.h"
|
||||||
|
|
||||||
|
@ -269,6 +269,7 @@ qint64 LimitedNodeList::writeDatagram(const QByteArray& datagram,
|
||||||
// perform replacement of hash and optionally also sequence number in the header
|
// perform replacement of hash and optionally also sequence number in the header
|
||||||
if (SEQUENCE_NUMBERED_PACKETS.contains(packetType)) {
|
if (SEQUENCE_NUMBERED_PACKETS.contains(packetType)) {
|
||||||
PacketSequenceNumber sequenceNumber = getNextSequenceNumberForPacket(destinationNode->getUUID(), packetType);
|
PacketSequenceNumber sequenceNumber = getNextSequenceNumberForPacket(destinationNode->getUUID(), packetType);
|
||||||
|
qDebug() << "Sequence number for this packet is" << sequenceNumber;
|
||||||
replaceHashAndSequenceNumberInPacketGivenType(datagramCopy, packetType,
|
replaceHashAndSequenceNumberInPacketGivenType(datagramCopy, packetType,
|
||||||
destinationNode->getConnectionSecret(),
|
destinationNode->getConnectionSecret(),
|
||||||
sequenceNumber);
|
sequenceNumber);
|
||||||
|
@ -481,8 +482,8 @@ unsigned LimitedNodeList::broadcastToNodes(const QByteArray& packet, const NodeS
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray LimitedNodeList::constructPingPacket(PingType_t pingType, bool isVerified, const QUuid& packetHeaderID) {
|
QByteArray LimitedNodeList::constructPingPacket(PingType_t pingType, bool isVerified, const QUuid& packetHeaderID) {
|
||||||
QByteArray pingPacket = byteArrayWithPopulatedHeader(isVerified ? PacketTypePing : PacketTypeUnverifiedPing,
|
QByteArray pingPacket = byteArrayWithUUIDPopulatedHeader(isVerified ? PacketTypePing : PacketTypeUnverifiedPing,
|
||||||
packetHeaderID);
|
packetHeaderID);
|
||||||
|
|
||||||
QDataStream packetStream(&pingPacket, QIODevice::Append);
|
QDataStream packetStream(&pingPacket, QIODevice::Append);
|
||||||
|
|
||||||
|
@ -505,7 +506,7 @@ QByteArray LimitedNodeList::constructPingReplyPacket(const QByteArray& pingPacke
|
||||||
PacketType replyType = (packetTypeForPacket(pingPacket) == PacketTypePing)
|
PacketType replyType = (packetTypeForPacket(pingPacket) == PacketTypePing)
|
||||||
? PacketTypePingReply : PacketTypeUnverifiedPingReply;
|
? PacketTypePingReply : PacketTypeUnverifiedPingReply;
|
||||||
|
|
||||||
QByteArray replyPacket = byteArrayWithPopulatedHeader(replyType, packetHeaderID);
|
QByteArray replyPacket = byteArrayWithUUIDPopulatedHeader(replyType, packetHeaderID);
|
||||||
QDataStream packetStream(&replyPacket, QIODevice::Append);
|
QDataStream packetStream(&replyPacket, QIODevice::Append);
|
||||||
|
|
||||||
packetStream << typeFromOriginalPing << timeFromOriginalPing << usecTimestampNow();
|
packetStream << typeFromOriginalPing << timeFromOriginalPing << usecTimestampNow();
|
||||||
|
@ -695,7 +696,7 @@ void LimitedNodeList::sendHeartbeatToIceServer(const HifiSockAddr& iceServerSock
|
||||||
headerID = _sessionUUID;
|
headerID = _sessionUUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray iceRequestByteArray = byteArrayWithPopulatedHeader(PacketTypeIceServerHeartbeat, headerID);
|
QByteArray iceRequestByteArray = byteArrayWithUUIDPopulatedHeader(PacketTypeIceServerHeartbeat, headerID);
|
||||||
QDataStream iceDataStream(&iceRequestByteArray, QIODevice::Append);
|
QDataStream iceDataStream(&iceRequestByteArray, QIODevice::Append);
|
||||||
|
|
||||||
iceDataStream << _publicSockAddr << _localSockAddr;
|
iceDataStream << _publicSockAddr << _localSockAddr;
|
||||||
|
|
|
@ -101,6 +101,13 @@ public:
|
||||||
|
|
||||||
bool packetVersionAndHashMatch(const QByteArray& packet);
|
bool packetVersionAndHashMatch(const QByteArray& packet);
|
||||||
|
|
||||||
|
QByteArray byteArrayWithPopulatedHeader(PacketType packetType)
|
||||||
|
{ return byteArrayWithUUIDPopulatedHeader(packetType, _sessionUUID); }
|
||||||
|
int populatePacketHeader(QByteArray& packet, PacketType packetType)
|
||||||
|
{ return populatePacketHeaderWithUUID(packet, packetType, _sessionUUID); }
|
||||||
|
int populatePacketHeader(char* packet, PacketType packetType)
|
||||||
|
{ return populatePacketHeaderWithUUID(packet, packetType, _sessionUUID); }
|
||||||
|
|
||||||
qint64 readDatagram(QByteArray& incomingPacket, QHostAddress* address, quint16 * port);
|
qint64 readDatagram(QByteArray& incomingPacket, QHostAddress* address, quint16 * port);
|
||||||
|
|
||||||
qint64 writeDatagram(const QByteArray& datagram, const SharedNodePointer& destinationNode,
|
qint64 writeDatagram(const QByteArray& datagram, const SharedNodePointer& destinationNode,
|
||||||
|
|
|
@ -348,7 +348,7 @@ void NodeList::sendDomainServerCheckIn() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray domainServerPacket = byteArrayWithPopulatedHeader(domainPacketType, packetUUID);
|
QByteArray domainServerPacket = byteArrayWithUUIDPopulatedHeader(domainPacketType, packetUUID);
|
||||||
QDataStream packetStream(&domainServerPacket, QIODevice::Append);
|
QDataStream packetStream(&domainServerPacket, QIODevice::Append);
|
||||||
|
|
||||||
// pack our data to send to the domain-server
|
// pack our data to send to the domain-server
|
||||||
|
|
|
@ -9,14 +9,12 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include "PacketHeaders.h"
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
|
||||||
#include "NodeList.h"
|
|
||||||
|
|
||||||
#include "PacketHeaders.h"
|
|
||||||
|
|
||||||
int arithmeticCodingValueFromBuffer(const char* checkValue) {
|
int arithmeticCodingValueFromBuffer(const char* checkValue) {
|
||||||
if (((uchar) *checkValue) < 255) {
|
if (((uchar) *checkValue) < 255) {
|
||||||
return *checkValue;
|
return *checkValue;
|
||||||
|
@ -139,29 +137,27 @@ QString nameForPacketType(PacketType packetType) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QByteArray byteArrayWithPopulatedHeader(PacketType packetType, const QUuid& connectionUUID) {
|
QByteArray byteArrayWithUUIDPopulatedHeader(PacketType packetType, const QUuid& connectionUUID) {
|
||||||
QByteArray freshByteArray(MAX_PACKET_HEADER_BYTES, 0);
|
QByteArray freshByteArray(MAX_PACKET_HEADER_BYTES, 0);
|
||||||
freshByteArray.resize(populatePacketHeader(freshByteArray, packetType, connectionUUID));
|
freshByteArray.resize(populatePacketHeaderWithUUID(freshByteArray, packetType, connectionUUID));
|
||||||
return freshByteArray;
|
return freshByteArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
int populatePacketHeader(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID) {
|
int populatePacketHeaderWithUUID(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID) {
|
||||||
if (packet.size() < numBytesForPacketHeaderGivenPacketType(packetType)) {
|
if (packet.size() < numBytesForPacketHeaderGivenPacketType(packetType)) {
|
||||||
packet.resize(numBytesForPacketHeaderGivenPacketType(packetType));
|
packet.resize(numBytesForPacketHeaderGivenPacketType(packetType));
|
||||||
}
|
}
|
||||||
|
|
||||||
return populatePacketHeader(packet.data(), packetType, connectionUUID);
|
return populatePacketHeaderWithUUID(packet.data(), packetType, connectionUUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
int populatePacketHeader(char* packet, PacketType packetType, const QUuid& connectionUUID) {
|
int populatePacketHeaderWithUUID(char* packet, PacketType packetType, const QUuid& connectionUUID) {
|
||||||
int numTypeBytes = packArithmeticallyCodedValue(packetType, packet);
|
int numTypeBytes = packArithmeticallyCodedValue(packetType, packet);
|
||||||
packet[numTypeBytes] = versionForPacketType(packetType);
|
packet[numTypeBytes] = versionForPacketType(packetType);
|
||||||
|
|
||||||
char* position = packet + numTypeBytes + sizeof(PacketVersion);
|
char* position = packet + numTypeBytes + sizeof(PacketVersion);
|
||||||
|
|
||||||
QUuid packUUID = connectionUUID.isNull() ? DependencyManager::get<LimitedNodeList>()->getSessionUUID() : connectionUUID;
|
QByteArray rfcUUID = connectionUUID.toRfc4122();
|
||||||
|
|
||||||
QByteArray rfcUUID = packUUID.toRfc4122();
|
|
||||||
memcpy(position, rfcUUID.constData(), NUM_BYTES_RFC4122_UUID);
|
memcpy(position, rfcUUID.constData(), NUM_BYTES_RFC4122_UUID);
|
||||||
position += NUM_BYTES_RFC4122_UUID;
|
position += NUM_BYTES_RFC4122_UUID;
|
||||||
|
|
||||||
|
@ -236,11 +232,19 @@ void replaceHashInPacketGivenType(QByteArray& packet, PacketType packetType, con
|
||||||
hashForPacketAndConnectionUUID(packet, connectionUUID));
|
hashForPacketAndConnectionUUID(packet, connectionUUID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID) {
|
||||||
|
replaceHashInPacketGivenType(packet, packetTypeForPacket(packet), connectionUUID);
|
||||||
|
}
|
||||||
|
|
||||||
void replaceSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType, PacketSequenceNumber sequenceNumber) {
|
void replaceSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType, PacketSequenceNumber sequenceNumber) {
|
||||||
packet.replace(sequenceNumberOffsetForPacketType(packetType),
|
packet.replace(sequenceNumberOffsetForPacketType(packetType),
|
||||||
sizeof(PacketTypeSequenceMap), reinterpret_cast<char*>(&sequenceNumber));
|
sizeof(PacketSequenceNumber), reinterpret_cast<char*>(&sequenceNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber) {
|
||||||
|
replaceSequenceNumberInPacketGivenType(packet, packetTypeForPacket(packet), sequenceNumber);
|
||||||
|
}
|
||||||
|
|
||||||
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
|
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
|
||||||
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber) {
|
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber) {
|
||||||
replaceHashInPacketGivenType(packet, packetType, connectionUUID);
|
replaceHashInPacketGivenType(packet, packetType, connectionUUID);
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#ifndef hifi_PacketHeaders_h
|
#ifndef hifi_PacketHeaders_h
|
||||||
#define hifi_PacketHeaders_h
|
#define hifi_PacketHeaders_h
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
#include <QtCore/QCryptographicHash>
|
#include <QtCore/QCryptographicHash>
|
||||||
|
@ -106,9 +108,9 @@ QString nameForPacketType(PacketType packetType);
|
||||||
|
|
||||||
const QUuid nullUUID = QUuid();
|
const QUuid nullUUID = QUuid();
|
||||||
|
|
||||||
QByteArray byteArrayWithPopulatedHeader(PacketType packetType, const QUuid& connectionUUID = nullUUID);
|
QByteArray byteArrayWithUUIDPopulatedHeader(PacketType packetType, const QUuid& connectionUUID);
|
||||||
int populatePacketHeader(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID = nullUUID);
|
int populatePacketHeaderWithUUID(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID);
|
||||||
int populatePacketHeader(char* packet, PacketType packetType, const QUuid& connectionUUID = nullUUID);
|
int populatePacketHeaderWithUUID(char* packet, PacketType packetType, const QUuid& connectionUUID);
|
||||||
|
|
||||||
int numHashBytesForType(PacketType packetType);
|
int numHashBytesForType(PacketType packetType);
|
||||||
int numSequenceNumberBytesForType(PacketType packetType);
|
int numSequenceNumberBytesForType(PacketType packetType);
|
||||||
|
@ -126,12 +128,10 @@ QByteArray hashFromPacketHeader(const QByteArray& packet);
|
||||||
QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid& connectionUUID);
|
QByteArray hashForPacketAndConnectionUUID(const QByteArray& packet, const QUuid& connectionUUID);
|
||||||
|
|
||||||
void replaceHashInPacketGivenType(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID);
|
void replaceHashInPacketGivenType(QByteArray& packet, PacketType packetType, const QUuid& connectionUUID);
|
||||||
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID)
|
void replaceHashInPacket(QByteArray& packet, const QUuid& connectionUUID);
|
||||||
{ replaceHashInPacketGivenType(packet, packetTypeForPacket(packet), connectionUUID); }
|
|
||||||
|
|
||||||
void replaceSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType, PacketSequenceNumber sequenceNumber);
|
void replaceSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType, PacketSequenceNumber sequenceNumber);
|
||||||
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber)
|
void replaceSequenceNumberInPacket(QByteArray& packet, PacketSequenceNumber sequenceNumber);
|
||||||
{ replaceSequenceNumberInPacketGivenType(packet, packetTypeForPacket(packet), sequenceNumber); }
|
|
||||||
|
|
||||||
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
|
void replaceHashAndSequenceNumberInPacketGivenType(QByteArray& packet, PacketType packetType,
|
||||||
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber);
|
const QUuid& connectionUUID, PacketSequenceNumber sequenceNumber);
|
||||||
|
|
|
@ -35,10 +35,13 @@ void JurisdictionListener::nodeKilled(SharedNodePointer node) {
|
||||||
bool JurisdictionListener::queueJurisdictionRequest() {
|
bool JurisdictionListener::queueJurisdictionRequest() {
|
||||||
static unsigned char buffer[MAX_PACKET_SIZE];
|
static unsigned char buffer[MAX_PACKET_SIZE];
|
||||||
unsigned char* bufferOut = &buffer[0];
|
unsigned char* bufferOut = &buffer[0];
|
||||||
int sizeOut = populatePacketHeader(reinterpret_cast<char*>(bufferOut), PacketTypeJurisdictionRequest);
|
|
||||||
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
|
|
||||||
|
int sizeOut = nodeList->populatePacketHeader(reinterpret_cast<char*>(bufferOut), PacketTypeJurisdictionRequest);
|
||||||
int nodeCount = 0;
|
int nodeCount = 0;
|
||||||
|
|
||||||
DependencyManager::get<NodeList>()->eachNode([&](const SharedNodePointer& node) {
|
nodeList->eachNode([&](const SharedNodePointer& node) {
|
||||||
if (node->getType() == getNodeType() && node->getActiveSocket()) {
|
if (node->getType() == getNodeType() && node->getActiveSocket()) {
|
||||||
_packetSender.queuePacketForSending(node, QByteArray(reinterpret_cast<char*>(bufferOut), sizeOut));
|
_packetSender.queuePacketForSending(node, QByteArray(reinterpret_cast<char*>(bufferOut), sizeOut));
|
||||||
nodeCount++;
|
nodeCount++;
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <DependencyManager.h>
|
||||||
|
#include <NodeList.h>
|
||||||
#include <PacketHeaders.h>
|
#include <PacketHeaders.h>
|
||||||
#include <OctalCode.h>
|
#include <OctalCode.h>
|
||||||
|
|
||||||
|
@ -268,8 +270,9 @@ bool JurisdictionMap::writeToFile(const char* filename) {
|
||||||
|
|
||||||
int JurisdictionMap::packEmptyJurisdictionIntoMessage(NodeType_t type, unsigned char* destinationBuffer, int availableBytes) {
|
int JurisdictionMap::packEmptyJurisdictionIntoMessage(NodeType_t type, unsigned char* destinationBuffer, int availableBytes) {
|
||||||
unsigned char* bufferStart = destinationBuffer;
|
unsigned char* bufferStart = destinationBuffer;
|
||||||
|
|
||||||
int headerLength = populatePacketHeader(reinterpret_cast<char*>(destinationBuffer), PacketTypeJurisdiction);
|
int headerLength = DependencyManager::get<NodeList>()->populatePacketHeader(reinterpret_cast<char*>(destinationBuffer),
|
||||||
|
PacketTypeJurisdiction);
|
||||||
destinationBuffer += headerLength;
|
destinationBuffer += headerLength;
|
||||||
|
|
||||||
// Pack the Node Type in first byte
|
// Pack the Node Type in first byte
|
||||||
|
@ -287,7 +290,8 @@ int JurisdictionMap::packEmptyJurisdictionIntoMessage(NodeType_t type, unsigned
|
||||||
int JurisdictionMap::packIntoMessage(unsigned char* destinationBuffer, int availableBytes) {
|
int JurisdictionMap::packIntoMessage(unsigned char* destinationBuffer, int availableBytes) {
|
||||||
unsigned char* bufferStart = destinationBuffer;
|
unsigned char* bufferStart = destinationBuffer;
|
||||||
|
|
||||||
int headerLength = populatePacketHeader(reinterpret_cast<char*>(destinationBuffer), PacketTypeJurisdiction);
|
int headerLength = DependencyManager::get<NodeList>()->populatePacketHeader(reinterpret_cast<char*>(destinationBuffer),
|
||||||
|
PacketTypeJurisdiction);
|
||||||
destinationBuffer += headerLength;
|
destinationBuffer += headerLength;
|
||||||
|
|
||||||
// Pack the Node Type in first byte
|
// Pack the Node Type in first byte
|
||||||
|
|
|
@ -328,7 +328,8 @@ void OctreeEditPacketSender::releaseQueuedPacket(EditPacketBuffer& packetBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeEditPacketSender::initializePacket(EditPacketBuffer& packetBuffer, PacketType type, int nodeClockSkew) {
|
void OctreeEditPacketSender::initializePacket(EditPacketBuffer& packetBuffer, PacketType type, int nodeClockSkew) {
|
||||||
packetBuffer._currentSize = populatePacketHeader(reinterpret_cast<char*>(&packetBuffer._currentBuffer[0]), type);
|
packetBuffer._currentSize =
|
||||||
|
DependencyManager::get<NodeList>()->populatePacketHeader(reinterpret_cast<char*>(&packetBuffer._currentBuffer[0]), type);
|
||||||
|
|
||||||
// skip over sequence number for now; will be packed when packet is ready to be sent out
|
// skip over sequence number for now; will be packed when packet is ready to be sent out
|
||||||
packetBuffer._currentSize += sizeof(quint16);
|
packetBuffer._currentSize += sizeof(quint16);
|
||||||
|
|
|
@ -221,7 +221,7 @@ void OctreeHeadlessViewer::queryOctree() {
|
||||||
unsigned char* endOfQueryPacket = queryPacket;
|
unsigned char* endOfQueryPacket = queryPacket;
|
||||||
|
|
||||||
// insert packet type/version and node UUID
|
// insert packet type/version and node UUID
|
||||||
endOfQueryPacket += populatePacketHeader(reinterpret_cast<char*>(endOfQueryPacket), packetType);
|
endOfQueryPacket += nodeList->populatePacketHeader(reinterpret_cast<char*>(endOfQueryPacket), packetType);
|
||||||
|
|
||||||
// encode the query data...
|
// encode the query data...
|
||||||
endOfQueryPacket += _octreeQuery.getBroadcastData(endOfQueryPacket);
|
endOfQueryPacket += _octreeQuery.getBroadcastData(endOfQueryPacket);
|
||||||
|
|
|
@ -385,7 +385,8 @@ void OctreeSceneStats::childBitsRemoved(bool includesExistsBits, bool includesCo
|
||||||
int OctreeSceneStats::packIntoMessage(unsigned char* destinationBuffer, int availableBytes) {
|
int OctreeSceneStats::packIntoMessage(unsigned char* destinationBuffer, int availableBytes) {
|
||||||
unsigned char* bufferStart = destinationBuffer;
|
unsigned char* bufferStart = destinationBuffer;
|
||||||
|
|
||||||
int headerLength = populatePacketHeader(reinterpret_cast<char*>(destinationBuffer), PacketTypeOctreeStats);
|
int headerLength = DependencyManager::get<NodeList>()->populatePacketHeader(reinterpret_cast<char*>(destinationBuffer),
|
||||||
|
PacketTypeOctreeStats);
|
||||||
destinationBuffer += headerLength;
|
destinationBuffer += headerLength;
|
||||||
|
|
||||||
memcpy(destinationBuffer, &_start, sizeof(_start));
|
memcpy(destinationBuffer, &_start, sizeof(_start));
|
||||||
|
|
|
@ -493,7 +493,7 @@ void ScriptEngine::run() {
|
||||||
/ (1000 * 1000)) + 0.5);
|
/ (1000 * 1000)) + 0.5);
|
||||||
const int SCRIPT_AUDIO_BUFFER_BYTES = SCRIPT_AUDIO_BUFFER_SAMPLES * sizeof(int16_t);
|
const int SCRIPT_AUDIO_BUFFER_BYTES = SCRIPT_AUDIO_BUFFER_SAMPLES * sizeof(int16_t);
|
||||||
|
|
||||||
QByteArray avatarPacket = byteArrayWithPopulatedHeader(PacketTypeAvatarData);
|
QByteArray avatarPacket = nodeList->byteArrayWithPopulatedHeader(PacketTypeAvatarData);
|
||||||
avatarPacket.append(_avatarData->toByteArray());
|
avatarPacket.append(_avatarData->toByteArray());
|
||||||
|
|
||||||
nodeList->broadcastToNodes(avatarPacket, NodeSet() << NodeType::AvatarMixer);
|
nodeList->broadcastToNodes(avatarPacket, NodeSet() << NodeType::AvatarMixer);
|
||||||
|
@ -534,9 +534,9 @@ void ScriptEngine::run() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray audioPacket = byteArrayWithPopulatedHeader(silentFrame
|
QByteArray audioPacket = nodeList->byteArrayWithPopulatedHeader(silentFrame
|
||||||
? PacketTypeSilentAudioFrame
|
? PacketTypeSilentAudioFrame
|
||||||
: PacketTypeMicrophoneAudioNoEcho);
|
: PacketTypeMicrophoneAudioNoEcho);
|
||||||
|
|
||||||
QDataStream packetStream(&audioPacket, QIODevice::Append);
|
QDataStream packetStream(&audioPacket, QIODevice::Append);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue