| Version 4.41 |
 |
 |
License: BSD/MIT
Updated: November 17, 2008
Source: Source Included
|
 |
 |
4.41 Release 11/17/2008
- Added an implementation of PrintHexBytes() that takes a
Queue<uint8> as an argument.
- Added GetArchiveMessageFromPool() functions to Message.{cpp,h}.
These templated convenience functions let you convert any object
(with a SaveToArchive() method) into a MessageRef with a single command.
- Added FindArchiveMessage() and FindArchiveMessageWithDefault()
template methods to the Message class, for convenient one-step
restoring of archived objects.
- Added AddArchiveMessage(), PrependArchiveMessage(), and
ReplaceArchiveMessage() template methods to the Message class,
for further convenience in archiving objects.
- GetHumanReadableTimeValues() now writes into a
HumanReadableTimeValues object instead of into a series
of by-reference int parameters. The HumanReadableTimeValues
object now also includes day-of-week and microsecond fields.
- Added an ExpandTokens() method to the HumanReadableTimeValues
class that makes it easy to generate time/date stamps of your
preferred format using various printf()-style field specifiers.
* ProxySessionFactory::IsReadyToAcceptSessions() wasn't passing
the call onto the slave session like it was supposed to. Fixed.
* The calls to open() inside SpawnDaemonProcess() now supply a
mode argument to the open() call.
* AcceptSocketsThread.cpp wasn't compiling due to a const/non-const
issue. Fixed.
* Fixed several bugs in the admin utility. Thanks to Monni for
pointing them out and supplying a patch.
|
|
|
Intel Version - requires R5 (1.8 MB) |
9 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
1 download |
|
 |
 |
|
|
 |
 |
| Version 4.40 |
 |
 |
License: BSD/MIT
Updated: October 16, 2008
Source: Source Included
|
 |
 |
4.40 Release 10/16/2008
- The Ref class now subclasses from a ConstRef class, which is the
same as Ref except that it only allows read-only access to the
held RefCountable object.
- Added a CastAwayConstFromRef() template function to RefCount.h,
so you can easily convert a ConstRef to a Ref if you really need to.
- Renamed the SocketRef class to ConstSocketRef, because it now derives
from ConstRef<Socket> instead of Ref<Socket>.
- Added a DECLARE_REFTYPES macro to RefCount.h, which you can
use to declare the standard BlahRef and ConstBlahRef typedefs
without having to specify the typedefs manually every time.
- Added implementations of the Connect() and ConnectAsync() functions
that take an IPAddressAndPort object as an argument.
- Added *_FORMAT_SPEC_NOPERCENT macros, for times when I need to
specify format specifications without the percent sign included.
- Added an AsyncDataIO class that can be used to transparently forward
I/O operations to a separate thread, to avoid blocking in your
main thread. This can be useful for DataIO classes that don't
support non-blocking I/O (e.g. FileDataIO)
- Added a GetStackTrace() function to SysLog.{cpp,h} that returns
the current stack trace as a String.
- Added GetLightweightCopyOfMessage() convenience functions to
Message.{cpp,h}.
- Added convenience methods FindFirstSessionOfType() and
FindSessionsOfType() to the ServerComponent class. These
methods are templated to let you quickly find and collect
one or more atatched session objects of the specified C++ class.
o Renamed GenericRef to RefCountableRef, for consistency.
o Renamed PolicyRef to AbstractSessionIOPolicyRef, for consistency.
o Renamed Ref::SetFromGeneric() and Ref::GetGeneric() to
Ref::SetFromRefCountableRef() and Ref::GetRefCountableRef(),
respectively, for consistency.
o testrefcount now runs a 10-second test of reference-counts in a
heavily multithreaded environment, to ensure that they are thread safe.
o Improved performance of Tuple::ShiftValuesLeft() and
Tuple::ShiftValuesRight().
* Removed re-definitions of 'true' and 'false' when compiling in C++ mode.
* Added some missing command codes to StorageReflectConstants.py.
* Message.py didn't handle B_INT32_TYPE fields properly when running on
a 64-bit host. Fixed.
* AddNewConnectSession() and Reconnect() now handle synchronous connect
failures the same way as asynchronous connect failures, so that the
calling code doesn't have to worry about two different failure modes.
* Fixed a valgrind hit in CreateAcceptingSocket() on 64-bit platforms.
* Fixed a buffer overflow bug in Message::AddToString().
* Updated the header comments to fix various doxygen warnings.
|
|
|
Intel Version - requires R5 (1.7 MB) |
24 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.7 MB) |
6 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.30 |
 |
 |
License: BSD/MIT
Updated: September 18, 2008
Source: Source Included
|
 |
 |
4.30 Released 9/18/2008
*** WARNING - THIS RELEASE CHANGES THE PulseNode API IN a NON ***
*** BACKWARDS COMPATIBLE WAY. BE SURE TO READ THE ENTRY ABOUT ***
*** PulseNode BELOW AND UPDATE YOUR CODE TO MATCH THE NEW API. ***
- ChildProcessDataIO class now has SetChildProcessInheritFileDescriptors()
and GetChildProcessInheritFileDescriptors() methods to control whether
child processes spawned should inherit the parent\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s file descriptors or
not. Note that these methods have no effect under Windows.
- When receiving UDP packets, hexterm now prints out the source of the
UDP packets it received (in addition to the data).
- Added a IsNormalized() method to the Queue class.
- Added a IsMessageDeflated() method to ZLibUtilityFunctions.h.
- Added Message::BecomeLightWeightCopyOf(const Message &), for making
lightweight copies of Messages, with shared fields.
- Added Message::ShareName() (like CopyName() except the data isn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t
copied, rather only a reference is shared)
- Added Queue::AddHeadAndGet() and Queue::AddTailAndGet() methods,
for when you want to add an item to a Queue and then write to the
added object directly afterwards.
- Added an optional (retPort) argument to
MessageTransceiverThread::PutAcceptFactory() so that you can now
use dynamic port assignment with it.
o PulseNode::GetPulseTime() and PulseNode::Pulse() now take a single
(const PulseArgs &) argument instead of two uint64s. This makes
implementing the PulseNode interface less verbose, and calling
the Pulse callbacks more efficient. However, this breaks compatibility
with earlier code that expects (uint64, uint64) arguments for those
methods, so be sure to update your code when upgrading to this
version of MUSCLE.
o Fixed some compiler warnings under gcc (thanks to Monni for pointing
these out)
o Trying to use MUSCLE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s logging system when there is not a SetupSystem
object on the stack (e.g. before or after main()) is no longer a fatal error.
Instead, muscle will degrade to output only to the built-in log services
(stdout and/or output-to-file) when called under these conditions.
|
|
|
Intel Version - requires R5 (1.7 MB) |
40 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.7 MB) |
8 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.28 |
 |
 |
