Skip to content

Releases: jfriesne/muscle

8.20 release

27 Apr 00:11
Compare
Choose a tag to compare

8.20 - Released 4/26/2021

  • Added ARRAYROWS and ARRAYCOLS functions to MuscleSupport.h
    (These are similar to the existing ARRAYITEMS except they return
    the first and second dimensional-extents of a 2D array)
  • Added AreKeysASupersetOf() and AreKeysASubsetOf() convenience
    methods to the Hashtable class.
  • Added an optional (fromIndex) argument to String::Replace()
    and String::GetNumInstancesOf().
  • CMake now compiles the executables in the tests folder also.
  • CMake now compiles the executables in the
    html/muscle-by-example/examples/* sub-folders also.
  • CMake now includes zip/unzip functions from zlib/zlib/contrib/minizip
    in the generated muscle.lib.
  • Added support for the -DMUSCLE_ENABLE_LOCKING_VIOLATIONS_CHECKER
    compile-time flag and the associated functionality in the Mutex
    class (see BUILDOPTIONS.txt for details)
  • Added a NeuterMutex() method to the ObjectPool class.
  • Changed ARRAYITEMS to return uint32 instead of unsigned int.
  • Changed ChildProcessDataIO::WaitForChildProcessToExit()
    to return a status_t rather than a bool.
  • Removed obsolete Win95/Win98 support code from RS232DataIO.cpp.
  • Removed all MSVC project files from the distribution
    (use cmake to generate .vcproj files on-demand instead)
  • Removed Borland Makefiles as obsolete.
  • Removed dev-C++ Makefiles as obsolete.
  • Added explicit assignment-operators to several classes so
    that g++ 9.3.0 wouldn't warn about deprecated implicit behavior.
  • Fixed several const-correctness problems in the minizip code.
  • Updated chatclient, testudp, and portableplaintextclient tests
    to use a StdinDataIO rather than selecting on STDIN_FILENO,
    so that they can work as expected under Windows.
  • Fixed the CMakeList.txt to link to pthreads and util libraries
    when appropriate (before it would only do so if Qt was installed)
  • Fixed a potential string-terminator bug in
    TarFileWriter::WriteFileHeader().
  • Fixed various minor compiler-warnings.

8.10 Release

06 Apr 00:44
Compare
Choose a tag to compare

8.10 - Released 4/5/2021

  • Added ByteBufferPacketDataIO class to the dataio folder.
  • Win32 implementation of ChildProcessDataIO now
    uses a variable-duration polling algorithm to improve
    data-transfer rate from child's stdout to parent process.
  • Added a Prefill() method to the ObjectPool class.
  • Added a new flag SETDATANODE_FLAG_ENABLESUPERCEDE
    to the SetDataNodeFlags enum. PR_COMMAND_SETDATA
    Message specifying this flag will try to remove
    any previously-enqueued-but-still-pending updates
    regarding the DataNodes they modify, so as not to
    build up a FIFO backlog of update-Messages when
    the server is under a heavy update-load.
  • PR_COMAMND_SETDATA parser now accepts PR_NAME_FLAGS
    field as either a SetDataNodeFlags or a uint32,
    for convenience when client isn't C++-based.
  • Added UpdateSubscriptionMessage(), PruneSubscriptionMessage(),
    and UpdateSubscriptionIndexMessage() hook-methods to
    the StorageReflectSession class.
  • Added GetStringReference() convenience-method to the
    Message class.
  • Added MLOG_ON_ERROR, MPRINT_ON_ERROR, MLOG_AND_RETURN_ON_ERROR,
    and MPRINT_AND_RETURN_ON_ERROR macros for convenient error-logging.
  • Added a MiniPacketTunnelIOGateway class, for maximally
    efficient packing of multiple smaller-than-MTU Messages together
    into UDP packets.
  • The ZLibCodec class now inherits from RefCountable.
  • Added SetPacketRemoteLocationTaggingEnabled() and
    GetPacketRemoteLocationTaggingEnabled() methods to the
    AbstractMessageIOGateway class.
  • Added a ProxyIOGateway class that centralizes some common
    code used by both the PacketTunnelIOGateway and the
    MiniPacketTunnelIOGateway (and potentially other
    "decorator" style gateways in the future)
  • Moved the declaration of the SetDataNodeFlags
    BitChord type from StorageReflectSession.h to
    StorageReflectConstants.h.
  • Modified the NotifySubscribersThatNodeChanged()
    and NodeChanged() methods in StorageReflectSession.
    to accept a NodeChangeFlags argument instead of a boolean.
  • Modified the SetData() method in DataNode to
    accept a SetDataFlags argument instead of a boolean.
  • Simplified error-handling in various locations by
    using MRETURN_ON_ERROR instead of explicit if/returns.
  • Moved the AbstractGatewayMessageReceiver and
    QueueGatewayMessageReceiver classes out of
    AbstractMessageIOGateway.h and into their own
    file AbstractGatewayMessageReceiver.h
  • Updated the README.html to include descriptions
    of recently-added classes.
  • Updated the muscle.dox file to match the latest
    DOxygen codebase.
  • Fixed #include in Win32FileHandleDataIO.h
  • Fixed a bug in IPAddress::SetIPv4AddressFromUint32()
    that was causing it to set the interface-index of an
    IPv4 address to 0 instead of to MUSCLE_NO_LIMIT/invalid.
  • Fixed a potential buffer-overrun in
    StorageReflectSession::NodeIndexChanged().
  • PacketDataIO::Write() was mis-named WriteTo(). Fixed.
  • Fixed a bug in qt_advanced_example.cpp that caused
    the InternalThreadS

8.00 Release

09 Mar 02:14
Compare
Choose a tag to compare

8.00 - Released 3/8/2021

  • Added TemplatedFlatten(), TemplatedUnflatten(),
    TemplatedFlattenedSize(), and CreateMessageTemplate()
    methods to the Message class, to allow encoding of
    a Message's payload-data separately from its metadata.
  • Added a TemplatingMessageIOGateway class that takes
    advantage of Message's new templated-flattening
    functionality to reduce network bandwidth.
  • Added GetAndMoveToFront() and GetAndMoveToBack()
    convenience-methods to the Hashtable class.
  • Added protected GetSendCodec() and GetReceiveCodec() methods
    to the MessageIOGateway class, so subclasses can access them.
  • Added a DMUSCLE_USE_TEMPLATING_MESSAGE_IO_GATEWAY_BY_DEFAULT
    compile-time flag, to make it easier to exercise the
    TemplatedMessageIOGateway class. Defining this flag
    causes the AbstractMessageIOGateway class to use a
    TemplatedMessageIOGateway by default.
  • Added a (maxRecursions) argument to the SortFieldNames()
    method of the Message class.
  • Added a .And() method to the status_t class for easier
    ordered-chaining of multiple status_t-returning calls
    (available under C++17 and later only)
  • Added a MUSCLE_USE_CPLUSPLUS17 define that is automatically
    set when compiling with C++17 or later.
  • Added a MRETURN_ON_ERROR macro to facility returning
    of status_t error-codes from function calls.
  • Added a MRETURN_OOM_ON_NULL(ptr) macro that will invoke
    MRETURN_OUT_OF_MEMORY if the passed-in pointer is NULL.
  • Added template-testing code to testmessage.cpp
  • Replaced explicit comparisons to B_NO_ERROR with calls
    to .IsOK() and .IsError()
  • Renamed WARN_OUT_OF_MEMORY macro to MWARN_OUT_OF_MEMORY
    to reduce the chance of macro-namespace collisions.
  • Renamed RETURN_OUT_OF_MEMORY macro to MRETURN_OUT_OF_MEMORY
    to reduce the chance of macro-namespace collisions.
  • Renamed DECLARE_ANONYMOUS_STACK_OBJECT macro to
    MDECLARE_ANONYMOUS_STACK_OBJECT to reduce the chance
    of macro-namespace collisions.
  • Renamed DECLARE_DEBUGTIMER to MDECLARE_DEBUGTIMER to
    reduce the chance of macro-namespace collisions.
  • Fixed a bug where calling Message::AddData() with
    a NULL data-pointer could cause a crash.
  • Fixed a potential crash-on-exit bug in the
    StorageReflectSession class's Cleanup method.
  • Fixed a bug in the pthreads implementation of
    Mutex::TryLock() (it was calling through to
    pthread_mutex_lock() rather than pthread_mutex_trylock())

7.71 Release

15 Feb 02:51
Compare
Choose a tag to compare
  • Added copy-constructor and assignment-operator to the
    StringTokenizer class.
  • Updated the muscle.dox file to work with DOxygen v1.9.2.
  • Fixed some ClangSA warnings
  • Modified Hashtable::PutOrRemove() to return a status_t
    instead of a pointer-to-value.
  • StringTokenizer constructor now takes separate arguments
    for "hard" and "soft" separator-chars (with multiple
    contiguous "hard" separator-chars returning empty strings
    when tokenized, while contiguous "soft" separator-chars
    will be handled as a single separator)
  • Removed svncopy.cpp from the tests subfolder.
  • Added teststringtokenizer.cpp to the tests subfolder.
  • SetSocketMulticastToSelf() was broken under MacOS/X; fixed.
  • The calls to ReadFromNetworkArray() inside
    NetworkUtilityFunctions.cpp no longer pass zero as an
    interface index, to avoid an unnecessary @0 suffix in
    IPv6 address strings.
  • Modified DetectNetworkConfigChangesSession.cpp to again
    compile when _WIN32_WINNT is set to 0x0501 (aka WinXP)
  • Fixed a bug in the Win32 implementation of
    Thread::SetThreadPriority() that would cause it to
    always return B_UNIMPLEMENTED.

7.70 Release

09 Jan 01:01
Compare
Choose a tag to compare

7.70 - Released 1/8/2021

  • The subscribed-sessions tables used by DataNode objects are
    now immutable and shared across multiple DataNodes when
    appropriate, reducing the server's RAM usage.
  • Added IsInterfaceIndexValid(), UnsetInterfaceIndex(),
    SetInterfaceIndexFrom(), and WithoutInterfaceIndex() methods
    to the IPAddress class.
  • Added AddTailIfNotAlreadyPresent() and AddHeadIfNotAlreadyPresent()
    convenience methods to the Queue class.
  • Added a (defaultInterfaceIndex) value to IPAddress::GetInterfaceIndex()
    to specify what to return if the current interface index value isn't
    valid. Defaults to zero.
  • Added IPAddress::IsIPv6NodeLocalMulticast() and
    IPAddress::IsIPv6LinkLocalMulticast() convenience methods.
  • Added == and != operators to the NetworkInterfaceInfo class.
  • Modified the DataNode::GetSubscribers() method to return a
    (const Hashtable<String, uint32> &) rather than a
    (HashtableIterator<const String *, uint32>)
  • Split Queue::RemoveDuplicateItems(bool) into
    Queue::RemoveDuplicateItems() and Queue:RemoveSortedDuplicateItems().
  • Revised the way interface-index values are handled in the IPAddress
    class. Now unset/invalid interface-indices are represented
    internally via a guard value (MUSCLE_NO_LIMIT) rather than 0.
  • IPAddress::ToString()'s (printIPv4AddressesInIPv4Style) argument
    now defaults to true instead of false.
  • Modified muscleArrayIndexIsValid() to reference (theArray) via
    a dummy (theArray==theArray) test rather than a (theArray!=NULL)
    test, as the latter test can generate a warning at compile time.

7.62 Release

21 Nov 02:10
Compare
Choose a tag to compare

7.62 - Released 11/20/2020

  • Added a ToBinaryString() convenience-method to the BitChord class.
  • Updated TarFileWriter so that it can now write using non-seekable
    DataIO objects as well as SeekableDataIO objects (although with
    non-seekable you have to explicitly specify the file sizes up-front)
  • Updated the captive zlib implementation to the latest (v1.2.11)
  • Added CallFlattenHeaderAndMessage() and CallUnflattenHeaderAndMessage()
    convenience-methods to the MessageIOGateway class.
  • Added a GZDataIO class to the zlib folder, as quick way to wrap
    the gzread()/gzwrite() API inside a DataIO interface.
  • Modified CMakeList.txt to avoid policy warnings under Windows.
  • Fixed pointer-casting in Windows call to SetWindowLongPtr()
  • Fixed a bug where String::WithoutSuffix() and String::WithoutPrefix()
    would spin the CPU if they were passed an empty String as an argument.
    Now these methods immediately return (*this) in that case, instead.

7.61 Release

05 Aug 23:25
Compare
Choose a tag to compare

7.61 Released 8/5/2020

  • Removed MUSCLE's requirement that indexed-child-nodes'
    node-names must start with the capital letter I. Now
    any name is acceptable for use as an indexed-child-node.
  • Added a new Arg(double, uint32, uint32) overload to the
    String class, which can yield better floating-point-to-String
    formatting than the standard printf() specifiers provide.
  • muscleMin(), muscleMax(), and various other inline functions
    in MuscleSupport.h are now tagged as MUSCLE_CONSTEXPR
    so that they can be evaluated at compile-time when possible.
  • muscleArrayIndexIsValid now returns false if the passed-in
    array-pointer is NULL.
  • Fixed a warning in the CMakeLists.txt that would occur
    on build systems that don't have Qt installed.

7.60 Release

25 Jun 22:39
Compare
Choose a tag to compare

7.60 Released 6/25/2020

  • Added a "daemonsitter" program to the tests folder, to
    demonstrate how to use MUSCLE to babysit a litter of child
    processes.
  • Added a ChildCountQueryFilter class, for constructing
    QueryFilters that take the number of child nodes of
    a DataNode into account when deciding on a match.
  • Merged in Richard Spindler's addition of CMakeList.txt
    files so that the Qt example programs are now built
    via cmake when possible, and also so that MUSCLE's
    Qt support code is built into a separate qtsupport
    library.
  • Added an optional (prepend) argument to the
    AssembleBatchMessage() utility function.
  • SimulatedMulticastDataIO now tries to send a test
    UDP packet on its UDP socket before committing to
    use it.
  • Updated server/Makefile to conditionally build for
    Catalyst based on presence of ENABLECATALYST env-var.
  • Added a testserverthread.cpp program to the tests
    folder to test/demonstrate launching a child thread
    that runs its own ReflectServer event loop, and how
    the main thread can send Messages to it
  • Added a GetEffectiveParameters() convenience method
    to the StorageReflectSession class.
  • Modified StorageReflectSession::SetDataNode(),
    RestoreNodeTreeFromMessage(), and CloneDataNodeSubree()
    to take a bit-chord of SETDATANODE_FLAG_* bits rather
    than an error-prone list of boolean arguments.
  • Added a dummy symbol to GlobalMemoryAllocator.cpp
    to avoid a "GlobalMemoryAllocator.o has no symbols" warning
  • Modified CMakeLists.txt to use WITH_MUSCLED option instead
    of BUILD_MUSCLED environment variable.
  • Changed MessageIOGateway's MessageFlattenedCallback's
    return type from void to status_t, so that the callback
    can affect whether the Message goes out or not.

7.55 Release

07 May 19:29
Compare
Choose a tag to compare

7.55 Released 5/7/2020

  • Rewrote DetectNetworkConfigChangesSession's Windows
    and Mac implementation to use a single thread for all
    DetectNetworkConfigChangesSessions in the process,
    rather than one thread per DetectNetworkConfigChangesSession.
  • Added a Python implementation of the BitChord class to
    python/bit_chord.py
  • Added PutFlat() and GetFlat() convenience methods to the
    Python Message class in message.py
  • Added SegmentedStringMatcher to the libmuscle.a build.
  • Added some experimental support for building libmuscle.a as
    a Catalyst-compatible library (see server/Makefile)
  • Added GetAndClearBit(), GetAndSetBit() and GetAndToggleBit()
    convenience methods to the BitChord class.
  • Added a SetErrno(int) function to MuscleSupport.h, to
    complement the existing GetErrno() function.
  • Added muscleproxy.cpp to the tests sub-folder, as simple
    demonstration of how to implement a proxy using MUSCLE.
  • Added a MoveIndexEntries() convenience method to the
    StorageReflectSession class.
  • Added CAddArchiveMessage() and CPrependArchiveMessage()
    convenience methods to the Message class.
  • Added an optional (maxSegments) argument to the SetPattern()
    method of the SegmentedStringMatcher class.
  • Added a "Clone Window" button to the qt_muscled_browser GUI.
  • Made qt_muscled_browser's stdout output prettier.
  • Modified SendDataUDP() so that when it returns, errno is
    still set to the state that the sendto() call set it to.
  • Moved the NODE_DEPTH_* enum out of the StorageReflectSession
    class and up into muscle-namespace scope, so that it
    can be referenced by non-StorageReflectSession code.
  • Added a work-around to SimulatedMulticastDataIO for the
    occasional MacOS/X bug that causes SendDataUDP() to always
    return ENOBUFS on a Wi-Fi device's socket. This won't fix
    the underlying problem in MacOS/X, but it will at least
    keep SimulatedMulticastDataIO from spinning a core at 100%
    when the fault occurs.

7.54 release

20 Mar 19:22
Compare
Choose a tag to compare

7.54 Released 3/20/2020

  • Added a B_ERRNUM(e) macro that works similarly to B_ERRNO, except
    it calls strerror() with the passed-in integer value rather than
    calling strerror(errno).
  • Added a TryLock() method to the Mutex class.
  • Added a WithReplacements() method to the String class that takes
    a (const Hashtable<String,String> &) argument, for doing multiple
    simultaneous search-and-replace operations at one time.
  • Fixed the handling of RTM_NEWADDR and RTM_DELADDR messages in the
    Linux implementation of DetectNetworkConfigChangesSession.
  • Tweaked the Windows #ifdef's in ChildProcessDataIO.cpp per Mika
  • Return values of pthreads functions weren't being used correctly
    to set status_t results on error. Fixed.