From 2e6350832cc65bde0562b937fd3235fbcef43c9f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 15 Aug 2014 09:35:03 -0700 Subject: [PATCH] perfom packet verification on same thread as NodeList hash --- assignment-client/src/audio/AudioMixer.cpp | 44 ++++++++++--------- .../src/audio/AudioMixerDatagramProcessor.cpp | 8 +--- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index c315f695cc..5f4c3827f2 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -302,29 +302,31 @@ void AudioMixer::prepareMixForListeningNode(Node* node) { void AudioMixer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) { NodeList* nodeList = NodeList::getInstance(); - // pull any new audio data from nodes off of the network stack - PacketType mixerPacketType = packetTypeForPacket(receivedPacket); - if (mixerPacketType == PacketTypeMicrophoneAudioNoEcho - || mixerPacketType == PacketTypeMicrophoneAudioWithEcho - || mixerPacketType == PacketTypeInjectAudio - || mixerPacketType == PacketTypeSilentAudioFrame - || mixerPacketType == PacketTypeAudioStreamStats) { - - nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket); - } else if (mixerPacketType == PacketTypeMuteEnvironment) { - QByteArray packet = receivedPacket; - populatePacketHeader(packet, PacketTypeMuteEnvironment); - - foreach (const SharedNodePointer& node, nodeList->getNodeHash()) { - if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && node != nodeList->sendingNodeForPacket(receivedPacket)) { - nodeList->writeDatagram(packet, packet.size(), node); + if (nodeList->packetVersionAndHashMatch(receivedPacket)) { + // pull any new audio data from nodes off of the network stack + PacketType mixerPacketType = packetTypeForPacket(receivedPacket); + if (mixerPacketType == PacketTypeMicrophoneAudioNoEcho + || mixerPacketType == PacketTypeMicrophoneAudioWithEcho + || mixerPacketType == PacketTypeInjectAudio + || mixerPacketType == PacketTypeSilentAudioFrame + || mixerPacketType == PacketTypeAudioStreamStats) { + + nodeList->findNodeAndUpdateWithDataFromPacket(receivedPacket); + } else if (mixerPacketType == PacketTypeMuteEnvironment) { + QByteArray packet = receivedPacket; + populatePacketHeader(packet, PacketTypeMuteEnvironment); + + foreach (const SharedNodePointer& node, nodeList->getNodeHash()) { + if (node->getType() == NodeType::Agent && node->getActiveSocket() && node->getLinkedData() && node != nodeList->sendingNodeForPacket(receivedPacket)) { + nodeList->writeDatagram(packet, packet.size(), node); + } } + + } else { + // let processNodeData handle it. + nodeList->processNodeData(senderSockAddr, receivedPacket); } - - } else { - // let processNodeData handle it. - nodeList->processNodeData(senderSockAddr, receivedPacket); - } + } } void AudioMixer::sendStatsPacket() { diff --git a/assignment-client/src/audio/AudioMixerDatagramProcessor.cpp b/assignment-client/src/audio/AudioMixerDatagramProcessor.cpp index 61f42e6f08..73a4e01844 100644 --- a/assignment-client/src/audio/AudioMixerDatagramProcessor.cpp +++ b/assignment-client/src/audio/AudioMixerDatagramProcessor.cpp @@ -33,8 +33,6 @@ void AudioMixerDatagramProcessor::readPendingDatagrams() { HifiSockAddr senderSockAddr; static QByteArray incomingPacket; - NodeList* nodeList = NodeList::getInstance(); - // read everything that is available while (_nodeSocket.hasPendingDatagrams()) { incomingPacket.resize(_nodeSocket.pendingDatagramSize()); @@ -43,9 +41,7 @@ void AudioMixerDatagramProcessor::readPendingDatagrams() { _nodeSocket.readDatagram(incomingPacket.data(), incomingPacket.size(), senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer()); - if (nodeList->packetVersionAndHashMatch(incomingPacket)) { - // emit the signal to tell AudioMixer it needs to process a packet - emit packetRequiresProcessing(incomingPacket, senderSockAddr); - } + // emit the signal to tell AudioMixer it needs to process a packet + emit packetRequiresProcessing(incomingPacket, senderSockAddr); } }