License: BSD/MIT
Updated: August 26, 2008
Source: Source Included
|
 |
 |
4.28 Released 8/26/2008
- Added a RefCount::IsDeeplyEqualTo() method for more in-depth
comparison-by-value of the referenced items. (The regular RefCount::==
operator only compares the pointers, not the items themselves)
- Added a Directory class (util/Directory.{cpp,h}) to support directory
scanning in a cross-platform-compatible fashion.
- Added a FilePathInfo class (util/FilePathInfo.h) to support
stat() functionality in a cross-platform-compatible manner.
- ReflectServer::SetSignalHandlingEnabled() now enables/disables
handling of console signal events (Ctrl-C, etc) under Win32.
- Added implementations of GetMessageFromPool() that take a
pointer and a byte-count and try to return a Message that has
been unflattened from the specified byte array.
- ChildProcessDataIO::LaunchChildProcess() now takes an optional
boolean (usePty) argument that allows you to specify at runtime
whether you want to use fork() or forkpty() to launch the child
process.
- Added a MUSCLE_AVOID_FORKPTY compiler flag that tells the
ChildProcessDataIO class to avoid compiling in calls forkpty().
o Made the AbstractReflectSession::EndSession() method virtual.
o The Win32 build of MUSCLE now #includes winsock2.h instead of winsock.h.
* The Win32 implementation of StdinDataIO wasn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t handling a closed
stdin connection correctly. Fixed.
* For the Win32 build, added Microsoft\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s recommended work-around for
the WSAECONNRESET problem with UDP sockets, as described at
http://support.microsoft.com/kb/263823/en-us
* Fixed the Hashtable and Queue classes to again compile under
Visual C++ 6.0 (thanks to Mika Lindqvist for the patch)
|
|
|
Intel Version - requires R5 (1.7 MB) |
26 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.7 MB) |
6 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.27 |
 |
 |
License: BSD/MIT
Updated: July 24, 2008
Source: Source Included
|
 |
 |
4.27 Release 7/24/2008
- minichatclient.c now advertises the client\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s host OS on the server.
- PrintStackTrace() is now implemented under MacOS/X (Leopard or newer).
- PrintStackTrace() and all implementations of PrintToStream()
now take an optional (FILE *) argument, so that they can now
print to places other than stdout if you prefer.
- The testchildprocess test program now has you specify the number
of child process instances to run. That makes it easier to test
what happens when many child processes are launched in parallel.
o Merged in some more of Mika Lindqvist\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s Haiku compatibility tweaks.
o Hashtable::GetByDefault() with one parameter now returns its result
by reference instead of by value.
o The Hashtable and Queue classes now keep default instances of
their user types, to avoid having to construct temporary default
objects when resetting objects to their default state.
* PrintStackTrace() now prints appropriate error messages if
it fails, instead of just failing siliently.
* Fixed a syntax error in Hashtable::Remove(const Hashtable &)
* Hashtable::Clear() now handles re-entrancy (from the templatized
classes\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' assignment operators) correctly.
|
|
|
Intel Version - requires R5 (1.7 MB) |
22 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.7 MB) |
6 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.26 |
 |
 |
License: BSD/MIT
Updated: June 5, 2008
Source: Source Included
|
 |
 |
4.26 Released 6/5/2008
- Added a CheckedGetItemPointer() method to the Ref class.
This method is the same as GetItemPointer(), but with
an additional check so that it will safely return NULL
if the \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"this\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" pointer is NULL.
- Added a \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"assumeDefaultValue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" argument to the NumericQueryFilter,
StringQueryFilter, and RawDataQueryFilter classes. This
argument lets you specify that in the event that a Message
doesn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t contain the data item the QueryFilter wants to
compare against, a default value should be compared against
instead.
- Added a HashCode() method to the Ref class, for consistency.
- ChildProcessDataIO::GetChildProcessID() is now implemented
under Windows as well.
- Added two new conditional defines to MuscleSupport.h:
MUSCLE_USING_OLD_MICROSOFT_COMPILER, which is defined when
compiling under VC++6 or earlier, and
MUSCLE_USING_NEW_MICROSOFT_COMPILER, which is defined
when compiling under VC++.net(2003) or later. These make
managing Microsoft\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s bug circus a bit a easier.
* Fixed the Ref class to compile under MSVC2005 again.
* Fixed the setsockopt()/getsockopt() calls in NetworkUtilityFunctions.cpp
so that they again compile under Windows.
* Merged in Mika Lindqvist\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s patches so that muscle compiles
properly under Haiku.
|
|
|
Intel Version - requires R5 (1.8 MB) |
25 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
9 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.25 |
 |
 |
License: BSD/MIT
Updated: May 14, 2008
Source: Source Included
|
 |
 |
4.25 Released 5/14/2008
- Added a DECLARE_HASHTABLE_KEY_CLASS macro that expands
to the boilerplate template code necessary to use the
specified class as a key in a Hashtable.
- Added a DECLARE_HASHTABLE_KEY_CLASS_IN_NAMESPACE macro
which is the same as DECLARE_HASHTABLE_KEY_CLASS except
it works from within namespaces other than muscle.
- Added PutIfNotAlreadyPresent() convenience methods to the
Hashtable class.
- Added CopyFrom() method to the Queue and Hashtable classes.
These work the same as the assignment operator, except that
they return a status_t result code.
- Added a SetFilter() method to the PathMatcherEntry class.
o Cleaned up the setsockopt() and getsockopt() calls inside
NetworkUtilityFunctions.cpp to be more portable.
* ExplandLocalhostAddress() is now more careful not to expand
(localhostIP) back into (localhostIP), even if that is the
first IP address listed in the interfaces list.
* Fixed a bug in the QueryFilter subscriptions feature --
after replacing a subscription\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s existing QueryFilter,
the old QueryFilter would continue to be used instead
of the new one.
|
|
|
Intel Version - requires R5 (1.8 MB) |
26 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
9 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.24 |
 |
 |
