Author: gsim
Date: Wed Feb 21 11:23:25 2007
New Revision: 510159

URL: http://svn.apache.org/viewvc?view=rev&rev=510159
Log:
Check for existing channel on channel_open


Modified:
    incubator/qpid/trunk/qpid/cpp/lib/broker/SessionHandlerImpl.cpp

Modified: incubator/qpid/trunk/qpid/cpp/lib/broker/SessionHandlerImpl.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/lib/broker/SessionHandlerImpl.cpp?view=diff&rev=510159&r1=510158&r2=510159
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/lib/broker/SessionHandlerImpl.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/lib/broker/SessionHandlerImpl.cpp Wed Feb 21 
11:23:25 2007
@@ -222,9 +222,15 @@
 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*/){}         


Reply via email to