diff options
-rw-r--r-- | qpid/cpp/src/qpid/broker/ConnectionHandler.cpp | 6 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/ConnectionHandler.h | 2 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/Connection.cpp | 26 |
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(); |