License: BSD/MIT
Updated: April 28, 2008
Source: Source Included
|
 |
 |
4.24 Released 4/28/2008
- If MUSCLE_USE_LIBRT and _POSIX_MONOTONIC_CLOCK are defined,
GetRunTime64() and Snooze64() will now use librt\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s high-resolution
functions (clock_gettime() and clock_nanosleep()) instead of
the older vanilla POSIX functions. This can provides higher
resolution timing on platforms that support librt.
- Added a new ExecuteSynchronousMessaging() virtual method
to the AbstractMessageIOGateway class, and some associated
hook/callback methods. This method lets you easily do
synchronous/RPC-style \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"function calls\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" across the gateway\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
socket, passing in one or more Message objects as the
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"arguments\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\", and receiving one or more Messages as \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"results\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\".
- MessageIOGateway now overrides ExecuteSynchronousMessaging(),
IsStillWaitingForSynchronizedReply(), and
SynchronousMessageReceivedFromGateway() so that when you
call ExecuteSynchronousMessaging() on it you will get
proper RPC function-call semantics.
- Added an IsReadyToAcceptSessions() virtual method to the
AbstractReflectSessionFactory class. Subclasses can override
this method to return false if they don\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t want to accept
any more connections for a while.
- Added an IsConnected() method to the AbstractReflectSession
class, to make it easier to check if a given session is
currently connected to anything or not.
- Added an XorDataIO class to the dataio folder.
XorDataIO XOR\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s all the data going through it, before
forwarding the method call to its held child DataIO object.
- Added a MutexGuard class that you can put on the stack
to automatically lock/unlock a Mutex via its ctor/dtor.
- Added versions of ReadZipFile() and WriteZipFile() that
take a DataIO reference instead of a file name. That way
you can read zip files over the network, through custom
filters, and so on, if you want to.
zlib/ZipFileUtilityFunctions.{cpp,h}.
- ReadZipFile() now has an optional second argument called
(loadData). Setting it false will cause ReadZipFile to
only read in the file names and uncompressed file lengths,
but not actually read or uncompress the file data. This
is useful if you just want to quickly check the zip file\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
contents without actually unpacking everything.
- Updated testzip.cpp to accept an optional \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"namesonly\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
command line argument, which will set (loadData) to
false in its ReadZipFile() call, as described above.
- Added a GetNetworkInterfaceAddresses() function, as an
easier-to-use alternative to GetNetworkInterfaceInfos().
o Made AbstractReflectSession::IsConnectingAsync() public.
o Moved Snooze64() from NetworkUtilityFunctions.cpp to
SetupSystem.cpp, and moved its function declaration from
NetworkUtilityFunctions.h to TimeUtilityFunctions.h.
* Joel Lucsy reported a bug in FlattenToDataIO() that would cause
the last four bytes of the flattened buffer not to be written
to the DataIO object. Fixed.
* Updated zlib\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s included VC++ project files to reference zconf.h
in its new location (zlib/win32/zconf.h) so that they now work
again.
|
|
|
Intel Version - requires R5 (1.8 MB) |
25 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
5 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.23 |
 |
 |
License: BSD/MIT
Updated: March 26, 2008
Source: Source Included
|
 |
 |
4.23 Released 3/26/2008
- Added an UnparseArgs() function to MiscUtilityFunctions.{cpp,h}.
This function takes a parsed Message and turns it back into a String.
- Added an InsertItemsAt() method to the Queue class.
- Added an (includeLocalhost) boolean argument to GetNetworkInterfaceInfos().
- Made ServerComponent::SetOwner() and ServerComponent::GetOwner()
public, as it is necessary for classes other than ReflectServer
to access that value in order to properly support the facade
pattern within ReflectSessionFactory objects.
- Added a ProxySessionFactory class to support facade-style
ReflectSessionFactories better.
- Added an optional ITraversalPruner argument to both
StorageReflectSession::SaveNodeTreeToMessage() and
StorageReflectSession::RestoreNodeTreeFromMessage(). This
argument lets the caller specify a callback argument that
can direct the traversal based on custom logic, if necessary.
o Replaced StorageReflectSession::CloneDataNodeSubtree()\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s rather clunky
MessageReplaceFunc and void-pointer filtering mechanism with the nicer
and more powerful ITraversalPruner filtering mechanism.
* Fixed a bug in FilterSessionFactory and SharedFilterSessionFactory
where an assertion failure would occur if the \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"slave\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" factory attempted
to call GetSessions(), etc.
* SharedFilterSessionFactory\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s IP-address checking was broken. Fixed.
* AbstractReflectSession::GetPort() was broken and would always
return 0. Fixed.
|
|
|
Intel Version - requires R5 (1.8 MB) |
25 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
2 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.21 |
 |
 |
License: BSD/MIT
Updated: January 22, 2008
Source: Source Included
|
 |
 |
v4.21 Released 1/22/2008
- Optimized Hashtable::GetOrPut(), CopyToTable(), MoveToTable(),
Put(), and Remove() to be more efficient.
o Updated the muscle.dox DOxygen file to reflect changes to
newer versions of DOxygen
* Hashtable::Put() and Hashtable::Remove() now do the right
thing if they are passed (*this) as an argument.
* Fixed a nasty bug in the ObjectPool destructor that would
cause it to go into an infinite loop, calling delete on
the same array over and over again.
* Filled in and fixed up the DOxygen comments to the point where
DOxygen no longer gives any warnings when generating the autodocs.
o Updated all copyright notice headers to read 2000-2008 Meyer Sound.
|
|
|
Intel Version - requires R5 (1.8 MB) |
38 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
10 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.20 |
 |
 |
License: BSD/MIT
Updated: December 31, 2007
Source: Source Included
|
 |
 |
