From 46b15e2c2f9e454fd7041f1e6ad723d093bee052 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 12 Sep 2007 14:49:12 +0000 Subject: In ClientChannel: Use subscribe and flush in place of get; use per-subscriber flow control for managing prefetches. In brokers Session: set credit to 0 when subscription is created (modified python tests accordingly) git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@574979 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/ChannelHandler.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'cpp/src/qpid/client/ChannelHandler.cpp') diff --git a/cpp/src/qpid/client/ChannelHandler.cpp b/cpp/src/qpid/client/ChannelHandler.cpp index 754b0544c6..c9b7a68f38 100644 --- a/cpp/src/qpid/client/ChannelHandler.cpp +++ b/cpp/src/qpid/client/ChannelHandler.cpp @@ -36,7 +36,9 @@ void ChannelHandler::incoming(AMQFrame& frame) ChannelCloseBody* closeBody= dynamic_cast(body->getMethod()); if (closeBody) { - setState(CLOSED); + setState(CLOSED_BY_PEER); + code = closeBody->getReplyCode(); + text = closeBody->getReplyText(); if (onClose) { onClose(closeBody->getReplyCode(), closeBody->getReplyText()); } @@ -65,8 +67,10 @@ void ChannelHandler::outgoing(AMQFrame& frame) if (getState() == OPEN) { frame.setChannel(id); out(frame); - } else { + } else if (getState() == CLOSED) { throw Exception("Channel not open"); + } else if (getState() == CLOSED_BY_PEER) { + throw ChannelException(code, text); } } @@ -80,7 +84,7 @@ void ChannelHandler::open(uint16_t _id) std::set states; states.insert(OPEN); - states.insert(CLOSED); + states.insert(CLOSED_BY_PEER); waitFor(states); if (getState() != OPEN) { throw Exception("Failed to open channel."); -- cgit v1.2.1