From 5a1b8a846bdfa5cb517da0c507f3dc3a8ceec25d Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Mon, 29 Jan 2007 16:13:24 +0000 Subject: * Added ClientAdapter - client side ChannelAdapter. Updated client side. * Moved ChannelAdapter initialization from ctor to init(), updated broker side. * Improved various exception messages with boost::format messages. * Removed unnecssary virtual inheritance. * Widespread: fixed incorrect non-const ProtocolVersion& parameters. * Client API: pass channels by reference, not pointer. * codegen: - MethodBodyClass.h.templ: Added CLASS_ID, METHOD_ID and isA() template. - Various: fixed non-const ProtocolVersion& parameters. * cpp/bootstrap: Allow config arguments with -build. * cpp/gen/Makefile.am: Merged codegen fixes from trunk. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@501087 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/lib/broker/BrokerAdapter.cpp | 21 +++++++++++---------- cpp/lib/broker/BrokerAdapter.h | 2 ++ cpp/lib/broker/BrokerChannel.h | 1 + cpp/lib/broker/Connection.cpp | 1 + cpp/lib/broker/Content.h | 2 +- cpp/lib/broker/InMemoryContent.cpp | 2 +- cpp/lib/broker/InMemoryContent.h | 2 +- cpp/lib/broker/LazyLoadedContent.cpp | 2 +- cpp/lib/broker/LazyLoadedContent.h | 2 +- 9 files changed, 20 insertions(+), 15 deletions(-) (limited to 'cpp/lib/broker') diff --git a/cpp/lib/broker/BrokerAdapter.cpp b/cpp/lib/broker/BrokerAdapter.cpp index 585be5f79d..5cf767a8e1 100644 --- a/cpp/lib/broker/BrokerAdapter.cpp +++ b/cpp/lib/broker/BrokerAdapter.cpp @@ -212,22 +212,21 @@ void BrokerAdapter::ServerOps::ConnectionHandlerImpl::closeOk(const MethodContex void BrokerAdapter::ServerOps::ChannelHandlerImpl::open( const MethodContext& context, const string& /*outOfBand*/){ - // FIXME aconway 2007-01-17: Assertions on all channel methods, - assertChannelNonZero(channel.getId()); - if (channel.isOpen()) - throw ConnectionException(504, "Channel already open"); channel.open(); - // FIXME aconway 2007-01-04: provide valid channel Id as per ampq 0-9 + // FIXME aconway 2007-01-04: provide valid ID as per ampq 0-9 connection.client->getChannel().openOk(context, std::string()/* ID */); } void BrokerAdapter::ServerOps::ChannelHandlerImpl::flow(const MethodContext&, bool /*active*/){} void BrokerAdapter::ServerOps::ChannelHandlerImpl::flowOk(const MethodContext&, bool /*active*/){} -void BrokerAdapter::ServerOps::ChannelHandlerImpl::close(const MethodContext& context, u_int16_t /*replyCode*/, const string& /*replyText*/, - u_int16_t /*classId*/, u_int16_t /*methodId*/){ +void BrokerAdapter::ServerOps::ChannelHandlerImpl::close( + const MethodContext& context, u_int16_t /*replyCode*/, + const string& /*replyText*/, + u_int16_t /*classId*/, u_int16_t /*methodId*/) +{ connection.client->getChannel().closeOk(context); - // FIXME aconway 2007-01-18: Following line destroys this. Ugly. + // FIXME aconway 2007-01-18: Following line will "delete this". Ugly. connection.closeChannel(channel.getId()); } @@ -499,13 +498,12 @@ BrokerAdapter::ServerOps::ChannelHandlerImpl::resume( BrokerAdapter::BrokerAdapter( Channel* ch, Connection& c, Broker& b ) : - ChannelAdapter(c.getOutput(), ch->getId()), channel(ch), connection(c), broker(b), serverOps(new ServerOps(*ch,c,b)) { - assert(ch); + init(ch->getId(), c.getOutput(), ch->getVersion()); } void BrokerAdapter::handleMethodInContext( @@ -544,6 +542,9 @@ void BrokerAdapter::handleHeartbeat(AMQHeartbeatBody::shared_ptr) { } +bool BrokerAdapter::isOpen() const { + return channel->isOpen(); +} }} // namespace qpid::broker diff --git a/cpp/lib/broker/BrokerAdapter.h b/cpp/lib/broker/BrokerAdapter.h index 37eba7d52b..339a7f6b48 100644 --- a/cpp/lib/broker/BrokerAdapter.h +++ b/cpp/lib/broker/BrokerAdapter.h @@ -52,6 +52,8 @@ class BrokerAdapter : public qpid::framing::ChannelAdapter void handleContent(boost::shared_ptr); void handleHeartbeat(boost::shared_ptr); + bool isOpen() const; + private: void handleMethodInContext( boost::shared_ptr method, diff --git a/cpp/lib/broker/BrokerChannel.h b/cpp/lib/broker/BrokerChannel.h index 7cfb96241d..e578101cfa 100644 --- a/cpp/lib/broker/BrokerChannel.h +++ b/cpp/lib/broker/BrokerChannel.h @@ -108,6 +108,7 @@ class Channel : private MessageBuilder::CompletionHandler { MessageStore* const _store = 0, u_int64_t stagingThreshold = 0); ~Channel(); bool isOpen() const { return opened; } + const framing::ProtocolVersion& getVersion() const { return version; } void open() { opened = true; } u_int16_t getId() const { return id; } void setDefaultQueue(Queue::shared_ptr queue){ defaultQueue = queue; } diff --git a/cpp/lib/broker/Connection.cpp b/cpp/lib/broker/Connection.cpp index 84bd23b2a7..d34422c93d 100644 --- a/cpp/lib/broker/Connection.cpp +++ b/cpp/lib/broker/Connection.cpp @@ -77,6 +77,7 @@ void Connection::initiated(qpid::framing::ProtocolInitiation* header) { MethodContext(0, &getAdapter(0)), header->getMajor(), header->getMinor(), properties, mechanisms, locales); + getAdapter(0).init(0, *out, client->getProtocolVersion()); } void Connection::idleOut(){} diff --git a/cpp/lib/broker/Content.h b/cpp/lib/broker/Content.h index 8aacf02959..a793bd8f72 100644 --- a/cpp/lib/broker/Content.h +++ b/cpp/lib/broker/Content.h @@ -32,7 +32,7 @@ namespace qpid { public: virtual void add(qpid::framing::AMQContentBody::shared_ptr data) = 0; virtual u_int32_t size() = 0; - virtual void send(qpid::framing::ProtocolVersion& version, qpid::framing::OutputHandler* out, int channel, u_int32_t framesize) = 0; + virtual void send(const qpid::framing::ProtocolVersion& version, qpid::framing::OutputHandler* out, int channel, u_int32_t framesize) = 0; virtual void encode(qpid::framing::Buffer& buffer) = 0; virtual void destroy() = 0; virtual ~Content(){} diff --git a/cpp/lib/broker/InMemoryContent.cpp b/cpp/lib/broker/InMemoryContent.cpp index e6db6b0539..12721fe86e 100644 --- a/cpp/lib/broker/InMemoryContent.cpp +++ b/cpp/lib/broker/InMemoryContent.cpp @@ -39,7 +39,7 @@ u_int32_t InMemoryContent::size() return sum; } -void InMemoryContent::send(qpid::framing::ProtocolVersion& version, OutputHandler* out, int channel, u_int32_t framesize) +void InMemoryContent::send(const qpid::framing::ProtocolVersion& version, OutputHandler* out, int channel, u_int32_t framesize) { for (content_iterator i = content.begin(); i != content.end(); i++) { if ((*i)->size() > framesize) { diff --git a/cpp/lib/broker/InMemoryContent.h b/cpp/lib/broker/InMemoryContent.h index 1db1acd7e1..72c6b46a7f 100644 --- a/cpp/lib/broker/InMemoryContent.h +++ b/cpp/lib/broker/InMemoryContent.h @@ -35,7 +35,7 @@ namespace qpid { public: void add(qpid::framing::AMQContentBody::shared_ptr data); u_int32_t size(); - void send(qpid::framing::ProtocolVersion& version, qpid::framing::OutputHandler* out, int channel, u_int32_t framesize); + void send(const qpid::framing::ProtocolVersion& version, qpid::framing::OutputHandler* out, int channel, u_int32_t framesize); void encode(qpid::framing::Buffer& buffer); void destroy(); ~InMemoryContent(){} diff --git a/cpp/lib/broker/LazyLoadedContent.cpp b/cpp/lib/broker/LazyLoadedContent.cpp index 3bf1b374ea..2c7a764ec9 100644 --- a/cpp/lib/broker/LazyLoadedContent.cpp +++ b/cpp/lib/broker/LazyLoadedContent.cpp @@ -37,7 +37,7 @@ u_int32_t LazyLoadedContent::size() return 0;//all content is written as soon as it is added } -void LazyLoadedContent::send(qpid::framing::ProtocolVersion& version, OutputHandler* out, int channel, u_int32_t framesize) +void LazyLoadedContent::send(const qpid::framing::ProtocolVersion& version, OutputHandler* out, int channel, u_int32_t framesize) { if (expectedSize > framesize) { for (u_int64_t offset = 0; offset < expectedSize; offset += framesize) { diff --git a/cpp/lib/broker/LazyLoadedContent.h b/cpp/lib/broker/LazyLoadedContent.h index 80f8cce4eb..5322e5e711 100644 --- a/cpp/lib/broker/LazyLoadedContent.h +++ b/cpp/lib/broker/LazyLoadedContent.h @@ -34,7 +34,7 @@ namespace qpid { LazyLoadedContent(MessageStore* const store, Message* const msg, u_int64_t expectedSize); void add(qpid::framing::AMQContentBody::shared_ptr data); u_int32_t size(); - void send(qpid::framing::ProtocolVersion& version, qpid::framing::OutputHandler* out, int channel, u_int32_t framesize); + void send(const qpid::framing::ProtocolVersion& version, qpid::framing::OutputHandler* out, int channel, u_int32_t framesize); void encode(qpid::framing::Buffer& buffer); void destroy(); ~LazyLoadedContent(){} -- cgit v1.2.1