v4.20
- Added an optional set of multicast networking API calls
to util/NetworkUtilityFunctions.h. Define the constant
MUSCLE_ENABLE_MULTICAST_API to make them available.
- hexterm will now automatically use multicast UDP if you
specify a multicast UDP address as an argument. For example,
./hexterm udp=239.255.1.2:4001
- Added SetSourceExclusionID() and GetSourceExclusionID()
methods to the PacketTunnelIOGateway class, to enable more
efficient filtering of looped-back broadcast/multicast packets
that you sent out and don\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t want to see back again.
- Added a ParseHexBytes() function to MiscUtilityFunctions.{cpp,h}
- Under Linux, HandleStandardDaemonArgs() now takes a new argument
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"debugcrashes\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" which will cause a signal handler to be installed
that will catch SIGSEGV, SIGBUS, SIGILL, SIGABRT, and SIGFPE,
and print a stack trace to stdout before exiting.
- Added RemoveFirst() and RemoveLast() convenience methods
to the Hashtable class (handy when using the Hashtable as
a keyed FIFO or LRU)
o Moved the PrintHexBytes() function into system/SetupSystem.cpp
so that you don\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t have to link in MiscUtilityFunctions.cpp
just to use it.
* Tweaked FinalizeAsyncConnect() to work properly under BeOS.
|
|
|
Intel Version - requires R5 (1.8 MB) |
31 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
11 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.11 |
 |
 |
License: BSD/MIT
Updated: December 11, 2007
Source: Source Included
|
 |
 |
v4.11 Released 12/11/2007
- GetHumanReadableTimeString() and ParseHumanReadableTimeString()
now handle the uint64 value MUSCLE_TIME_NEVER as a special case,
by translating it into the string \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"(never)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" (and back).
- Added a CalculateChecksumForUint64(), CalculateChecksumForFloat(),
and CalculateChecksumForDouble() convenience functions to
MuscleSupport.h
- Added a FindFirstMatchingNode() method to the DataNode class,
which can be used to efficiently look up a descendant node
based on a relative or absolute path, with or without wildcard
matching characters.
- Added a GetRootNode() convenience method to the DataNode class
which returns the root node of the DataNode tree.
- Added SetAllowMiscIncomingData() and GetAllowMiscIncomingData()
methods to the PacketTunnelIOGateway class, so that a UDP socket
controlled by a PacketTunnelIOGateway can optional receive
individual (non-packetized) arbitrary UDP packets as well as
the packetized kind. This mode is disabled by default.
- Added a Normalize() method to the Queue class that can be used
to ensure that the Queue\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s contents are layed out contiguously
in memory (like a C array).
- Added a AddNewDormantConnectSession() method to the ReflectServer
and ServerComponent classes. This method is the same as
AddNewConnectSession() except that the added session will not
start a TCP connection immediately; instead it will hang out
and wait for you to call Reconnect() on it.
- Added a PrintHexBytes() convenience/debugging function to
MiscUtilityFunctions.h
o Removed the (countFieldOrder) argument from the
Message::CalculateChecksum() method.
o Changed instances of ((uint32)-1) literals to the more proper
MUSCLE_NO_LIMIT constant in a number of places.
o Rewrote StorageReflectSession::GetDataNode() as a simple
inline call-through to FindFirstMatchingNode(), which means
that GetDataNode() now supports wildcard matching.
o GetHumanReadableTimeValues() now returns B_ERROR if you pass
it MUSCLE_TIME_NEVER as a time value (since there is no good
numeric way to represent infinity).
o DataNode::PrintToStream() and Message::PrintToStream()
no longer print this-pointer values in their debug output,
because doing so makes it harder to diff state dumps
from different processes.
o AbstractReflectSession::Reconnect() and SetAutoReconnectDelay()
can now be used in conjunction with sessions that were not
added with AddNewConnectSession() also. In this context, they
will \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"reconnect\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" the session by destroying its gateway and
DataIO objects and creating new ones by calling
CreateDefaultSocket() and CreateDataIO().
* system/AcceptSocketsThread.h was missing a necessary #include
line. Thanks to Mika Lindqvist for reporting this.
* Fixed a bug in DataNode::InsertOrderedChild() that could cause
the inserted child\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s node name not to be unique in some
circumstances.
* DataNode::PutChild() now takes a (const DataNodeRef &) instead
of a (DataNodeRef &).
* Removed the index-order multiplication from most implementations
of CalculateChecksum(), since including an index-multiplier
in the checksum makes it inefficient to update a running
checksum tally when inserting or removing items in the list.
* The Thread class now closes the internal thread\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s side of
the inter-thread socket connection when the internal thread
hook function exits. That way the main thread can be notified
that the child thread has gone away (the main thread\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s socket
will select() ready-for-read because of the socket close)
|
|
|
Intel Version - requires R5 (1.8 MB) |
29 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.8 MB) |
5 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.10 |
 |
 |
License: BSD/MIT
Updated: October 30, 2007
Source: Source Included
|
 |
 |
