From dc2ec6fc9df135a4c8f3368674e9676096a7db61 Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 3 May 2017 16:44:05 +0100 Subject: [PATCH] Added some failure checks in internal OSC message sending code, and tidied up some old code --- modules/juce_osc/osc/juce_OSCReceiver.cpp | 62 +++++++++-------------- modules/juce_osc/osc/juce_OSCSender.cpp | 28 +++++----- 2 files changed, 40 insertions(+), 50 deletions(-) diff --git a/modules/juce_osc/osc/juce_OSCReceiver.cpp b/modules/juce_osc/osc/juce_OSCReceiver.cpp index 48f11dce6f..6dd6d2de2a 100644 --- a/modules/juce_osc/osc/juce_OSCReceiver.cpp +++ b/modules/juce_osc/osc/juce_OSCReceiver.cpp @@ -57,7 +57,7 @@ namespace size_t getDataSize() const noexcept { return input.getDataSize(); } /** Returns the current position of the stream. */ - uint64 getPosition() { return uint64 (input.getPosition()); } + uint64 getPosition() { return uint64 (input.getPosition()); } /** Attempts to set the current position of the stream. Returns true if this was successful. */ bool setPosition (int64 pos) { return input.setPosition (pos); } @@ -174,7 +174,7 @@ namespace typeList.add (type); } - size_t bytesRead = (size_t) typeList.size() + 2; + auto bytesRead = (size_t) typeList.size() + 2; readPaddingZeros (bytesRead); return typeList; @@ -205,8 +205,8 @@ namespace OSCMessage msg (ap); - for (OSCType* type = types.begin(); type != types.end(); ++type) - msg.addArgument (readArgument (*type)); + for (auto& type : types) + msg.addArgument (readArgument (type)); return msg; } @@ -227,13 +227,13 @@ namespace OSCBundle bundle (readTimeTag()); size_t bytesRead = 16; // already read "#bundle" and timeTag - size_t pos = getPosition(); + auto pos = getPosition(); while (! isExhausted() && bytesRead < maxBytesToRead) { bundle.addElement (readElement()); - const size_t newPos = getPosition(); + auto newPos = getPosition(); bytesRead += newPos - pos; pos = newPos; } @@ -245,12 +245,12 @@ namespace OSCBundle::Element readElement() { if (input.getNumBytesRemaining() < 4) - throw OSCFormatError("OSC input stream exhausted while reading bundle element size"); + throw OSCFormatError ("OSC input stream exhausted while reading bundle element size"); - const size_t elementSize = (size_t) readInt32(); + auto elementSize = (size_t) readInt32(); if (elementSize < 4) - throw OSCFormatError("OSC input stream format error: invalid bundle element size"); + throw OSCFormatError ("OSC input stream format error: invalid bundle element size"); return readElementWithKnownSize (elementSize); } @@ -261,7 +261,7 @@ namespace if ((uint64) input.getNumBytesRemaining() < elementSize) throw OSCFormatError ("OSC input stream exhausted while reading bundle element content"); - const char firstContentChar = static_cast (getData()) [getPosition()]; + auto firstContentChar = static_cast (getData()) [getPosition()]; if (firstContentChar == '/') return OSCBundle::Element (readMessageWithCheckedSize (elementSize)); if (firstContentChar == '#') return OSCBundle::Element (readBundleWithCheckedSize (elementSize)); @@ -288,8 +288,8 @@ namespace OSCBundle readBundleWithCheckedSize (size_t size) { - const size_t begin = (size_t) getPosition(); - const size_t maxBytesToRead = size - 4; // we've already read 4 bytes (the bundle size) + auto begin = (size_t) getPosition(); + auto maxBytesToRead = size - 4; // we've already read 4 bytes (the bundle size) OSCBundle bundle (readBundle (maxBytesToRead)); @@ -301,7 +301,7 @@ namespace OSCMessage readMessageWithCheckedSize (size_t size) { - const size_t begin = (size_t) getPosition(); + auto begin = (size_t) getPosition(); OSCMessage message (readMessage()); if (getPosition() - begin != size) @@ -456,7 +456,7 @@ private: if (threadShouldExit()) return; - const size_t bytesRead = (size_t) socket->read (buffer, (int) sizeof (buffer), false); + auto bytesRead = (size_t) socket->read (buffer, (int) sizeof (buffer), false); if (bytesRead >= 4) handleBuffer (buffer, bytesRead); @@ -469,8 +469,8 @@ private: OSCAddress address, Array >& array) { - for (int i = 0; i < array.size(); ++i) - if (address == array.getReference (i).first && listenerToAdd == array.getReference (i).second) + for (auto& i : array) + if (address == i.first && listenerToAdd == i.second) return; array.add (std::make_pair (address, listenerToAdd)); @@ -498,9 +498,9 @@ private: //============================================================================== void handleMessage (const Message& msg) override { - if (const CallbackMessage* callbackMessage = dynamic_cast (&msg)) + if (auto* callbackMessage = dynamic_cast (&msg)) { - const OSCBundle::Element& content = callbackMessage->content; + auto& content = callbackMessage->content; callListeners (content); @@ -533,30 +533,18 @@ private: //============================================================================== void callListenersWithAddress (const OSCMessage& message) { - typedef OSCReceiver::ListenerWithOSCAddress Listener; - - for (std::pair* entry = listenersWithAddress.begin(); - entry != listenersWithAddress.end(); - ++entry) - { - if (Listener* listener = entry->second) - if (message.getAddressPattern().matches (entry->first)) + for (auto& entry : listenersWithAddress) + if (auto* listener = entry.second) + if (message.getAddressPattern().matches (entry.first)) listener->oscMessageReceived (message); - } } void callRealtimeListenersWithAddress (const OSCMessage& message) { - typedef OSCReceiver::ListenerWithOSCAddress Listener; - - for (std::pair* entry = realtimeListenersWithAddress.begin(); - entry != realtimeListenersWithAddress.end(); - ++entry) - { - if (Listener* listener = entry->second) - if (message.getAddressPattern().matches (entry->first)) + for (auto& entry : listenersWithAddress) + if (auto* listener = entry.second) + if (message.getAddressPattern().matches (entry.first)) listener->oscMessageReceived (message); - } } //============================================================================== @@ -567,7 +555,7 @@ private: Array* > > realtimeListenersWithAddress; ScopedPointer socket; - int portNumber; + int portNumber = 0; OSCReceiver::FormatErrorHandler formatErrorHandler; enum { oscBufferSize = 4098 }; diff --git a/modules/juce_osc/osc/juce_OSCSender.cpp b/modules/juce_osc/osc/juce_OSCSender.cpp index 3f69e05260..80084c1c71 100644 --- a/modules/juce_osc/osc/juce_OSCSender.cpp +++ b/modules/juce_osc/osc/juce_OSCSender.cpp @@ -34,7 +34,7 @@ namespace This class implements the Open Sound Control 1.0 Specification for the format in which the OSC data will be written into the buffer. - */ + */ struct OSCOutputStream { OSCOutputStream() noexcept {} @@ -136,14 +136,14 @@ namespace OSCTypeList typeList; - for (OSCArgument* arg = msg.begin(); arg != msg.end(); ++arg) - typeList.add (arg->getType()); + for (auto& arg : msg) + typeList.add (arg.getType()); if (! writeTypeTagString (typeList)) return false; - for (OSCArgument* arg = msg.begin(); arg != msg.end(); ++arg) - if (! writeArgument (*arg)) + for (auto& arg : msg) + if (! writeArgument (arg)) return false; return true; @@ -157,8 +157,8 @@ namespace if (! writeTimeTag (bundle.getTimeTag())) return false; - for (OSCBundle::Element* element = bundle.begin(); element != bundle.end(); ++element) - if (! writeBundleElement (*element)) + for (auto& element : bundle) + if (! writeBundleElement (element)) return false; return true; @@ -203,7 +203,7 @@ namespace //============================================================================== struct OSCSender::Pimpl { - Pimpl() noexcept : targetPortNumber (0) {} + Pimpl() noexcept {} ~Pimpl() noexcept { disconnect(); } //============================================================================== @@ -233,15 +233,17 @@ struct OSCSender::Pimpl bool send (const OSCMessage& message, const String& hostName, int portNumber) { OSCOutputStream outStream; - outStream.writeMessage (message); - return sendOutputStream (outStream, hostName, portNumber); + + return outStream.writeMessage (message) + && sendOutputStream (outStream, hostName, portNumber); } bool send (const OSCBundle& bundle, const String& hostName, int portNumber) { OSCOutputStream outStream; - outStream.writeBundle (bundle); - return sendOutputStream (outStream, hostName, portNumber); + + return outStream.writeBundle (bundle) + && sendOutputStream (outStream, hostName, portNumber); } bool send (const OSCMessage& message) { return send (message, targetHostName, targetPortNumber); } @@ -270,7 +272,7 @@ private: //============================================================================== ScopedPointer socket; String targetHostName; - int targetPortNumber; + int targetPortNumber = 0; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Pimpl) };