summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SessionAdapter.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-09-17 20:22:55 +0000
committerAlan Conway <aconway@apache.org>2007-09-17 20:22:55 +0000
commit24966bd7fbaff11d8a0f1ad282180154c96a7d2f (patch)
tree3858d26f5e8d910b4b9806b2cbc1741f713d5a51 /cpp/src/qpid/broker/SessionAdapter.cpp
parent356c93ebddb342f70cf64361cfc3024af7878c82 (diff)
downloadqpid-python-24966bd7fbaff11d8a0f1ad282180154c96a7d2f.tar.gz
Renamed SessionAdapter as SessionHandler.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@576578 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/SessionAdapter.cpp')
-rw-r--r--cpp/src/qpid/broker/SessionAdapter.cpp146
1 files changed, 0 insertions, 146 deletions
diff --git a/cpp/src/qpid/broker/SessionAdapter.cpp b/cpp/src/qpid/broker/SessionAdapter.cpp
deleted file mode 100644
index f9d352aa6a..0000000000
--- a/cpp/src/qpid/broker/SessionAdapter.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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 "SessionAdapter.h"
-#include "Session.h"
-#include "Connection.h"
-#include "qpid/framing/reply_exceptions.h"
-#include "qpid/framing/constants.h"
-#include "qpid/log/Statement.h"
-
-namespace qpid {
-namespace broker {
-using namespace framing;
-
-// FIXME aconway 2007-08-31: the SessionAdapter should create its
-// private proxy directly on the connections out handler.
-// Session/channel methods should not go thru the other layers.
-// Need to get rid of ChannelAdapter and allow proxies to be created
-// directly on output handlers.
-//
-framing::AMQP_ClientProxy& SessionAdapter::getProxy() {
- return session->getProxy();
-}
-
-SessionAdapter::SessionAdapter(Connection& c, ChannelId ch)
- : connection(c), channel(ch), ignoring(false)
-{
- in = this;
- out = &c.getOutput();
-}
-
-SessionAdapter::~SessionAdapter() {}
-
-namespace {
-ClassId classId(AMQMethodBody* m) { return m ? m->amqpMethodId() : 0; }
-MethodId methodId(AMQMethodBody* m) { return m ? m->amqpClassId() : 0; }
-} // namespace
-
-void SessionAdapter::handle(AMQFrame& f) {
- // Note on channel states: a channel is open if session != 0. A
- // channel that is closed (session == 0) can be in the "ignoring"
- // state. This is a temporary state after we have sent a channel
- // exception, where extra frames might arrive that should be
- // ignored.
- //
- AMQMethodBody* m=f.getMethod();
- try {
- if (m && m->invoke(static_cast<Invocable*>(this)))
- return;
- else if (session)
- session->in(f);
- else if (!ignoring)
- throw ChannelErrorException(
- QPID_MSG("Channel " << channel << " is not open"));
- } catch(const ChannelException& e){
- getProxy().getChannel().close(
- e.code, e.toString(), classId(m), methodId(m));
- session.reset();
- ignoring=true; // Ignore trailing frames sent by client.
- }catch(const ConnectionException& e){
- connection.close(e.code, e.what(), classId(m), methodId(m));
- }catch(const std::exception& e){
- connection.close(
- framing::INTERNAL_ERROR, e.what(), classId(m), methodId(m));
- }
-}
-
-void SessionAdapter::assertOpen(const char* method) {
- if (!session)
- throw ChannelErrorException(
- QPID_MSG(""<<method<<" failed: No session for channel "
- << getChannel()));
-}
-
-void SessionAdapter::assertClosed(const char* method) {
- // FIXME aconway 2007-08-31: Should raise channel-busy, need
- // to update spec.
- if (session)
- throw PreconditionFailedException(
- QPID_MSG(""<<method<<" failed: "
- << channel << " already open on channel "
- << getChannel()));
-}
-
-void SessionAdapter::open(const string& /*outOfBand*/){
- assertClosed("open");
- session.reset(new Session(*this, 0));
- getProxy().getChannel().openOk();
-}
-
-// FIXME aconway 2007-08-31: flow is no longer in the spec.
-void SessionAdapter::flow(bool active){
- session->flow(active);
- getProxy().getChannel().flowOk(active);
-}
-
-void SessionAdapter::flowOk(bool /*active*/){}
-
-void SessionAdapter::close(uint16_t replyCode,
- const string& replyText,
- uint16_t classId, uint16_t methodId)
-{
- // FIXME aconway 2007-08-31: Extend constants.h to map codes & ids
- // to text names.
- QPID_LOG(warning, "Received session.close("<<replyCode<<","
- <<replyText << ","
- << "classid=" <<classId<< ","
- << "methodid=" <<methodId);
- ignoring=false;
- getProxy().getChannel().closeOk();
- // FIXME aconway 2007-08-31: sould reset session BEFORE
- // sending closeOK to avoid races. SessionAdapter
- // needs its own private proxy, see getProxy() above.
- session.reset();
- // No need to remove from connection map, will be re-used
- // if channel is re-opened.
-}
-
-void SessionAdapter::closeOk(){
- ignoring=false;
-}
-
-void SessionAdapter::ok()
-{
- //no specific action required, generic response handling should be
- //sufficient
-}
-
-}} // namespace qpid::broker