From 5891c19a838bd8987fbc04d23923f4f5f2ca4636 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Fri, 1 Feb 2008 18:21:01 +0000 Subject: Initial cut of inter-broker bridging git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@617590 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/SessionHandler.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'cpp/src/qpid/broker/SessionHandler.cpp') diff --git a/cpp/src/qpid/broker/SessionHandler.cpp b/cpp/src/qpid/broker/SessionHandler.cpp index bbdbccad7d..fb46cb522d 100644 --- a/cpp/src/qpid/broker/SessionHandler.cpp +++ b/cpp/src/qpid/broker/SessionHandler.cpp @@ -23,6 +23,7 @@ #include "Connection.h" #include "qpid/framing/reply_exceptions.h" #include "qpid/framing/constants.h" +#include "qpid/framing/ClientInvoker.h" #include "qpid/framing/ServerInvoker.h" #include "qpid/log/Statement.h" @@ -57,17 +58,19 @@ void SessionHandler::handleIn(AMQFrame& f) { // AMQMethodBody* m = f.getBody()->getMethod(); try { - if (m && invoke(*this, *m)) + if (m && invoke(static_cast(*this), *m)) { return; - else if (session.get()) { + } else if (session.get()) { boost::optional ack=session->received(f); session->in.handle(f); if (ack) peerSession.ack(*ack, SequenceNumberSet()); - } - else if (!ignoring) + } else if (m && invoke(static_cast(*this), *m)) { + return; + } else if (!ignoring) { throw ChannelErrorException( QPID_MSG("Channel " << channel.get() << " is not open")); + } } catch(const ChannelException& e) { ignoring=true; // Ignore trailing frames sent by client. session->detach(); @@ -188,4 +191,17 @@ void SessionHandler::solicitAck() { peerSession.ack(session->sendingAck(), SequenceNumberSet()); } +void SessionHandler::attached(const Uuid& /*sessionId*/, uint32_t detachedLifetime) +{ + std::auto_ptr state( + connection.broker.getSessionManager().open(*this, detachedLifetime)); + session.reset(state.release()); +} + +void SessionHandler::detached() +{ + connection.broker.getSessionManager().suspend(session); + session.reset(); +} + }} // namespace qpid::broker -- cgit v1.2.1