summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SessionState.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-10-26 19:48:31 +0000
committerAlan Conway <aconway@apache.org>2007-10-26 19:48:31 +0000
commitf61e1ef7589da893b9b54448224dc0961515eb40 (patch)
tree258ac1fd99ac122b105ad90ad4394d8d544c5cbf /cpp/src/qpid/broker/SessionState.cpp
parentc5294d471ade7a18c52ca7d4028a494011c82293 (diff)
downloadqpid-python-f61e1ef7589da893b9b54448224dc0961515eb40.tar.gz
Session resume support in client & broker: Client can resume a session
after voluntary suspend() or network failure. Frames lost in network failure are automatically re-transmitted for transparent re-connection. client::Session improvements: - Locking to avoid races between network & user threads. - Replaced client::StateManager with sys::StateMonitor - avoid heap allocation. qpid::Exception clean up: - use QPID_MSG consistently to format exception messages. - throw typed exceptions (in reply_exceptions.h) for AMQP exceptions. - re-throw correct typed exception on client for exceptions from broker. - Removed QpidError.h rubygen/templates/constants.rb: - constants.h: Added FOO_CLASS_ID and FOO_BAR_METHOD_ID constants. - reply_constants.h: Added throwReplyException(code, text) log::Logger: - Fixed shutdown race in Statement::~Initializer() git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@588761 13f79535-47bb-0310-9956-ffa450edef68
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