summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/amqp_0_10/SessionHandler.h
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-05-09 18:46:17 +0000
committerAlan Conway <aconway@apache.org>2008-05-09 18:46:17 +0000
commitb0f3edfa2a68ccf34aa7a555d0d37c2e17b8421b (patch)
treea94c5a579769809f4d398f4c65ad579a432b93fd /cpp/src/qpid/amqp_0_10/SessionHandler.h
parent2ebccc4f3ab6e7813ac2179c8318163ffdd22cff (diff)
downloadqpid-python-b0f3edfa2a68ccf34aa7a555d0d37c2e17b8421b.tar.gz
Support for 0-10 sessions, not yet integrated. Misc minor fixes.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@654913 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/amqp_0_10/SessionHandler.h')
-rw-r--r--cpp/src/qpid/amqp_0_10/SessionHandler.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/cpp/src/qpid/amqp_0_10/SessionHandler.h b/cpp/src/qpid/amqp_0_10/SessionHandler.h
new file mode 100644
index 0000000000..85577ebafc
--- /dev/null
+++ b/cpp/src/qpid/amqp_0_10/SessionHandler.h
@@ -0,0 +1,116 @@
+#ifndef QPID_AMQP_0_10_SESSIONHANDLER_H
+#define QPID_AMQP_0_10_SESSIONHANDLER_H
+
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * 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
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#include "qpid/framing/ChannelHandler.h"
+#include "qpid/framing/AMQP_AllProxy.h"
+#include "qpid/framing/AMQP_AllOperations.h"
+
+namespace qpid {
+
+class SessionState;
+
+namespace amqp_0_10 {
+
+/**
+ * Base SessionHandler with logic common to both client and broker.
+ *
+ * A SessionHandler is associated with a channel and can be attached
+ * to a session state.
+ */
+
+class SessionHandler : public framing::AMQP_AllOperations::SessionHandler,
+ public framing::FrameHandler::InOutHandler
+{
+ public:
+ typedef framing::AMQP_AllProxy::Session Peer;
+
+ SessionHandler();
+ SessionHandler(framing::FrameHandler& out, uint16_t channel);
+ ~SessionHandler();
+
+ void setChannel(uint16_t ch) { channel = ch; }
+ uint16_t getChannel() const { return channel.get(); }
+
+ void setOutHandler(framing::FrameHandler& h) { channel.next = &h; }
+
+ virtual SessionState* getState() = 0;
+ virtual framing::FrameHandler* getInHandler() = 0;
+
+ // Non-protocol methods, called locally to initiate some action.
+ void sendDetach();
+ void sendCompletion();
+ void sendAttach(bool force);
+ void sendTimeout(uint32_t t);
+ void sendFlush();
+ void sendCommandPoint();
+
+ /** True if the handler is ready to send and receive */
+ bool ready() const;
+
+ // Protocol methods
+ void attach(const std::string& name, bool force);
+ void attached(const std::string& name);
+ void detach(const std::string& name);
+ void detached(const std::string& name, uint8_t code);
+
+ void requestTimeout(uint32_t t);
+ void timeout(uint32_t t);
+
+ void commandPoint(const framing::SequenceNumber& id, uint64_t offset);
+ void expected(const framing::SequenceSet& commands, const framing::Array& fragments);
+ void confirmed(const framing::SequenceSet& commands,const framing::Array& fragments);
+ void completed(const framing::SequenceSet& commands, bool timelyReply);
+ void knownCompleted(const framing::SequenceSet& commands);
+ void flush(bool expected, bool confirmed, bool completed);
+ void gap(const framing::SequenceSet& commands);
+
+ protected:
+ virtual void invoke(const framing::AMQMethodBody& m);
+
+ virtual void setState(const std::string& sessionName, bool force) = 0;
+ virtual void channelException(uint16_t code, const std::string& msg) = 0;
+ virtual void connectionException(uint16_t code, const std::string& msg) = 0;
+
+
+ // Notification of events
+ virtual void readyToSend() {}
+ virtual void readyToReceive() {}
+ virtual void handleDetach();
+
+ virtual void handleIn(framing::AMQFrame&);
+ virtual void handleOut(framing::AMQFrame&);
+
+ void checkAttached();
+ void checkName(const std::string& name);
+
+ framing::ChannelHandler channel;
+ Peer peer;
+ bool ignoring;
+ bool sendReady, receiveReady;
+ // FIXME aconway 2008-05-07: move handler-related functions from SessionState.
+
+};
+}} // namespace qpid::amqp_0_10
+
+#endif /*!QPID_AMQP_0_10_SESSIONHANDLER_H*/