- Added Bryan Varner\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s MicroMUSCLE port to the archive, in
the new java_j2me folder. MicroMUSCLE is a fork of the
MUSCLE Java code that is compatible with the J2ME edition
of Java being used on modern cell phones, etc. Unlike
the standard MUSCLE Java API, this version doesn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t require
Java 1.4.x APIs to be supported.
- Added a GetNumberOfProcessors() function to the SystemInfo.h
API. You can call this to find out how many CPU cores the
computer you are running on has.
- Made LockLog() and UnlockLog() part of the public MUSCLE
syslog API, in case you want to use the log mutex in your
own critical section.
- Added a CalculateChecksum() utility function to MuscleSupport.h
- Added CalculateChecksum() functions to the String, ByteBuffer,
Point, Rect, Message, and DataNode classes. These methods
compute a quick checksum on the object\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s contents which can
then be used for sanity-checking later on.
- Added a PrintToStream() method to the DataNode class for
quick recursive dumping of database subtrees to stdout.
- Message::PrintToStream() and Message::ToString() now include
the checksum value of the Message.
- Added IsInBatch() and IsOutermost() methods to the NestCount
class, for convenience and code clarity. (Before they were
only present in the NestCountGuard class)
- Added a KillChildProcess() method to the ChildProcessDataIO
class, for times when you need the child process dead right
away but you want to keep the socket to it open (so that it
will error out as if the child process died of its own accord).
- Added IsDescendantOf() and IsAncestorOf() convenience methods
to the DataNode class.
- Added a StringCompareFunc() override to String.h that takes
(const String *)\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s as arguments. Useful when you want to
save space in a Hashtable of string-keyed, ref-counted
objects, by changing the key-type to a pointer to a string
that is held in the referenced value-objects.
- Added a Message::FindString() method override that sets a
pointer-to-a-String, so that you can access the underlying
String object without having to copy it.
- Added a ServerComponent::GetSession() override that takes
a uint32 for the session ID argument.
- Added convenience versions of StringMatcher::Match()
and HasRegexTokens() that take a String argument instead
of a (const char *).
- Added a GetEmptyMessageRef() convenience function to
Message.h. It\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s like GetEmptyMessage() except it returns
a (const MessageRef &) instead of a (const Message &).
- The StdinDataIO class now works as expected under Windows.
In particular, it implements some backstage trickery so that
you can use its GetSelectSocket() return value in select()
even though Windows doesn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t support doing that.
o Removed GetBlankMessage() from the StorageReflectSession
API. Use GetEmptyMessageRef() instead.
o DataNode::GetData() now returns a (const MessageRef &)
instead of a MessageRef.
o The GetSessions() method now returns a Hashtable instead
of a HashtableIterator.
o The GetNumSessions() method has been removed; use
GetSessions().GetNumItems() instead.
o The GetFactories() method now returns a Hashtable instead
of a HashtableIterator.
o The GetNumFactories() method has been removed; use
GetFactories().GetNumItems() instead.
o Tweaked some of the code to avoid new warnings in gcc 4.1.x
o The SetDataNode(), FindMatchingSessions(), CloneDataNodeSubtree(),
NotifySubscribersThatIndexNodeChanged(), NodeIndexChanged(),
GetNewDataNode(), and JettisonOutgoingSubtrees() methods
in the StorageReflectSession class not take String arguments
instead of (const char *)
o The InsertOrderedChild(), ReorderChild(), HasChild(),
GetChild(), and RemoveChild() in the DataNode class now all
take String arguments instead of (const char *).
o DataNode::GetPathClause() now returns a (const String *)
instead of a (const char *).
o FilterSessionFactory Put*Pattern() and Remove*Pattern()
methods now take (const String &) arguments instead of
(const char *).
o The StdinDataIO class no longer derives from the
FileDescriptorDataIO class. This way it is possible to
use StdinDataIO under Windows (which doesn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t support
file descriptors).
o Moved the StdinDataIO code into its own separate StdinDataIO.cpp
file, to better hide the ugly Windows implementation.
* Fixed a VC++ compatibility issue in ObjectPool.h. Thanks to
Mika Lindqvist for reporting this problem.
* Fixed a bug in AcceptSocketsThread.cpp. Thanks to Mika
Lindqvist for reporting this problem also.
* Fixed a HANDLE leak in the Windows implementation of the
RS232DataIO and ChildProcessDataIO classes.
|
|
|
Intel Version - requires R5 (1.7 MB) |
38 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.7 MB) |
14 downloads |
|
 |
 |
|
|
 |
 |
| Version 4.00 |
 |
 |
License: BSD/MIT
Updated: October 3, 2007
Source: Source Included
|
 |
 |
v4.00 Release 10/03/2007
*** WARNING - THIS RELEASE RATIONALIZES SEVERAL APIS AND THUS ***
*** BREAKS SOURCE COMPATIBILITY WITH MOST OLD CODE. DONT ***
*** UPGRADE TO THIS RELEASE UNLESS YOU ARE WILLING TO UPDATE ***
*** YOUR CODEBASE TO MATCH. ***
- Added a SanitySetupSystem class to the CompleteSetupSystem
object. SanitySetupSystem just does some very quick tests
on the typedef sizes (int16, int32, etc) and endian-ness
of the compiled code to make sure that the code\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s build
settings are compatible with the run-time environment.
If any of the tests fail, it prints out a stern error
message and aborts the program.
- Added convenience methods for AddFlat(), PrependFlat(),
FindFlat(), and ReplaceFlat() to the Message class that
take a ByteBufferRef as an argument. That way you can
deal with Messages and ByteBufferRefs without always
having to look up how to cast a ByteBufferRef to a
FlatCountableRef and back.
- Added HasChars() and IsEmpty() convenience methods
to the String class, for consistency with the other
container classes.
- Rewrote the ObjectPool class to do its object allocations
in 8 kilobyte \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"slabs\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" rather than one at a time.
This cuts down on the number of calls to new/delete
by an order of magnitude.
- Added a -DMUSCLE_POOL_SLAB_SIZE build option in case
you want the ObjectPools to use a different slab size.
This value is specified in bytes.
- Added an ExitWithoutCleanup() function to
MiscUtilityFunctions.{cpp,h}, which is equivalent to
_exit(). This wrapper function exists because I
suspect _exit() may not be entirely portable.
- Added a \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"testpool\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" program to the tests folder to
measure the relative efficiency of various
object-allocation techniques.
- AbstractReflectSession::GetSessionIDString() now returns
a (const String &) instead of a (const char *).
- Added a GetSessionID() accessor to AbstractReflectSession.
- Added a CreateDefaultSocket() method to the
AbstractReflectSession class. This method is called
when AddNewSession() is passed a null SocketRef, and
if implemented to return a non-NULL SocketRef, can be
used to provide a default socket for the session.
o Renamed the SocketHolderRef class to Socket.
o Added the a SocketRef class (which subclasses Ref<Socket>)
o All MUSCLE functions that previously dealt with sockets
as integer file descriptors now use the new SocketRef
type instead. This way there is no chance of leaking or
double-freeing allocated sockets.
o Removed the CloseSocket() function from the API, since
it is no longer necessary.
* Changed the static casts in StorageReflectSession.cpp
to dynamic_cast<>, so that ReflectServers holding some
sessions derived from StorageReflectSession and some
derived directly from AbstractReflectSession will now
work without crashing.
o Removed GetDataIORef() and GetGatewayRef(), and changed
GetDataIO() and GetGateway() to return references to Ref
objects instead of pointers to objects.
o AbstractReflectSession::CreateDataIO() now takes a
(const SocketRef &) argument instead of an int, and now
returns a DataIORef instead of a (DataIO *)
o AbstractReflectSession::CreateGateway() now returns an
AbstractMessageIOGatewayRef instead of a
(AbstractMessageIOGateway *)
o ReflectSessionFactory::CreateSession() now returns an
AbstractReflectSessionRef instead of a (AbstractReflectSession *)
o StorageReflectSession::GetNewDataNode() now returns a
DataNodeRef instead of a (DataNode *). This way any
chance of a memory leak is avoided.
o StorageReflectSession::ReleaseDataNode() has been
removed since it is no longer necessary.
o RefCountable\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s copy constructor no longer copies the
_manager pointer, since items allocated in one ObjectPool
can no longer be freed by a different ObjectPool.
o MessageTransceiverThread::CreateSupervisorSession() now
returns a ThreadSupervisorSessionRef instead of a
(ThreadSupervisorSession *)
o MessageTransceiverThread::CreateDefaultWorkerSession()
now returns a ThreadWorkerSessionRef instead of a
(AbstractReflectSession *)
o MessageTransceiverThread::CreateDefaultSessionFactory()
now returns a ThreadWorkerSessionFactoryRef() instead of
a (ReflectSessionFactory *).
o ThreadWorkerSessionFactory::CreateThreadWorkerSession()
now returns a ThreadWorkerSessionRef instead of a
(AbstractReflectSessionRef *).
o The MessageTransceiverThread::AddNew*Session() family
of methods now take a (const ThreadWorkerSessionRef &)
argument instead of (const AbstractReflectSessionRef &).
o The MessageTransceiverThread::PutAcceptFactory() family
of methods now take a ThreadWorkerSessionFactoryRef
argument instead of a ReflectSessionFactory.
o MessageTransceiverThread::CreateReflectServer() now
returns a ReflectServerRef instead of a (ReflectServer *).
o The ReflectServer class now derives from RefCountable
and has an associated ReflectServerRef typedef.
o Removed the SetOkayToClose*() methods from the
MessageTransceiverThread class, as they are no longer
necessary.
* BecomeDaemonProcess() now calls ExitWithoutCleanup()
instead of exit(), to avoid crashing the parent process
in the globals-cleanup phase (since the CompleteSetupSystem
object destructor never gets a chance to run).
* Replaced all calls to exit() with calls to
ExitWithoutCleanup().
* Tweaked FileDescriptorDataIO to compile correctly on
64-bit systems.
* Fixed typedefs of int32/uint32 for the PPC64 platform.
* Fixed typedef of muscle_socklen_t on PPC64
* ZipFileUtilityFunctions.cpp was calling newnothrow to
allocate an array. Changed it to call newnothrow_array
instead.
* RefCount::SetFromGeneric() would return B_NO_ERROR if
you tried to call SetFromGeneric(NullRef()), but it
wouldn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t actually change the state of the Ref that
you called it on. It now sets the state to NULL in
that case.
* AtomicCounter.h now uses the public QAtomicInt API
when compiled with Qt 4.4.0 or higher. (When compiling
with Qt 4.0.0 through 4.3.x, it will still use the old
private atomic API)
* Applied some tweaks to MuscleSupport.h for better
MacOS/X Leopard compatibility.
* Tweaked SharedMemory.h to compile on MacOS/X Leopard.
|
|
|
Intel Version - requires R5 (1.6 MB) |
36 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.6 MB) |
13 downloads |
|
 |
 |
