Skip to content

Releases: jfriesne/muscle

v7.11 release

08 Jan 02:05
Compare
Choose a tag to compare

7.11 Released 1/7/2019

  • Queue:GetWithDefault() methods that
    take a default-value argument (by-reference)
    now return their return-value by-value rather
    than by-reference, to avoid any possibility
    of returning a dangling reference if they
    are called with a temporary-object argument.
  • Hashtable:Get*WithDefault() methods that
    take a default-value argument (by-reference)
    now return their return-value by-value rather
    than by-reference, to avoid any possibility
    of returning a dangling reference if they
    are called with a temporary-object argument.
  • _MSC_VER was misspelled as MSC_VER in
    PseudoFlattenable.h, causing the code to
    fail to compile under MSVC2013. Fixed.
  • Fixed a bug in Mutex.h that would prevent
    MUSCLE_QT_HAS_THREADS from being correctly
    #defined if MUSCLE_AVOID_CPLUSPLUS11 wasn't set.
  • Fixed FileDescriptorDataIO.h to compile
    correctly under Windows in the case where it
    is the first muscle-include file to be parsed.
  • MuscleSupport.h now checks for the presence of
    _WIN32 (in addition to __WIN32__, etc)
  • Fixed an assertion failure that could be
    triggered inside DeadlockFinder_ProcessEnding()
    if MUSCLE_ENABLE_DEADLOCK_FINDER was defined.
  • Fixed some warnings generated by clang++ when
    -Wshadow is specified on the compile line.

v7.10 release

04 Dec 02:23
Compare
Choose a tag to compare

7.10 Released 12/3/2018

  • Under C++11 and later, the status_t type is now a
    class rather than a simple typedef for int32. It
    is used pretty much the same way as before, except
    now it provides better compile-time error-checking.
  • Under C++11 and later, the status_t type (and its
    values B_OK, B_ERROR, and B_NO_ERROR) are now part
    of the muscle namespace.
  • Added a WithoutNumericSuffix() convenience method to
    the String class.
  • The CMakeLists.txt file has been modified so that it
    is now usable by CMake 2.8.x and higher.
  • Functions in the C APIs have been modified to return
    type c_status_t (CB_ERROR or CB_NO_ERROR) rather than
    status_t, to avoid ambiguities with the new C++11
    version of status_t in mixed C/C++11 programs.
  • BitChord::GetNumBitsInBitChord() and friends are now
    declared as static/constexpr rather than const methods,
    so that they can be called at compile-time now.
  • Replaced the MUSCLE_ENABLE_KEEPALIVE_API compile-flag
    with a new MUSCLE_DISABLE_KEEPALIVE_API flag (i.e.
    so that the socket-keepalive API is now enabled by
    default if neither flag is specified)
  • DOxygen documentation is now generated with C++11
    enabled (before it was documenting the pre-C++11 API)
  • In the BitChord class, GetNumBytesInBitChord() and
    GetNumWordsInBitChord() were mis-named. Fixed.
  • Fixed a bug that affected MUSCLE subscriptions that
    included a QueryFilter: If a DataNode matched a
    subscription's node-path string, but its Message-payload
    didn't match the QueryFilter's criteria (at the time the
    subscription was created), then future modifications to the
    DataNode would not cause the subscriber to be notified
    even if the updated Message-payload did change to match
    the QueryFilter's criteria.
  • Modified StorageReflectSession::DoSubscribeRefCallback() to
    take its argument via an object-pointer rather than
    smuggling an integer delta-value to it inside a (void *).

v7.03 release

28 Sep 16:13
Compare
Choose a tag to compare

7.03 Released 9/28/2018

  • WarnOutOfMemory() now calls PrintStackTrace() (but not more
    often than once every 5 seconds, to avoid spamming)
  • BitChord::ClearUnusedBits() is now O(1) when compiled with C++11.
  • support/BitChord.h will now fall back to its legacy implementation
    if MUSCLE_AVOID_CPLUSPLUS11_BITCHORD is defined. (This define
    will automatically be set if MUSCLE_AVOID_CPLUSPLUS11 is defined)
  • Removed unnecessary call to ERR_print_errors_fp() from the
    SSLSocketDataIO constructor.
  • IPAddress's string-argument-constructor left its fields
    uninitialized in the case where SetFromString() failed. Fixed.
  • Fixed a bug in StorageRectSession::DoTraversalAux() that would
    cause the node-traversal to skip first node-name specified in
    the second (and later) path-strings in a Message.

v7.02 release

07 Sep 22:42
Compare
Choose a tag to compare

