diff options
| author | Gordon Sim <gsim@apache.org> | 2013-12-05 15:53:52 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-12-05 15:53:52 +0000 |
| commit | de71de664e9b4dc1b45fedee96ce787304e84a0a (patch) | |
| tree | 29d8fabe7807115175d2893537aa8b3b7a72b00f /qpid/cpp | |
| parent | 62e412c514222352bd5f09423845abe859e67dce (diff) | |
| download | qpid-python-de71de664e9b4dc1b45fedee96ce787304e84a0a.tar.gz | |
QPID-5395: use newly added proton tracer callback to unify logging
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1548177 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
| -rw-r--r-- | qpid/cpp/src/amqp.cmake | 4 | ||||
| -rw-r--r-- | qpid/cpp/src/config.h.cmake | 1 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/Connection.cpp | 31 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/Connection.h | 1 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp | 31 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h | 1 |
6 files changed, 67 insertions, 2 deletions
diff --git a/qpid/cpp/src/amqp.cmake b/qpid/cpp/src/amqp.cmake index 14b660dab1..05336cb2bb 100644 --- a/qpid/cpp/src/amqp.cmake +++ b/qpid/cpp/src/amqp.cmake @@ -58,6 +58,10 @@ if (PROTON_FOUND) else (PROTON_VERSION GREATER ${maximum_version}) message(STATUS "Qpid proton found, amqp 1.0 support enabled") set (amqp_default ON) + #remove when 0.5 no longer supported + if (NOT PROTON_VERSION EQUAL 0.5) + set (HAVE_PROTON_TRACER 1) + endif (NOT PROTON_VERSION EQUAL 0.5) endif (PROTON_VERSION GREATER ${maximum_version}) endif (PROTON_VERSION LESS ${minimum_version}) else (PROTON_FOUND) diff --git a/qpid/cpp/src/config.h.cmake b/qpid/cpp/src/config.h.cmake index 0f095f4fbf..fcbfc8e280 100644 --- a/qpid/cpp/src/config.h.cmake +++ b/qpid/cpp/src/config.h.cmake @@ -61,5 +61,6 @@ #cmakedefine HAVE_SYS_SDT_H ${HAVE_SYS_SDT_H} #cmakedefine HAVE_LOG_AUTHPRIV #cmakedefine HAVE_LOG_FTP +#cmakedefine HAVE_PROTON_TRACER #endif /* QPID_CONFIG_H */ diff --git a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp index a45313083b..514add7e44 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp +++ b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp @@ -30,6 +30,7 @@ #include "qpid/framing/ProtocolVersion.h" #include "qpid/log/Statement.h" #include "qpid/sys/OutputControl.h" +#include "config.h" #include <sstream> extern "C" { #include <proton/engine.h> @@ -39,6 +40,31 @@ extern "C" { namespace qpid { namespace broker { namespace amqp { +namespace { +//remove conditional when 0.5 is no longer supported +#ifdef HAVE_PROTON_TRACER +void do_trace(pn_transport_t* transport, const char* message) +{ + Connection* c = reinterpret_cast<Connection*>(pn_transport_get_context(transport)); + if (c) c->trace(message); +} + +void set_tracer(pn_transport_t* transport, void* context) +{ + pn_transport_set_context(transport, context); + pn_transport_set_tracer(transport, &do_trace); +} +#else +void set_tracer(pn_transport_t*, void*) +{ +} +#endif +} + +void Connection::trace(const char* message) const +{ + QPID_LOG_CAT(trace, protocol, "[" << id << "]: " << message); +} Connection::Connection(qpid::sys::OutputControl& o, const std::string& i, BrokerContext& b, bool saslInUse) : BrokerContext(b), ManagedConnection(getBroker(), i), @@ -53,7 +79,10 @@ Connection::Connection(qpid::sys::OutputControl& o, const std::string& i, Broker out.activateOutput(); bool enableTrace(false); QPID_LOG_TEST_CAT(trace, protocol, enableTrace); - if (enableTrace) pn_transport_trace(transport, PN_TRACE_FRM); + if (enableTrace) { + pn_transport_trace(transport, PN_TRACE_FRM); + set_tracer(transport, this); + } getBroker().getConnectionObservers().connection(*this); if (!saslInUse) { diff --git a/qpid/cpp/src/qpid/broker/amqp/Connection.h b/qpid/cpp/src/qpid/broker/amqp/Connection.h index e1ae34f899..0a63045350 100644 --- a/qpid/cpp/src/qpid/broker/amqp/Connection.h +++ b/qpid/cpp/src/qpid/broker/amqp/Connection.h @@ -59,6 +59,7 @@ class Connection : public BrokerContext, public sys::ConnectionCodec, public Man pn_transport_t* getTransport(); void setUserId(const std::string&); void abort(); + void trace(const char*) const; protected: typedef std::map<pn_session_t*, boost::shared_ptr<Session> > Sessions; pn_connection_t* connection; diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp index e5fb1b9f76..47f65328eb 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp @@ -37,6 +37,7 @@ #include "qpid/sys/SecurityLayer.h" #include "qpid/sys/SystemInfo.h" #include "qpid/sys/Time.h" +#include "config.h" #include <vector> extern "C" { #include <proton/engine.h> @@ -45,6 +46,31 @@ extern "C" { namespace qpid { namespace messaging { namespace amqp { +namespace { +//remove conditional when 0.5 is no longer supported +#ifdef HAVE_PROTON_TRACER +void do_trace(pn_transport_t* transport, const char* message) +{ + ConnectionContext* c = reinterpret_cast<ConnectionContext*>(pn_transport_get_context(transport)); + if (c) c->trace(message); +} + +void set_tracer(pn_transport_t* transport, void* context) +{ + pn_transport_set_context(transport, context); + pn_transport_set_tracer(transport, &do_trace); +} +#else +void set_tracer(pn_transport_t*, void*) +{ +} +#endif +} + +void ConnectionContext::trace(const char* message) const +{ + QPID_LOG_CAT(trace, protocol, "[" << identifier << "]: " << message); +} ConnectionContext::ConnectionContext(const std::string& url, const qpid::types::Variant::Map& o) : qpid::messaging::ConnectionOptions(o), @@ -67,7 +93,10 @@ ConnectionContext::ConnectionContext(const std::string& url, const qpid::types:: pn_connection_set_container(connection, identifier.c_str()); bool enableTrace(false); QPID_LOG_TEST_CAT(trace, protocol, enableTrace); - if (enableTrace) pn_transport_trace(engine, PN_TRACE_FRM); + if (enableTrace) { + pn_transport_trace(engine, PN_TRACE_FRM); + set_tracer(engine, this); + } } ConnectionContext::~ConnectionContext() diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h index 0f5509930e..e1e6957707 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h @@ -114,6 +114,7 @@ class ConnectionContext : public qpid::sys::ConnectionCodec, public qpid::messag std::string getUrl() const; const qpid::sys::SecuritySettings* getTransportSecuritySettings(); void initSecurityLayer(qpid::sys::SecurityLayer&); + void trace(const char*) const; private: typedef std::map<std::string, boost::shared_ptr<SessionContext> > SessionMap; |
