summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SessionState.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/SessionState.h')
-rw-r--r--cpp/src/qpid/broker/SessionState.h31
1 files changed, 22 insertions, 9 deletions
diff --git a/cpp/src/qpid/broker/SessionState.h b/cpp/src/qpid/broker/SessionState.h
index 30f071ca55..7558ea7866 100644
--- a/cpp/src/qpid/broker/SessionState.h
+++ b/cpp/src/qpid/broker/SessionState.h
@@ -10,9 +10,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -33,20 +33,33 @@ namespace broker {
class SessionState
{
public:
- /** Create a new, active session. */
- SessionState(uint32_t timeoutSeconds)
- : id(true), active(true), timeout(timeoutSeconds) {}
+ enum State { CLOSED, ACTIVE, SUSPENDED };
+
+ /** Initially in CLOSED state */
+ SessionState() : id(false), state(CLOSED), timeout(0) {}
+ /** Make CLOSED session ACTIVE, assigns a new UUID.
+ * #@param timeout in seconds
+ */
+ void open(u_int32_t timeout_) {
+ state=ACTIVE; id.generate(); timeout=timeout_;
+ }
+
+ /** Close a session. */
+ void close() { state=CLOSED; id.clear(); timeout=0; }
+
+ State getState() const { return state; }
const framing::Uuid& getId() const { return id; }
uint32_t getTimeout() const { return timeout; }
- /** Call SuspendedSessions::resume to re-activate a suspended session. */
- bool isActive() const { return active; }
-
+ bool isOpen() { return state == ACTIVE; }
+ bool isClosed() { return state == CLOSED; }
+ bool isSuspended() { return state == SUSPENDED; }
+
private:
friend class SuspendedSessions;
framing::Uuid id;
- bool active;
+ State state;
uint32_t timeout;
};