Releases: jfriesne/muscle
Releases · jfriesne/muscle
v7.11 release
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
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
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
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
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
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
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
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
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
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.