|
|
 |
 |
| Version 3.40 |
 |
 |
License: BSD/MIT
Updated: September 6, 2007
Source: Source Included
|
 |
 |
v3.40 Released 9/6/2007
- Added experimental IPv6 support. To use MUSCLE with
IPv6, compile your code with the -DMUSCLE_USE_IPV6
flag. The new typedef ip_address will then be compiled
as a 128-bit datatype (the new ip_address class) instead
of being typedef\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'d to uint32.
- Added a new PacketTunnelIOGateway class that is useful
for \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"tunneling\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" arbitrarily large Messages over a
packet-based protocol with a smaller maximum packet
size (e.g. UDP). The PacketTunnelIOGateway class
will packetize large Messages and reconstruct them
from the fragments at the other end.
- Added SetAutoReconnectDelay() and GetAutoReconnectDelay()
methods to the AbstractReflectSession class. You can use
these to easily configure your AbstractReflectSession to
automatically reconnect itself after its connection to
the server has been broken.
- Added a new, optional (autoReconnectDelay) to all the
AddNewConnectSession() methods in MessageTransceiverThread,
QMessageTransceiverTherad, ServerComponent, and
ReflectServer. If specified, this argument will cause
SetAutoReconnectDelay() to be called on the new session.
- Added a new PacketizedDataIO class that can be used
to \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"wrap\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" a streaming DataIO class (e.g.
TCPSocketDataIO) and make it act more like a
packet-style DataIO class (e.g. UDPSocketDataIO).
- Accept() now has an optional second argument, which
will return the IP address of the interface that
a connection was accepted on.
- Added a new IPAddressAndPort class which is handy
for encapsulating an IP address and port number
together in the same object.
- PutAcceptFactory() and RemoveAcceptFactory() now
accept optional local interface IP address arguments
so that you can specify that connections to the
server should only be accepted on a certain
interface, if that\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s what you want.
- PutAcceptFactory() now accepts an optional (retPort)
argument which you can use to find out which port
the factory was installed on.
- PutAcceptFactory() now puts its connection-accepting
socket into non-blocking mode so that the server
can\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t ever block inside Accept().
- Added a GetLocalInterface() method to the
ReflectSessionFactory class so you can see which
interface(s) that factory is associated with.
- Added some more convenience methods to the Hashtable
class: versions of GetNextKey(), PeekNextKey(),
GetNextValue(), and PeekNextValue() that take
a pointer-reference as their sole argument.
- ReflectSessionFactory objects are now auto-assigned
a globally unique ID number when they are created.
This number can be accessed by calling
ReflectSessionFactory::GetFactoryID().
- Added a simple portscan utility (called \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"portscan\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
to the tests folder.
- Added a GetChildProcessID() method to the
ChildProcessDataIO class, which returns the child
process\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s process ID (pid).
- Added a ByteBufferDataIO class that lets you read/write
ByteBuffer objects using the DataIO interface (as if
they were files).
- Added GetFirstFieldNameString() and GetLastFieldNameString()
convenience methods to the Message class, so that
you don\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t need to set up a MessageFieldNameIterator
just to get a single field out of the Message.
- Added a GetSourceOfLastReadPacket() method to the
UDPSocketDataIO class, so that you can find out after a
Read() call where the data you just read came from.
- Added a SetSendDestination() method to the
UDPSocketDataIO class, so that you can have Write()
call sendto() instead of send() if you prefer.
- Added a GetSendDestination() method to the
UDPSocketDataIO class.
- Added a testpacketio test to the tests folder, to
unit-test the PacketizedDataIO class.
- Added a testpackettunnel test to the tests folder,
to unit-test the PacketTunnelIOGateway class.
- Added a NestCount convenience class to the util
folder. This simple class handles some of the
drudge work associated with tracking recursion
levels of recursive function calls.
- Added a Reposition() method to the Hashtable class
that can be used to manually update the position
of an auto-sorted-by-value entry that has been
modified in-place.
- Added MoveToTable() and CopyToTable() convenience
methods to the Hashtable class.
- Made some minor optimizations to the auto-sort-by-value
code in the Hashtable class.
o Removed the MemoryBufferDataIO class, since it
was not very useful or well designed.
o Changed the MessageTransceiverThread class\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
GetNextEventFromInternalThread() method so that
it passes back the ReflectSessionFactory\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s ID
(as a uint32) instead of its port number (as a
uint16). This was done because port numbers
are no longer unique identifiers for session
factories.
o Changed the ReflectSessionFactory::CreateSession()
method to take different arguments (note that this
will break old code that defined its own
ReflectSessionFactory subclasses! That code will
need to be updated to use the new arguments)
o The NetworkInterfaceInfo class\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s GetName() and
GetDescription() methods now return references to
String objects, instead of character pointers.
o Moved the declaration of Inet_NtoA() from
MiscUtilityFunctions.h to NetworkUtilityFunctions.h.
o Removed the GetLocalIPAddress() function from
NetworkUtilityFunctions.{cpp,h}, as it is redundant
with (and less useful than) the new
GetNetworkInterfaceInfos() function.
o Removed the GetPort() method from the
ReflectSessionFactory class, since factories are
no longer necessarily associated with exactly
one port number.
* The final argument to the CreateAcceptingSocket()
function in NetworkUtilityFunctions.h was documented
incorrectly. It lets you specify the IP address of
a local interface, not a client\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s IP address.
* The final argument to the SetPort() function in
AcceptSocketsThread.h was documented incorrectly.
It lets you specify the IP address of a local interface,
not a client\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s IP address.
* Fixed a bug in ReflectServer\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s ReflectSessionFactory
design that caused muscled not to work correctly if
you told it to listen to more than one port at once.
* Added an #ifdef to NetworkUtilityFunctions.cpp so
that it will compile cleanly on BeOS/R5.0.3
* HashtableIterator::GetValue() was returning a const
reference. Changed it to return a non-const reference,
since there\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s no reason why you shouldn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t be able to
modify the returned object.
* Fixed a bug where calling PutAcceptFactory() with
the port argument set to zero would cause all already
attached accept-factories to be removed.
* Fixed a minor bug in the ReflectServer event loop,
where the fd_sets would be inspected after select()
returned -1/EINTR. This could cause spurious
(albeit generally harmless) read-ready or
write-ready events to be detected.
* The assignment operator, equality operator,
ContainsValue(), and the batch Put() and Remove()
methods in the Hashtable class now specify the
HTIT_FLAG_NOREGISTER flag in their HashtableIterator
objects, for better thread safety.
|
|
|
Intel Version - requires R5 (1.6 MB) |
30 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.6 MB) |
17 downloads |
|
 |
 |
