summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/ChannelHandler.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-09-19 22:34:11 +0000
committerAlan Conway <aconway@apache.org>2007-09-19 22:34:11 +0000
commit7ac52b8288273de98f3e97ee8e34776a61034bfc (patch)
treee0a180875e3d097fabcb9b01d543a9d65f4f5cc2 /cpp/src/qpid/client/ChannelHandler.cpp
parent9759046f7a53c88d17355d75d9ca7cc38ec35657 (diff)
downloadqpid-python-7ac52b8288273de98f3e97ee8e34776a61034bfc.tar.gz
AMQP 0-10 Session suppported on broker and client.
Client always uses session on the wire but client::Channel API is still available until all C++ tests are migrated. Broker allows both session and channel connection to support python tests. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@577459 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/ChannelHandler.cpp')
-rw-r--r--cpp/src/qpid/client/ChannelHandler.cpp127
1 files changed, 0 insertions, 127 deletions
diff --git a/cpp/src/qpid/client/ChannelHandler.cpp b/cpp/src/qpid/client/ChannelHandler.cpp
deleted file mode 100644
index 49e7285a47..0000000000
--- a/cpp/src/qpid/client/ChannelHandler.cpp
+++ /dev/null
@@ -1,127 +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 "ChannelHandler.h"
-#include "qpid/framing/amqp_framing.h"
-#include "qpid/framing/all_method_bodies.h"
-
-using namespace qpid::client;
-using namespace qpid::framing;
-using namespace boost;
-
-ChannelHandler::ChannelHandler() : StateManager(CLOSED), id(0) {}
-
-void ChannelHandler::incoming(AMQFrame& frame)
-{
- AMQBody* body = frame.getBody();
- if (getState() == OPEN) {
- ChannelCloseBody* closeBody=
- dynamic_cast<ChannelCloseBody*>(body->getMethod());
- if (closeBody) {
- setState(CLOSED_BY_PEER);
- code = closeBody->getReplyCode();
- text = closeBody->getReplyText();
- if (onClose) {
- onClose(closeBody->getReplyCode(), closeBody->getReplyText());
- }
- } else {
- try {
- in(frame);
- }catch(ChannelException& e){
- AMQMethodBody* method=body->getMethod();
- if (method)
- close(e.code, e.toString(),
- method->amqpClassId(), method->amqpMethodId());
- else
- close(e.code, e.toString(), 0, 0);
- }
- }
- } else {
- if (body->getMethod())
- handleMethod(body->getMethod());
- else
- throw ConnectionException(504, "Channel not open for content.");
- }
-}
-
-void ChannelHandler::outgoing(AMQFrame& frame)
-{
- if (getState() == OPEN) {
- frame.setChannel(id);
- out(frame);
- } else if (getState() == CLOSED) {
- throw Exception(QPID_MSG("Channel not open, can't send " << frame));
- } else if (getState() == CLOSED_BY_PEER) {
- throw ChannelException(code, text);
- }
-}
-
-void ChannelHandler::open(uint16_t _id)
-{
- id = _id;
-
- setState(OPENING);
- AMQFrame f(id, ChannelOpenBody(version));
- out(f);
-
- std::set<int> states;
- states.insert(OPEN);
- states.insert(CLOSED_BY_PEER);
- waitFor(states);
- if (getState() != OPEN) {
- throw Exception("Failed to open channel.");
- }
-}
-
-void ChannelHandler::close(uint16_t code, const std::string& message, uint16_t classId, uint16_t methodId)
-{
- setState(CLOSING);
- AMQFrame f(id, ChannelCloseBody(version, code, message, classId, methodId));
- out(f);
-}
-
-void ChannelHandler::close()
-{
- close(200, "OK", 0, 0);
- waitFor(CLOSED);
-}
-
-void ChannelHandler::handleMethod(AMQMethodBody* method)
-{
- switch (getState()) {
- case OPENING:
- if (method->isA<ChannelOpenOkBody>()) {
- setState(OPEN);
- } else {
- throw ConnectionException(504, "Channel not opened.");
- }
- break;
- case CLOSING:
- if (method->isA<ChannelCloseOkBody>()) {
- setState(CLOSED);
- } //else just ignore it
- break;
- case CLOSED:
- throw ConnectionException(504, "Channel is closed.");
- default:
- throw Exception("Unexpected state encountered in ChannelHandler!");
- }
-}