diff options
| author | Alan Conway <aconway@apache.org> | 2007-09-17 20:22:55 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2007-09-17 20:22:55 +0000 |
| commit | 24966bd7fbaff11d8a0f1ad282180154c96a7d2f (patch) | |
| tree | 3858d26f5e8d910b4b9806b2cbc1741f713d5a51 /cpp/src/qpid/broker/SessionAdapter.cpp | |
| parent | 356c93ebddb342f70cf64361cfc3024af7878c82 (diff) | |
| download | qpid-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.cpp | 146 |
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 |
