Skip to content

Commit

Permalink
v6.90 release
Browse files Browse the repository at this point in the history
  • Loading branch information
jfriesne committed Jul 15, 2018
1 parent 0690299 commit 8743c1a
Show file tree
Hide file tree
Showing 23 changed files with 649 additions and 343 deletions.
42 changes: 36 additions & 6 deletions HISTORY.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,36 @@ key: - new feature
* bug fixed
o other

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.
o 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.

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
Expand Down Expand Up @@ -58,7 +88,7 @@ key: - new feature
clock-frequencies on its first call.

6.82 Released 4/25/2018
o tests/Makefile-mt no longer tries to compile testreflectsession
o test/Makefile-mt no longer tries to compile testreflectsession
except when executing on an OS that testreflectsession supports.
o Did some minor editing and re-arranging of the "MUSCLE by Example" pages.
o Replaced a number of `tags` in the MkDocs with [URLs](...)
Expand Down Expand Up @@ -3626,7 +3656,7 @@ v3.34 Released 7/12/2007
really needed it for some reason, you could still
call SetSocketNaglesAlgorithmEnabled() manually on
the resulting sockets afterwards)
o tests/cvscopy.cpp is now tests/svncopy.cpp, since I
o test/cvscopy.cpp is now test/svncopy.cpp, since I
don't use CVS anymore.
* Thread::WaitForNextMessageAux() wasn't handling file
descriptors properly when called with a wakeupTime
Expand Down Expand Up @@ -3681,7 +3711,7 @@ v3.32 Released 5/2/2007
a list of NetworkInterfaceInfo objects describing the
various network interfaces currently available on the
host machine.
- tests/testnetutil.cpp Now tests GetNetworkInterfaceInfos()
- test/testnetutil.cpp Now tests GetNetworkInterfaceInfos()
by calling it and printing out the results.
- Added a new argument (emitEndMessageBatchIfNecessary)
to the QMessageTransceiverHandler::Reset() and
Expand Down Expand Up @@ -3754,7 +3784,7 @@ v3.31 Released 3/14/2007
platform that isn't 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
- Added a section to the test/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
Expand Down Expand Up @@ -3935,7 +3965,7 @@ v3.24 Released 11/28/2006
a new child node.
- Also added a SetMaxKnownChildIDHint() method to the DataNode
class. This lets you manually reset the hint if you need to.
- Updated tests/testhashtable.cpp so that it now tests for the
- Updated test/testhashtable.cpp so that it now tests for the
HashtableIterator bug described below.
- The MessageReplaceFunc callback used by CloneDataNodeSubtree()
now takes a node-path as its first argument, in addition to the
Expand Down Expand Up @@ -4460,7 +4490,7 @@ v2.61 Released 11/04/2004
- Added PLOCK() and PUNLOCK() macros to Mutex.h, and a new utility
called deadlockfinder.cpp to the test subfolder. Together, these
are useful for tracking down potential synchronization deadlocks in
multithreaded programs. See tests/deadlockfinder.cpp for details.
multithreaded programs. See test/deadlockfinder.cpp for details.
* Added Peter Vorwerk's Tru64-compatibility patches.
* Added Julien Torres' AMD64-compatibility patches.
* Added an #ifdef to Thread.{cpp,h} so that the Thread class will
Expand Down
2 changes: 1 addition & 1 deletion README.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<H2>
MUSCLE: Crossbar Server, Portable Messaging and Support Classes<p>
5/29/2018 v6.85 [email protected]<p>
7/14/2018 v6.90 [email protected]<p>
Jeremy Friesner / Meyer Sound Laboratories Inc.<p>
Win32 compatibility contributions by Vitaliy Mikitchenko<p>
C# client code by Wilson Yeung<p>
Expand Down
12 changes: 12 additions & 0 deletions dataio/SSLSocketDataIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ SSLSocketDataIO :: SSLSocketDataIO(const ConstSocketRef & sockfd, bool blocking,
ConstSocketRef tempSocket; // yes, it's intentional that this socket will be closed as soon as we exit this scope
if (CreateConnectedSocketPair(tempSocket, _alwaysReadableSocket) == B_NO_ERROR)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
_ctx = SSL_CTX_new(TLS_method());
#else
_ctx = SSL_CTX_new(SSLv3_method()); // Using SSLv3_method() instead of SSLv23_method to avoid errors from SSL_pending()
#endif
if (_ctx)
{
if (!blocking) SSL_CTX_set_mode(CAST_CTX, SSL_MODE_ENABLE_PARTIAL_WRITE);
Expand Down Expand Up @@ -79,7 +83,11 @@ status_t SSLSocketDataIO :: SetPrivateKey(const uint8 * bytes, uint32 numBytes)
BIO * in = BIO_new_mem_buf((void *)bytes, numBytes);
if (in)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
EVP_PKEY * pkey = PEM_read_bio_PrivateKey(in, NULL, SSL_get_default_passwd_cb(CAST_SSL), SSL_get_default_passwd_cb_userdata(CAST_SSL));
#else
EVP_PKEY * pkey = PEM_read_bio_PrivateKey(in, NULL, CAST_SSL->ctx->default_passwd_callback, CAST_SSL->ctx->default_passwd_callback_userdata);
#endif
if (pkey)
{
if (SSL_use_PrivateKey(CAST_SSL, pkey) == 1) ret = B_NO_ERROR;
Expand Down Expand Up @@ -115,7 +123,11 @@ status_t SSLSocketDataIO :: SetPublicKeyCertificate(const ConstByteBufferRef & b
BIO * in = BIO_new_mem_buf((void *)buf()->GetBuffer(), buf()->GetNumBytes());
if (in)
{
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
X509 * x509Cert = PEM_read_bio_X509(in, NULL, SSL_get_default_passwd_cb(CAST_SSL), SSL_get_default_passwd_cb_userdata(CAST_SSL));
#else
X509 * x509Cert = PEM_read_bio_X509(in, NULL, CAST_SSL->ctx->default_passwd_callback, CAST_SSL->ctx->default_passwd_callback_userdata);
#endif
if (x509Cert)
{
if (SSL_use_certificate(CAST_SSL, x509Cert) == 1)
Expand Down
2 changes: 1 addition & 1 deletion html/Beginners Guide.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<H1>MUSCLE Overview and Beginner's Guide</H1>
<H4>v6.85 / Jeremy Friesner / Meyer Sound Laboratories Inc ([email protected]) 5/29/2018</H4>
<H4>v6.90 / Jeremy Friesner / Meyer Sound Laboratories Inc ([email protected]) 7/14/2018</H4>
<A HREF="http://www.lcscanada.com/muscle/html/index.html">Click here for DOxygen class API documentation</A>
</HEAD>

Expand Down
2 changes: 1 addition & 1 deletion html/Custom Servers.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<HTML>
<HEAD>
<H1>Implementing a Custom Server with MUSCLE</H1>
<H4>v6.85 / Jeremy Friesner / Meyer Sound Laboratories Inc / [email protected] 5/29/2018</H4>
<H4>v6.90 / Jeremy Friesner / Meyer Sound Laboratories Inc / [email protected] 7/18/2018</H4>
</HEAD>
<BODY bgcolor=#ffffff>
<H2>Introduction</H2>
Expand Down
6 changes: 3 additions & 3 deletions html/muscle-by-example/docs/srscommandmessages.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ myMessageTransceiverThread.SendMessageToSessions(setDataMsg);
- Here is an example invocation:
<pre>
MessageRef getDataMsg = GetMessageFromPool(PR_COMMAND_GETDATA);
getDataMsg()->AddString(PR_NAME_KEYS, "/*/*/blah"); // absolute path
getDataMsg()->AddString(PR_NAME_KEYS, "/\*/\*/blah"); // absolute path
getDataMsg()->AddString(PR_NAME_KEYS, "node*"); // relative path
getDataMsg()->AddString(PR_NAME_KEYS, "sub*/node*");
myMessageTransceiverThread.SendMessageToSessions(getDataMsg);
Expand All @@ -61,11 +61,11 @@ myMessageTransceiverThread.SendMessageToSessions(rmvDataMsg);
</pre>
* `PR_COMMAND_SETPARAMETERS` - *Sets parameters on the session based on the fields in the Message*
- A session's parameters govern its behavior.
- In particular, parameters whose names start with the prefix "SUBSCRIBE:" tell the session to subscribe to whichever [DataNodes](https://public.msli.com/lcs/muscle/html/classmuscle_1_1DataNode.html) have paths that match the path in the remainder of the parameters name (e.g. setting a parameter named "SUBSCRIBE:/*/*" would tell the session to subscribe to all [DataNodes](https://public.msli.com/lcs/muscle/html/classmuscle_1_1DataNode.html) whose paths match "/*/*", which is a good way for the client to be informed whenever another client connects or disconnects)
- In particular, parameters whose names start with the prefix "SUBSCRIBE:" tell the session to subscribe to whichever [DataNodes](https://public.msli.com/lcs/muscle/html/classmuscle_1_1DataNode.html) have paths that match the path in the remainder of the parameters name (e.g. setting a parameter named "SUBSCRIBE:/\*/\*" would tell the session to subscribe to all [DataNodes](https://public.msli.com/lcs/muscle/html/classmuscle_1_1DataNode.html) whose paths match "/\*/\*", which is a good way for the client to be informed whenever another client connects or disconnects)
- Here is an example invocation:
<pre>
MessageRef setPMsg = GetMessageFromPool(PR_COMMAND_SETPARAMETERS);
setPMsg()->AddBool("SUBSCRIBE:/*/*", true); // type and value of this field don't matter
setPMsg()->AddBool("SUBSCRIBE:/\*/\*", true); // type and value of this field don't matter
setPMsg()->AddBool("SUBSCRIBE:nodename3", true); // relative path, equivalent to "/*/*/nodename3"
setPMsg()->AddInt32(PR_NAME_REPLY_ENCODING, MUSCLE_MESSAGE_ENCODING_ZLIB_9);
myMessageTransceiverThread.SendMessageToSessions(setPMsg);
Expand Down
Loading

0 comments on commit 8743c1a

Please sign in to comment.