#ifndef _framing_MethodContext_h #define _framing_MethodContext_h /* * * Copyright (c) 2006 The Apache Software Foundation * * Licensed 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 #include "OutputHandler.h" #include "ProtocolVersion.h" namespace qpid { namespace framing { class BodyHandler; class AMQMethodBody; class ChannelAdapter; /** * Invocation context for an AMQP method. * * It provides the method being processed and the channel on which * it arrived. * * All Handler functions take a MethodContext as the last parameter. */ struct MethodContext { typedef boost::shared_ptr BodyPtr; MethodContext(ChannelAdapter* ch=0, BodyPtr method=BodyPtr()) : channel(ch), methodBody(method) {} /** * Channel on which the method being processed arrived. * 0 if the method was constructed by the caller * rather than received from a channel. */ ChannelAdapter* channel; /** * Body of the method being processed. * It's useful for passing around instead of unpacking all its parameters. * It's also provides the request ID when constructing a response. */ BodyPtr methodBody; /** * Return methodBody's request ID. * It is an error to call this if methodBody is not a request. */ RequestId getRequestId() const; }; // FIXME aconway 2007-02-01: Method context only required on Handler // functions, not on Proxy functions. If we add set/getChannel(ChannelAdapter*) // on AMQBody and set it during decodeing then we could get rid of the context. }} // namespace qpid::framing #endif /*!_framing_MethodContext_h*/