summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SessionState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/SessionState.cpp')
-rw-r--r--cpp/src/qpid/broker/SessionState.cpp37
1 files changed, 24 insertions, 13 deletions
diff --git a/cpp/src/qpid/broker/SessionState.cpp b/cpp/src/qpid/broker/SessionState.cpp
index 17537e11be..45d78c9307 100644
--- a/cpp/src/qpid/broker/SessionState.cpp
+++ b/cpp/src/qpid/broker/SessionState.cpp
@@ -31,22 +31,25 @@ namespace broker {
using namespace framing;
-SessionState::SessionState(SessionManager& f, SessionHandler& h, uint32_t timeout_)
- : factory(f), handler(&h), id(true), timeout(timeout_),
- broker(h.getConnection().broker),
- version(h.getConnection().getVersion())
-{
- // FIXME aconway 2007-09-21: Break dependnecy - broker updates session.
- chain.push_back(new SemanticHandler(*this));
- in = &chain[0]; // Incoming frame to handler chain.
- out = &handler->out; // Outgoing frames to SessionHandler
+void SessionState::handleIn(AMQFrame& f) { semanticHandler->handle(f); }
- // FIXME aconway 2007-09-20: use broker to add plugin
- // handlers to the chain.
- // FIXME aconway 2007-08-31: Shouldn't be passing channel ID.
- broker.update(handler->getChannel(), *this);
+void SessionState::handleOut(AMQFrame& f) {
+ assert(handler);
+ handler->out.handle(f);
}
+SessionState::SessionState(
+ SessionManager& f, SessionHandler& h, uint32_t timeout_, uint32_t ack)
+ : framing::SessionState(ack),
+ factory(f), handler(&h), id(true), timeout(timeout_),
+ broker(h.getConnection().broker),
+ version(h.getConnection().getVersion()),
+ semanticHandler(new SemanticHandler(*this))
+{
+ // FIXME aconway 2007-09-20: SessionManager may add plugin
+ // handlers to the chain.
+ }
+
SessionState::~SessionState() {
// Remove ID from active session list.
factory.erase(getId());
@@ -65,4 +68,12 @@ Connection& SessionState::getConnection() {
return getHandler().getConnection();
}
+void SessionState::detach() {
+ handler = 0;
+}
+
+void SessionState::attach(SessionHandler& h) {
+ handler = &h;
+}
+
}} // namespace qpid::broker