7.02 Released 9/7/2018

  • Added a function OptimizeMessageForTransmissionToMultipleGateways()
    that can be used to greatly reduce a server's RAM usage when it is
    going to send a large Message to multiple clients simultaneously.
  • Added a function IsMessageOptimizedForTransmissionToMultipleGateways()
    that will return true iff the specified Message has been tagged already.
  • Added a GetDistanceTo() method to the String class that
    returns the Levenshtein distance between two Strings.
  • Added a GetInitialMemoryUsage() method to the CompleteSystemSystem class.
  • Added a GetProcessMemoryUsage() function to MiscUtilityFunctions that
    returns the current process's approximate resident heap-size, in bytes.
  • Added a CreateConnectedSocketPair() convenience function
    to message_transceiver_thread.py.
  • Added AdoptRawDataArray() and ReleaseRawDataArray() methods to
    the Queue class, so that a Queue can operate using an
    externally-provided data-array if necessary.
  • Replaced some #defines in GlobalMemoryAllocator.h with inline
    functions instead, for more robust parsing.

v7.01 release

22 Aug 22:59
Compare
Choose a tag to compare

7.01 Released 8/22/2018

  • Added a EuclideanModulo() convenience function
    to MuscleSupport.h
  • Fixed some typos in the C++03 implementation of
    BitChord::FromWords() and BitChord::FromBytes()
  • Fixed a bug in Hashtable::MoveToPosition() that
    would cause it not to correctly position the target
    item when the specified position was in the latter
    half of the table's iteration-sequence.

v7.00 release

10 Aug 19:12
Compare
Choose a tag to compare

7.00 Released 8/10/2018

  • Rewrote the BitChord class to be much more powerful and
    easy to use (especially in conjunction with an enum
    of flag-names). The implementation now includes variadic
    methods (which are emulated via macros if C++11 isn't
    available), a PseudoFlattenable interface, and a number
    of new convenience methods.
  • BitChord now implements HashCode() and can therefore be
    used as a key-type in a Hashtable.
  • BitChord now implements CalculateChecksum().
  • BitChord::ToHexString() now returns a constant-length hex
    string, instead of returning a string that starts only at
    the first non-zero byte.
  • Added a testbitchord.cpp test program to the tests folder.
  • CleanupDNSLabel() and CleanupDNSPath() now accept an optional
    second argument specifying additional characters that the
    filter should allow to remain in the returned String.
  • Under MacOS/X and BSD, MUSCLE sockets now have the SO_NOSIGPIPE
    socket-option automatically set on them, to avoid spurious
    SIGPIPE signals while running inside a debugger.
  • Updated PythonUtilityFunctions.cpp to be compatible with Python3.
  • Rewrote the CHILD_PROCESS_LAUNCH_BITS in the ChildProcessDataIO
    class to use a BitChord typedef (ChildProcessLaunchFlags)
    instead. Renamed them to CHILD_PROCESS_LAUNCH_FLAG_*.
  • Removed the "inherit file descriptors" member variable and
    arguments from the ChildProcessDataIO class and added a
    CHILD_PROCESS_LAUNCH_FLAG_INHERIT_FDS flag to replace it.
  • Added a (launchFlags) arg to the LaunchIndependentChildProcess()
    convenience methods in the ChildProcessDataIO class.
  • Changed the DATA_FLAG_* bits of the ByteBuffer class to
    an enum, managed by the EndianFlags BitChord typedef.
    Renamed them to ENDIAN_FLAG_* for clarity.
  • Renamed ByteBuffer::SetDataFlags() to ByteBuffer::SetEndianFlags()
  • BitChord is now implemented using uint32 words rather than
    unsigned-int words.
  • Modified the GetNetworkInterfaceInfos() function to take
    a GNIIBits argument instead of a uint32 (and renamed the
    GNII_* enums to GNII_FLAG_*)
  • Renamed BitChord::GetBit() to BitChord::IsBitSet()
  • Removed the inclusion of CoreFoundation/CFRunLoop.h
    from DetectNetworkConfigChangesSession.h since having
    it there could cause a namespace collision with Apple's
    Point class.
  • The ARRAYITEMS() templated method (in MuscleSupport.h)
    is now declared constexpr under C++11 and higher.
  • Moved the declaration of the Void class out of
    util/Hashtable.h and into support/Void.h
  • Modified the StringMatcher class to use BitChord
    instead of a uint8 to hold its internal flags.
  • Modified the FilePathInfo class to use BitChord
    instead of a uint32 to hold its internal flags.
  • Replaced the signal(SIGPIPE, SIG_IGN) call inside
    NetworkSetupSystem with a less problematic call to
    sigaction(SIGPIPE).
  • Added some documentation for the BitChord class to
    the MUSCLE-by-Example mkdocs pages.
  • Updated the Python3 code in the python3 folder to
    fix a couple of bugs (caused by code that was correct for
    Python2 but needed to be written differently for Python3)

v6.91 release

27 Jul 01:17
Compare
Choose a tag to compare

