Skip to content

Releases: jfriesne/muscle

6.50 release

07 Jun 00:12
Compare
Choose a tag to compare

6.50 Released 6/6/2017

  • Added SimulatedMulticastDataIO, which simulates multicast
    communication via directed unicast. Useful for communicating
    multicast-style across a WiFi network, where real multicast
    communication doesn't work very well.
  • hexterm now supports a "wifi" keyword, which if specified along
    with the "udp=address:port" argument will replace the basic
  • Added some additional Inflate() and Deflate() methods
    to the ZLibCodec class so that it can now write its
    output into an existing ByteBuffer object rather than
    allocating a new one from the byte-buffer-pool, if desired.
  • hexterm now accepts a "verifyspam" argument; if specified,
    hexterm will check incoming packets to see if they match
    the dummy-data format sent out by hexterm's "spamspersecond"
    feature, and if they do not, it will log an error message.
  • Added a GetHardwareType() method to the
    NetworkInterfaceInfo class. This method returns a
    NETWORK_INTERFACE_HARDWARE_TYPE_* value indicating what
    kind of network interface it is (e.g. Ethernet, WiFi, etc)
  • Added a GetNetworkHardwareTypeString() static method to
    the NetworkInterfaceInfo class. This returns a human-readable
    string describing the given NETWORK_INTERFACE_HARDWARE_TYPE_*
  • Added some MacOS/X-specific utility methods to the String class:
    SetFromCFStringRef(), ToCFStringRef(), and a String constructor
    method that takes a (const CFStringRef &)
  • The ip_address and IPAddressAndPort classes now implement
    the PseudoFlattenable interface to allow for easier handling.
    UDPSocketDataIO functionality with SimulatedMulticastDataIO,
    for testing purposes.
  • Renamed the ip_address type to IPAddress, and made it a real
    class (and not a typedef'd alias for uint32) even when
    MUSCLE_AVOID_IPV6 is defined. ip_address is now a typedef'd
    alias to IPAddress, for backwards compatibility with old code.
  • The various convenience methods that could be called on an
    ip_address object (e.g. IsAddressIPv4(), IsAddressValid(),
    IsAddressMulticast(), etc) are now methods in IPAddress instead.
  • AtomicCounter now uses std::atomic internally,
    if MUSCLE_USE_CPLUSPLUS11 is defined.
  • PODSwapper and SwapContentsSwapper now check for the
    corner-case where the two objects passed in are actually
    the same object (and if so, they don't attempt a swap)
  • Added a GetSourceOfLastReadPacket() method to the DataIO interface.
  • UDPSocketDataIO::GetSourceOfLastReadPacket() is now virtual.
  • Moved the ip_address/IPAddress and IPAddressAndPort classes'
    declarations out of NetworkUtilityFunctions.h and into IPAddress.h
  • Moved the NetworkInterfaceInfo class (and its associated
    functions) out of NetworkUtilityFunctions.h and into
    NetworkInterfaceInfo.h
  • Fixed several places in the codebase that were inappropriately
    relying on CFStringGetCStringPtr() to return a non-NULL value,
    when in fact it is documented to return NULL sometimes.
  • hexterm now exits gracefully when stdin is closed.

6.42 release

12 May 22:43
Compare
Choose a tag to compare

6.42 Released 5/12/2017

  • Added SetPerProcessRunTime64Offset() and
    GetPerProcessRunTime64Offset() calls, to support
    adding an artificial constant to the values returned
    by GetRunTime64(), for testing purposes
  • Added ParseHumanReadableSignedTimeIntervalString()
    and GetHumanReadableSignedTimeIntervalString() functions
    to TimeUtilityFunctions.h for better parsing of
    time-intervals that might be negative.
  • Added some new convenience methods to the Hashtable
    class: GetKeyAtWithDefault(), GetValueAt(), and
    GetValueAtWithDefault()
  • Modified the signatures of a few API calls (including
    MessageIOGateway::UnflattenHeaderAndMessage(),
    DeflateByteBuffer(), InflateByteBuffer, and the
    RawDataQueryFilter class) to take a
    (const ConstByteBufferRef &) rather than a
    (const ByteBufferRef &), as they don't ever need to
    modify the referenced ByteBuffer object anyway.

6.41 Release

24 Mar 02:43
Compare
Choose a tag to compare

6.41 Released 3/23/2017

  • Added ReadAndDeflateAndWrite() and ReadAndInflateAndWrite()
    functions to the ZLibUtilityFunctions.{cpp,h} API, and
    to the ZLibCodec class, to more easily support inflation/
    deflation of large files without having to load all their
    data into RAM at once.
  • Added Visual Studio 2017 RTM project files, as provided by
    Mika Lindqvist.
  • FileDataIO::GetReadSelectSocket() and GetWriteSelectSocket()
    now return valid ConstSocketRef objects on OS's that do
    support select-ing on a file's file descriptor (read:
    under POSIX-y OS's, but not under Windows)
  • hexterm now supports a file=filename argument, in case
    you want hexterm to read its input bytes from a file.
  • Fixed a number of DOxygen-commenting oversights detected by
    Alvaro Lopez Ortega's "doxy-coverage" comment-checking tool.
  • Tweaked some of the serialization/deserialization code to be
    more careful about avoiding non-aligned word accesses.
  • Changed the "OUT OF MEMORY" error message produced by
    WARN_OUT_OF_MEMORY macro to read "MEMORY ALLOCATION FAILURE"
    instead (since these errors can be caused by a corrupted
    heap as well as by actual memory exhaustion)

6.40 Release

10 Feb 23:30
Compare
Choose a tag to compare

6.40 Released 2/10/2017

  • Added templates constructors to the Ref<> and ConstRef<>
    classes so that it is now possible to do implicit
    upcasting when creating or assigning a Ref or ConstRef
    object (e.g. DataIORef x = TCPSocketDataIORef(y))
  • Added DECLARE_REFTYPES macros to the declarations of all
    classes that are subclasses of RefCountable, for convenience.
  • Integrated Mika Lindqvist's patch to qt_muscled.pro so
    that qt_muscled now includes the necessary zlib files
    under Windows.
  • Removed explicit Ref-type-casting code from a number of
    locations where it is no longer necessary.

6.38 Release

12 Jan 00:54
Compare
Choose a tag to compare

6.38 Released 1/11/2017

  • Added an Atoxll() function; it is the same as Atoull()
    except that it parses hexadecimal strings into uint64s
    rather than decimal strings.
  • hexterm now allows you to optionally specify a local port
    number to bind an otherwise transmit-only udp session to
    (e.g. "./hexterm udp=127.0.0.1:5555_6666" would send to
    port 5555 but listen for incoming packets on port 6666)
  • Fixed a bug in MessageField::IsEqualTo() that could cause
    two Message objects to be considered equivalent to each
    other when in fact they are different.

6.37 release

12 Oct 19:03
Compare
Choose a tag to compare

6.37 Released 10/12/2016

  • Added an AUTOCHOOSE_LEGACY_PRIMITIVE_KEY_TYPE_HACK for
    (DataNode *) so that the code will again compile on old
    (3.x) versions of g++ that don't support SFINAE properly.
  • HandleStandardDaemonArgs() now prints out a list of network
    interface information if the command line argument
    "printnetworkinterfaces" is supplied by the user.
  • ParseHexBytes() (and therefore any programs that depend on it,
    such as hexterm) now understands C-style escaped-control-char
    conventions, e.g. \r means carriage-return, \n means newline.
  • Added a work-around for Windows' GetAdaptersAddresses() info
    returning 255.255.255.255 as the broadcast address for an
    IPv4 interface. GetNetworkInterfaceInfos() will now detect
    when this happens and replace that address with the direct
    broadcast address for the subnet (e.g. 192.168.0.255) instead.

6.36 Release

24 Jun 15:54
Compare
Choose a tag to compare

6.36 Released 6/24/2016

  • The NetworkInterfaceInfo class now has a GetMACAddress()
    method that will return the 48-bit MAC address associated
    with the interface.
  • udpproxy will now join a UDP socket to its multicast group
    if the provided IP address is a multicast IP address.
  • Added a new function Crash() which does just what it says.
    The MCRASH macro now calls Crash() after it prints a
    stack trace.

6.35 Release

25 May 15:52
Compare
Choose a tag to compare

6.35 Released 5/25/2016

  • Revised MessageIOGateway::DoInputImplementation() so that if
    a subclass's override of UnflattenHeaderAndMessage() has retained
    a reference to its scratch-input-buffer, DoInputImplementation()
    will recognize that and refrain from trying to reuse that buffer
    as a place to store subsequent incoming Message data.
  • Added Visual Studio 15 project files (Intel and ARM versions),
    as provided by Mika Lindqvist.
  • Fixed the MuscleQThreadSocketNotifier constructor so that it
    will compile in conjunction with Qt 4.x.
  • Merged in some ARM compatibility tweaks from Mika Lindqvist.
  • Suppressed some MSVC type-conversion warnings in SetupSystem.cpp

6.34 release

14 Mar 21:28
Compare
Choose a tag to compare

6.34 Released 3/14/2016

  • Added GetQThread() accessor methods to the Thread class. These
    methods are only available when MUSCLE_USE_QT_THREADS is defined.
  • Added support for a new preprocessor flag,
    MUSCLE_ENABLE_QTHREAD_EVENT_LOOP_INTEGRATION. When this flag
    is defined, the Thread::InternalThreadEntry() will use
    QThread::exec() as its event loop rather than a simple
    while(WaitForNextMessageFromOwner()) loop. This allows for
    better integration with QObjects living inside the thread.
  • Modified the ThreadedInternalSession class in the
    qt_advanced_example to use a QTimer for its periodic messages
    when MUSCLE_ENABLE_QTHREAD_EVENT_LOOP_INTEGRATION is defined,
    rather than calling WaitForNextMessageFromOwner(), just as an
    example of what can be done with better Qt integration.
    o Replaced the Thread class's writable GetInternalSocketSet()
    method with a more user-friendly API, including new methods
    RegisterInternalThreadSocket(), UnregisterInternalThreadSocket(),
    UnregisterAllInternalThreadSockets(), and IsInternalThreadSocketReady().
    o Replaced the Thread class's writable GetOwnerSocketSet()
    method with a more user-friendly API, including new methods
    RegisterOwnerThreadSocket(), UnregisterOwnerThreadSocket(),
    UnregisterAllOwnerThreadSockets(), and IsOwnerThreadSocketReady().
  • Fixed a potential stack overflow in PlainTextMessageIOGateway::
    DoOutputImplementation().
  • Removed some unnecessary "#include <pthread.h>" directives from
    the qt_advanced_example cpp files that were causing the example
    program not to build under Windows.
  • Added an #ifdef around IPAddressAndPort::WithInterfaceIndex()
    so that code will again compile if MUSCLE_AVOID_IPV6 is defined.

6.33 release

25 Feb 18:35
Compare
Choose a tag to compare

6.33 Released 2/25/2016

  • When MUSCLE_USE_CPLUSPLUS11 is defined, the Queue class
    no longer bothers resetting values in its internal array
    to their default state, if ItemType is a trivial type.
  • When MUSCLE_USE_CPLUSPLUS11 is defined, the Hashtable class
    no longer bothers resetting values in its internal array
    to their default state, if their type (KeyType or ValueType)
    is a trivial type.
  • When MUSCLE_USE_CPLUSPLUS11 is defined, the SanitySetupSystem
    class constructor now does some basic sanity checks on the
    std::is_trivial() method to make sure it is working as expected.
  • hexterm now prints time-since-previous-received-data whenever
    it prints incoming data, for easier performance checking.
  • Added GetBuildFlags(), PrintBuildFlags() and LogBuildFlags()
    functions to SystemInfo.h so that it's easy for a MUSCLE-based
    executable to report the preprocessor flags it was built with.
    This can be handy for debugging purposes.
  • muscled now reports its build-flags at startup, if is launched
    with log level "debug" or higher (e.g. "displaylevel=debug").
  • Added a WithInterfaceIndex() convenience method to the
    IPAddressAndPort class.
  • Usage of the DetectNetworkConfigChangesSession class has
    been simplified. In particular, it is no longer necessary
    to subclass this class in order to use it; instead you can
    now just have any of your existing session or factory subclasses
    implement the new INetworkConfigChangesTarget interface, and
    the DetectNetworkConfigChangesSession will call their
    INetworkConfigChangesTarget methods when appropriate.
  • The Windows-only "console" command line argument now can take
    an optional value; e.g. console=foo.txt will cause the program's
    stdout and stderr output to be redirected to file foo.txt.
  • The Win32AllocateStdioConsole() function now takes an optional
    argument, as described above.
  • hexterm now looks for a "nojoin" command line argument when a
    multicast group is specified; if found, it will deliberately
    not join the multicast group (and become a send-only UDP session)
    o DetectNetworkConfigChangesSession::SetEnabled(false) now also
    suppresses calls to ComputerIsAboutSleep() and ComputerJustWokeUp().
    o The DECLARE_REFTYPES macro now specifies the muscle namespace
    explicitly, to make it easier to use from other namespaces.
  • Fixed an underflow bug in LogHexBytes() and friends that would
    cause 4 billion dashes to be printed if the title text was
    too long.
  • hexterm.vcproj now includes the necessary shlwapi.lib dependency