summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-02-21 19:23:25 +0000
committerGordon Sim <gsim@apache.org>2007-02-21 19:23:25 +0000
commit06078d52b5df0c3eb155a2895d5331880791212e (patch)
tree6e2d7fb2303ee3f29496c9f468a730681a70beed
parent735f111e1274bb737b3ff59f42e7f0002fec7ad6 (diff)
downloadqpid-python-06078d52b5df0c3eb155a2895d5331880791212e.tar.gz
Check for existing channel on channel_open
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@510159 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--cpp/lib/broker/SessionHandlerImpl.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/cpp/lib/broker/SessionHandlerImpl.cpp b/cpp/lib/broker/SessionHandlerImpl.cpp
index 26cdfebad2..25f3fbc10f 100644
--- a/cpp/lib/broker/SessionHandlerImpl.cpp
+++ b/cpp/lib/broker/SessionHandlerImpl.cpp
@@ -222,9 +222,15 @@ void SessionHandlerImpl::ConnectionHandlerImpl::closeOk(u_int16_t /*channel*/){
void SessionHandlerImpl::ChannelHandlerImpl::open(u_int16_t channel, const string& /*outOfBand*/){
- parent->channels[channel] = new Channel(parent->client->getProtocolVersion() , parent->context, channel, parent->framemax,
- parent->queues->getStore(), parent->settings.stagingThreshold);
- parent->client->getChannel().openOk(channel);
+ if (parent->channels[channel] == 0) {
+ parent->channels[channel] = new Channel(parent->client->getProtocolVersion() , parent->context, channel, parent->framemax,
+ parent->queues->getStore(), parent->settings.stagingThreshold);
+ parent->client->getChannel().openOk(channel);
+ } else {
+ std::stringstream out;
+ out << "Channel already open: " << channel;
+ throw ConnectionException(504, out.str());
+ }
}
void SessionHandlerImpl::ChannelHandlerImpl::flow(u_int16_t /*channel*/, bool /*active*/){}