summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-12-05 15:53:52 +0000
committerGordon Sim <gsim@apache.org>2013-12-05 15:53:52 +0000
commitde71de664e9b4dc1b45fedee96ce787304e84a0a (patch)
tree29d8fabe7807115175d2893537aa8b3b7a72b00f /qpid/cpp
parent62e412c514222352bd5f09423845abe859e67dce (diff)
downloadqpid-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.cmake4
-rw-r--r--qpid/cpp/src/config.h.cmake1
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Connection.cpp31
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Connection.h1
-rw-r--r--qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp31
-rw-r--r--qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.h1
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;