diff options
author | Gordon Sim <gsim@apache.org> | 2007-02-21 19:23:25 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2007-02-21 19:23:25 +0000 |
commit | 06078d52b5df0c3eb155a2895d5331880791212e (patch) | |
tree | 6e2d7fb2303ee3f29496c9f468a730681a70beed | |
parent | 735f111e1274bb737b3ff59f42e7f0002fec7ad6 (diff) | |
download | qpid-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.cpp | 12 |
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*/){} |