summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Giusti <kgiusti@apache.org>2015-06-17 12:08:35 +0000
committerKen Giusti <kgiusti@apache.org>2015-06-17 12:08:35 +0000
commitb997784b3fc015206cf51c0ca11e9af66893b156 (patch)
tree44f57e28d5f34e5fb30c330492763db4559ef36f
parent6bf79ce0d46b171735832594bb7edd11c80bbf03 (diff)
downloadqpid-python-b997784b3fc015206cf51c0ca11e9af66893b156.tar.gz
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. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1685995 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/ConnectionHandler.cpp6
-rw-r--r--qpid/cpp/src/qpid/broker/ConnectionHandler.h2
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Connection.cpp26
3 files changed, 34 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp b/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
index 2d1983d2cb..49afd8d24d 100644
--- a/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
+++ b/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
@@ -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::broker::amqp_0_10::Connection& c, bool
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);
diff --git a/qpid/cpp/src/qpid/broker/ConnectionHandler.h b/qpid/cpp/src/qpid/broker/ConnectionHandler.h
index 30155fb903..93bd62d5d0 100644
--- a/qpid/cpp/src/qpid/broker/ConnectionHandler.h
+++ b/qpid/cpp/src/qpid/broker/ConnectionHandler.h
@@ -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 {
diff --git a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
index 6c946b1375..b4dab83594 100644
--- a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
+++ b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
@@ -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();