You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2007/02/21 20:23:26 UTC

svn commit: r510159 - /incubator/qpid/trunk/qpid/cpp/lib/broker/SessionHandlerImpl.cpp

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*/){}