|
|
 |
 |
| Version 3.33 |
 |
 |
License: BSD/MIT
Updated: June 6, 2007
Source: Source Included
|
 |
 |
v3.33 Released 6/6/2007
- Added a MultiDataIO class, for convenient writing of
mirrored files, etc.
- Added a qtsupport/QMuscleSupport.h header file to
contain Qt-specific utility/helper code. Currently
this file contains only a QString specialization of
the HashFunctor template, to allow QStrings to be
used as keys in a Hashtable.
* SetupSystem.cpp builds again under BeOS (worked around
BeOS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s non-standard gmtime_r() call)
* Merged in Lior Okman\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s patch to the Java client code
to fix a bug where partially received Messages might
get dropped, causing a TCP disconnect.
* Added a loop around the Unix implementation of
SharedMemory::AdjustSemaphore()\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s call to semop(),
so that if semop returns EINTR, the call is retried.
|
|
|
Intel Version - requires R5 (1.6 MB) |
42 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.6 MB) |
15 downloads |
|
 |
 |
|
|
 |
 |
| Version 3.32 |
 |
 |
License: BSD/MIT
Updated: May 2, 2007
Source: Source Included
|
 |
 |
v3.32 Release 5/2/2007
- Added a new class, SharedFilterSessionFactory, which looks
at the contents of a shared memory region to decide which
client IP address(es) to allow to connect to the server.
- Added a IsIPAddress(const char *) convenience method
to NetworkUtilityFunctions.{cpp,h}. This method returns true
iff its argument is a string representing an IP address
in human-readable ASCII format.
- Added a new function GetNetworkInterfaceInfos() to
NetworkUtilityFunctions.{cpp,h}. This function returns
a list of NetworkInterfaceInfo objects describing the
various network interfaces currently available on the
host machine.
- tests/testnetutil.cpp Now tests GetNetworkInterfaceInfos()
by calling it and printing out the results.
- Added a new argument (emitEndMessageBatchIfNecessary)
to the QMessageTransceiverHandler::Reset() and
QMessageTransceiverThread::UnregisterHandler() methods, so
that if these methods are called while in the middle of a
receiving-Messages batch, the un-registering of the handler
will no longer cause an imbalance between the number of
BeginMessageBatch() and EndMessageBatch() signals that
get emitted by the handler. (You can override this behavior
by passing in false for the new argument)
- The muscle/java/build.xml file now builds JavaDocs too.
o AbstractReflectSession::GetHostName() now returns a
(const String &) instead of a (const char *).
* Fixed a bug in SharedMemory::DeleteArea() that was
preventing the shared memory area\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s semaphore from
being deleted.
* Rewrote the linked-list handling code in the
QMessageTransceiverThread class to use a doubly-linked-list.
This fixes a bug where the previous singly-linked-list
would occasionally not get updated properly, resulting
in the failure to emit EndMessageBatch signals in some
circumstances.
* The GlobalMemoryAllocator class now calls AboutToFree()
if AboutToAllocate() succeeded but malloc() or realloc()
failed. That way AboutToFree() can undo AboutToAllocate()\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s
side effects in the usual fashion.
* The SharedUsageLimitProxyMemoryAllocator class would
deduct a buffer\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s memory size from the tally twice in
the event of a memory failure. Fixed.
* The SharedUsageLimitProxyMemoryAllocator class now detects
when a program tries to reduce its memory usage counter to
less than zero, and clamps the counter to zero instead of
letting it wrap around to the 4 gigabyte range.
* The GlobalMemoryAllocator class now calls SetAllocationHasFailed()
on the MemoryAllocator object only if the second try to
allocate memory has also failed. That way, if the first try
fails, but the MemoryAllocator\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s AllocationFailed() method
is able to free up some space to make the second try succeed,
program operation can proceed without any further disruption.
* ProxyMemoryAllocator::AllocationFailed() no longer calls
SetAllocationHasFailed(true) on its slave allocator.
That call is to be made solely by
ProxyMemoryAllocator::SetAllocationHasFailed(), instead.
* AutoCleanupProxyMemoryAllocator::AllocationFailed() now
calls up to its parent class as well as doing its regular
OutOfMemory() callbacks.
* Cleaned up the JavaDoc comments so that they now build
without any warnings from the javadoc utility.
* The POSIX implementation of GetCurrentTime64() wasn\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'t
handling Daylight Savings Time properly, which meant its
result would be off by an hour for part of the year. Fixed.
* Changed some calls to gmtime() and localtime() to gmtime_r()
and localtime_r() respectively, to make them thread-safe.
|
|
|
Intel Version - requires R5 (1.6 MB) |
53 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.6 MB) |
15 downloads |
|
 |
 |
