Author: kgiusti
Date: Wed Jun 17 12:08:35 2015
New Revision: 1685995

URL: http://svn.apache.org/r1685995
Log:
QPID-6592: include identifying information in the connection handshake

For AMQP 1.0 connections, this patch adds identification information
to the connection properties in the open performative.

For AMQP 0-10 connections, this information is provided in the
server-properties argument of the connection.start control.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp?rev=1685995&r1=1685994&r2=1685995&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp Wed Jun 17 
12:08:35 2015
@@ -39,6 +39,7 @@
 #include "qpid/broker/AclModule.h"
 #include "qpid/amqp_0_10/Codecs.h"
 #include "qmf/org/apache/qpid/broker/EventClientConnectFail.h"
+#include "qpid/Version.h"
 
 using namespace qpid;
 using namespace qpid::broker;
@@ -118,7 +119,12 @@ ConnectionHandler::Handler::Handler(qpid
     if (serverMode) {
         FieldTable properties;
         Array mechanisms(0x95);
+        boost::shared_ptr<const System> sysInfo = 
connection.getBroker().getSystem();
 
+        properties.setString("product", qpid::product);
+        properties.setString("version", qpid::version);
+        properties.setString("platform", sysInfo->getOsName());
+        properties.setString("host", sysInfo->getNodeName());
         properties.setString(QPID_FED_TAG, 
connection.getBroker().getFederationTag());
 
         authenticator = SaslAuthenticator::createAuthenticator(c);

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h?rev=1685995&r1=1685994&r2=1685995&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.h Wed Jun 17 12:08:35 
2015
@@ -36,6 +36,8 @@
 #include "qpid/framing/ProtocolVersion.h"
 #include "qpid/Exception.h"
 #include "qpid/sys/SecurityLayer.h"
+#include "qpid/broker/System.h"
+
 
 
 namespace qpid {

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp?rev=1685995&r1=1685994&r2=1685995&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp Wed Jun 17 12:08:35 
2015
@@ -32,6 +32,7 @@
 #include "qpid/sys/Time.h"
 #include "qpid/sys/Timer.h"
 #include "qpid/sys/OutputControl.h"
+#include "qpid/Version.h"
 #include "config.h"
 #include <sstream>
 extern "C" {
@@ -345,6 +346,31 @@ void Connection::open()
                      << " remote=" << 
pn_transport_get_remote_idle_timeout(transport));
     }
 
+    // QPID-6592: put self-identifying information into the connection
+    // properties.  Use keys defined by the 0-10 spec, as AMQP 1.0 has yet to
+    // define any.
+    //
+    pn_data_t *props = pn_connection_properties(connection);
+    if (props) {
+        boost::shared_ptr<const System> sysInfo = getBroker().getSystem();
+        std::string osName(sysInfo->getOsName());
+        std::string nodeName(sysInfo->getNodeName());
+
+        pn_data_clear(props);
+        pn_data_put_map(props);
+        pn_data_enter(props);
+        pn_data_put_symbol(props, pn_bytes(7, "product"));
+        pn_data_put_string(props, pn_bytes(qpid::product.size(), 
qpid::product.c_str()));
+        pn_data_put_symbol(props, pn_bytes(7, "version"));
+        pn_data_put_string(props, pn_bytes(qpid::version.size(), 
qpid::version.c_str()));
+        pn_data_put_symbol(props, pn_bytes(8, "platform"));
+        pn_data_put_string(props, pn_bytes(osName.size(), osName.c_str()));
+        pn_data_put_symbol(props, pn_bytes(4, "host"));
+        pn_data_put_string(props, pn_bytes(nodeName.size(), nodeName.c_str()));
+        pn_data_exit(props);
+        pn_data_rewind(props);
+    }
+
     pn_connection_open(connection);
     out.connectionEstablished();
     opened();



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to