/* * * 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. * */ #ifndef _ChannelHandler_ #define _ChannelHandler_ #include "StateManager.h" #include "ChainableFrameHandler.h" #include "qpid/framing/amqp_framing.h" namespace qpid { namespace client { class ChannelHandler : private StateManager, public ChainableFrameHandler { enum STATES {OPENING, OPEN, CLOSING, CLOSED}; framing::ProtocolVersion version; uint16_t id; void handleMethod(framing::AMQMethodBody::shared_ptr method); template bool isA(framing::AMQBody::shared_ptr body) { return body->type() == framing::METHOD_BODY && boost::shared_polymorphic_cast(body)->isA(); } void close(uint16_t code, const std::string& message, uint16_t classId, uint16_t methodId); public: typedef boost::function CloseListener; ChannelHandler(); void incoming(framing::AMQFrame& frame); void outgoing(framing::AMQFrame& frame); void open(uint16_t id); void close(); CloseListener onClose; }; }} #endif