6.91 Released 7/26/2018

  • Added Pete Goodeve's Python3 port of MUSCLE's existing Python2
    files (into the new python3 sub-directory)
  • Added a striphextermoutput utility program to the tests folder,
    since I'm tired of doing stripping hexterm output by hand.
  • hexterm now pays attention when you enter a blank line on stdin,
    and takes that as a hint to break up its output into separate
    Write() calls (useful when piping striphextermoutput's results
    back into hexterm, since otherwise the data for separate UDP
    packets could get combined into a single giant UDP packet, which
    isn't helpful)
  • hexterm now takes an optional "delay" argument; if the argument
    is specified (e.g. "delay=100 milliseconds"), then hexterm will
    insert a delay of that duration after each call to Write().
  • MuscleSupport.h now uses stdint.h and inttypes.h by default as
    the basis for its int8/int16/int32/int64/etc typedefs, rather
    than trying to hand-roll them from the built-in C/C++ int/long
    types. If for some reason you can't use that, you can add the
    compiler flag -DMUSCLE_AVOID_STDINT to your command line and
    the old approach will be used instead.
  • Added SFINAE logic to the CloneObject() function (in Cloneable.h)
    so that (on C++11 and later) it now works correctly for objects
    that inherit Cloneable and also concrete objects that do not.
  • MuscleSupport.h now uses static_assert() to verify type sizes,
    if possible.
  • MicroMessage.c and MiniMessage.c now have pseudo-static-asserts
    so that they will generate compile-time errors if any of of the
    intN typedefs have the wrong size.
  • Added PutAndGetKey() convenience methods to the Hashtable class.
    (They work the same as PutAndGet(), except they return a pointer
    to the key object in the table, rather than the value object)
  • Fixed a bug that would cause Ref::Clone() to return a
    default-initialized item (rather than a clone of the existing item)
    if it was called on an object being managed by an ObjectPool.
  • Fixed a bug that would cause MuscleSupport.h to implicitly
    defined MUSCLE_AVOID_CPLUSPLUS11 under MSVC2014/2017. (I made
    the mistake of thinking that Microsoft would set the value of
    the __cplusplus macro correctly, but they do not)
  • The 32-bit/non-stdint typedefs for int32 and uint32 are now
    based on int (and unsigned int, respectively) rather than
    long/unsigned long.

v6.90 release

15 Jul 03:08
Compare
Choose a tag to compare

6.90 Released 7/14/2018

  • Updated SSLSocketDataIO.cpp to compile against newer
    versions of OpenSSL.
  • Added GetFirstKeyWithValue() and GetLastKeyWithValue()
    convenience methods to the Hashtable class.
  • CopyFile() now takes an optional third argument. The
    third argument, if set to true, allows CopyFile() to also
    recursively copy a directory, if the first argument is
    the path of a directory.
  • The MicroMessage API was designed in such a way that it was
    easy to accidentally dereference a misaligned pointer and
    invoke undefined behavior. I redesigned the API so that
    misaligned pointers are no longer used or exposed to the
    calling code, so that the MicroMessage API can now be used
    e.g. on ARM CPUs.
  • Fixed MSVC2017 compiler warning in PseudoFlattenable.h.
  • Fixed a buffer overflow in test/printsourcelocations.cpp
  • The C-based test programs in the test folder (microchatclient,
    minichatclient, microreflectclient, and minireflectclient)
    weren't handling socket-closed/EOF events correctly. Fixed.
  • Added some code to MiniMessage.c so that data fields will
    be longword-aligned even if ((sizeof(MMessageField)%8)!=0)
  • MFree() in the MiniMessage API was defined to return (void *)
    rather than (void), due to a copy/paste error. Fixed.
  • Updated the MUSCLE_ENABLE_MEMORY_TRACKING implementations of
    MAlloc(), MRealloc(), and MFree() to follow strict-aliasing rules.
  • IPAddressAndPort::WithInterfaceIndex() and
    IPAddress::WithInterfaceIndex() can now be called even
    when MUSCLE_AVOID_IPV6 is defined.

v6.85 release

29 May 17:02
Compare
Choose a tag to compare

6.85 Released 5/29/2018

  • Added logic to CMakeLists.txt so that if libz isn't
    installed on the build-system, it will automatically
    fall back to using the captive implementation in zlib/zlib.
  • Fixed a number of minor warnings that appeared when
    compiling with clang++ and all warnings enabled.
  • Fixed various typos and grammar problems in the MkDocs files.
  • Added a sanity-check to Message::Unflatten() so that a
    serialized Message with an impossibly-large entries-count
    field will error out cleanly, rather than attempt to allocate
    an impossibly-large Hashtable and exhaust the host's RAM.

v6.84 release

22 May 21:42
Compare
Choose a tag to compare

6.84 Released 5/22/2018

  • Added support for a -DMUSCLE_LOG_VERBOSE_SOURCE_LOCATIONS
    command-line switch so that the log output can contain
    full filename/line-number info, if desired.
  • ReflectServer::ServerProcessLoop() will now print warnings
    if it sees a session with no writeable socket and an
    outgoing Message queue that keeps getting longer and longer.
  • Added proper settings to the other build permutations in
    the .vcxproj files in the muscle-by-example/examples/vc++14
    folder.
  • Win32AllocateStdioConsole() no longer attempts to redirect
    both stdout and stderr to the same file when a filename is
    supplied as its argument (because Windows apparently doesn't
    support that). Instead, a separate xxx_stderr.txt file is
    created to hold the stderr output.