|
|
 |
 |
| Version 3.31 |
 |
 |
License: BSD/MIT
Updated: March 14, 2007
Source: Source Included
|
 |
 |
v3.31 Released 3/14/2007
- The AtomicCounter API is now aware of Qt 4s atomic
counter API, and will use that as its implementation in
Qt-enabled programs compiled on systems where MUSCLEs
own inline-assembly support isnt available.
- hexterm will now send ASCII bytes if you prefix them
with a slash (e.g. /0 /1 /2 sends 0x30, 0x31, 0x32)
- Added a Hashtable::IndexOfValue() function that lets you
find the index of the first (or last) value of a given
type in a Hashtable. (with O(N) search time)
- Added implementations of the GetByteBufferFromPool() and
GetMessageFromPool() functions that take a user-specified
ObjectPool instead of using a default object pool.
- Added support for a new compiler flag, MUSCLE_64_BIT_PLATFORM,
which can be defined in your Makefile if you are on a 64-bit
platform that isnt autodetected inside of MuscleSupport.
- Added INT32_FORMAT_SPEC and UINT32_FORMAT_SPEC macros so
that printf() statements can be made less architecture-specific.
- Added a section to the tests/testtypdefs.cpp test that checks
to make sure the *_FORMAT_SPEC macros are working correctly on
the current platform.
- DataNode::GetChildIterator() now takes an optional flags parameter
that is passed on to the HashtableIterator constructor.
- Added a DataNode::HasChildren() convenience method.
o Made the String classs destructor inline.
* SetupSystem.cpp wouldnt compile on 64-bit systems when
using Mutexes to implement atomic operations. Fixed.
* Merged in Lior Okmans patch to the Java client code that
sets the sockets send and receive buffers to 128KB.
* Merged in Lior Okmans patch to the Java client code to
fix an occasional busy-loop that could occur when
receiving very large (>400KB) Message objects.
* Merged in Nathan Whitehorns patch to the FreeBSD
#ifdefs in NetworkUtilityFunctions.cpp.
* Fixed a bug in MemMem() that where an incorrect return
value would be returned when both buffers were the same size.
* Fixed a bug in RawQueryFilter::SetFromArchive() that could
cause a crash.
* Some of muscles text output would be wrong on 64-bit
platforms. Fixed by changing all printf()s to use the new
INT32_FORMAT_SPEC and UINT32_FORMAT_SPEC macros when appropriate.
* Fixed a bug in the Makefiles so that g++ now compiles all code
with all warnings enabled (except the multi-char constants warning).
* Went through the test files and fixed the minor problems that
were causing them to generate compiler warnings with -Wall enabled.
* hexterm now prints out an error message when it aborts due to
an invalid return code from Read() or Write().
|
|
|
Intel Version - requires R5 (1.52 MB) |
46 downloads |
|
 |
 |
|
|
 |
|
PowerPC Version - requires R5 (1.53 MB) |
18 downloads |
|
 |
 |
|
|
 |
 |
| Version 3.30 |
 |
 |
License: BSD/MIT
Updated: January 16, 2007
Source: Source Included
|
 |
 |
v3.30 Released 1/16/2007
***NOTE*** In this release, the byte-swapping functions for
floating point and double-precision floating point operations
have been renamed. If your code handles floating-point byte
swapping itself, you will need to update your code before it
will compile. See the FLOAT_TROUBLE and DOUBLE_TROUBLE comments
in support/MuscleSupport.h for details about this issue.
- Added a QMessageTransceiverHandler helper class to
QMessageTransceiverThread.{cpp,h}. This class handles the
multiplexing and demultiplexing of multiple session objects inside
a single QMessageTransceiverThread object, so that Qt-based programs
that use a N:1 session-to-thread model will be easier to write
and maintain.
- Added a QMessageTransceiverThreadPool helper class to
QMessageTransceiverThread.{cpp,h}. This class manages the automatic
creation of QMessageTransceiverThreads when QMessageTransceiverHandlers
are set up, so that an N:1 session-to-thread model can be implemented
automatically in Qt-based programs.
- Rewrote hexterm\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'s output routine to be more useful; it now outputs
both ASCII and hex data, in a format similar to that used by od.
- Added chatclient.cpp to the tests folder. chatclient.cpp is a
simple command-line BeShare compatible chat client (previously
distributed separately as \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"Clyde\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\")
- Added a minichatclient.c to the tests folder. minichatclient.c
is a C-only implementation of chatclient.cpp, just to show how
it can be done using only the MiniMessage and MiniMessageGateway APIs.
- Added a MemMem() function to MiscUtilityFunctions.{cpp,h}. MemMem()
is similar to strstr(), except that instead of operating on
NUL-terminated strings, it operates on binary data.
- Rewrote the PulseNode class to be more efficient when many children
are present -- |
| |