Alan

This isn't functional, but it starts to fill in the handler stubs - look
it over to make sure it's in the correct direction

Andrew
==== Patch <InitialStubFilling> level 2
Source: 8427bd24-ae5a-4eba-a324-d2fc9c9c6c77:/local/qpid.0-9.ams:800
Target: 13f79535-47bb-0310-9956-ffa450edef68:/incubator/qpid/branches/qpid.0-9:496926
        (http://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9)
Log:
 [EMAIL PROTECTED]:  andrew | 2007-01-12 00:35:16 +0000
 Branch for my work on Qpid.0-9
 [EMAIL PROTECTED]:  andrew | 2007-01-12 00:59:28 +0000
 Added in empty implementation of handler class for protocol Message class
 [EMAIL PROTECTED]:  andrew | 2007-01-17 01:25:16 +0000
 * Added Test for new MessageHandlerImpl (but no actual tests yet)
 * Filled in lots of the blanks in the MessageHandlerImpl with code
 stolen from the BasicHandlerImpl
 [EMAIL PROTECTED]:  andrew | 2007-01-17 17:34:13 +0000
 Updated to latest upstream changes

=== cpp/tests/MessageHandlerTest.cpp
==================================================================
--- cpp/tests/MessageHandlerTest.cpp	(revision 496926)
+++ cpp/tests/MessageHandlerTest.cpp	(patch InitialStubFilling level 2)
@@ -0,0 +1,57 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+//#include <iostream>
+//#include <AMQP_HighestVersion.h>
+#include <amqp_framing.h>
+#include <qpid_test_plugin.h>
+
+#include <BrokerAdapter.h>
+
+using namespace qpid::framing;
+using namespace qpid::broker;
+
+class MessageHandlerTest : public CppUnit::TestCase  
+{
+    CPPUNIT_TEST_SUITE(MessageHandlerTest);
+    CPPUNIT_TEST(testOpenMethod);
+    CPPUNIT_TEST_SUITE_END();
+private:
+	
+public:
+        
+    MessageHandlerTest()
+    {
+    }
+
+    void testOpenMethod() 
+    {
+        //AMQFrame frame(highestProtocolVersion, 0, method);
+        //TestBodyHandler handler(method);
+        //handler.handleBody(frame.getBody());
+    }
+
+};
+
+
+// Make this test suite a plugin.
+CPPUNIT_PLUGIN_IMPLEMENT();
+CPPUNIT_TEST_SUITE_REGISTRATION(MessageHandlerTest);
+
=== cpp/tests/Makefile.am
==================================================================
--- cpp/tests/Makefile.am	(revision 496926)
+++ cpp/tests/Makefile.am	(patch InitialStubFilling level 2)
@@ -30,6 +30,7 @@
   InMemoryContentTest	\
   LazyLoadedContentTest	\
   MessageBuilderTest	\
+  MessageHandlerTest	\
   MessageTest		\
   QueueRegistryTest	\
   QueueTest		\
=== cpp/lib/broker/BrokerAdapter.cpp
==================================================================
--- cpp/lib/broker/BrokerAdapter.cpp	(revision 496926)
+++ cpp/lib/broker/BrokerAdapter.cpp	(patch InitialStubFilling level 2)
@@ -393,7 +393,9 @@
     assert(0);                // FIXME aconway 2007-01-04: 0-9 feature
 }
 
+//
 // Message class method handlers
+//
 void
 BrokerAdapter::MessageHandlerImpl::append( u_int16_t /*channel*/,
                                                 const string& /*reference*/,
@@ -404,10 +406,14 @@
 
 
 void
-BrokerAdapter::MessageHandlerImpl::cancel( u_int16_t /*channel*/,
-                                                const string& /*destination*/ )
+BrokerAdapter::MessageHandlerImpl::cancel( u_int16_t channel,
+                                                const string& destination )
 {
     assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+
+    connection.getChannel(channel).cancel(destination);
+
+    connection.client->getMessageHandler()->ok(channel);
 }
 
 void
@@ -426,16 +432,35 @@
 }
 
 void
-BrokerAdapter::MessageHandlerImpl::consume( u_int16_t /*channel*/,
-                                                 u_int16_t /*ticket*/,
-                                                 const string& /*queue*/,
-                                                 const string& /*destination*/,
-                                                 bool /*noLocal*/,
-                                                 bool /*noAck*/,
-                                                 bool /*exclusive*/,
-                                                 const qpid::framing::FieldTable& /*filter*/ )
+BrokerAdapter::MessageHandlerImpl::consume( u_int16_t channelId,
+                    u_int16_t /*ticket*/,
+                    const string& queueName,
+                    const string& destination,
+                    bool noLocal,
+                    bool noAck,
+                    bool exclusive,
+                    const qpid::framing::FieldTable& filter )
 {
     assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+	
+    Queue::shared_ptr queue = connection.getQueue(queueName, channelId);    
+    Channel& channel = connection.getChannel(channelId);
+    if(!destination.empty() && channel.exists(destination)){
+        throw ConnectionException(530, "Consumer tags must be unique");
+    }
+
+    try{
+        string newTag = destination;
+        channel.consume(newTag, queue, !noAck, exclusive, noLocal ? &connection : 0, &filter);
+
+	    connection.client->getMessageHandler()->ok(channelId);
+
+        //allow messages to be dispatched if required as there is now a consumer:
+        queue->dispatch();
+    }catch(ExclusiveAccessException& e){
+        if(exclusive) throw ChannelException(403, "Exclusive access cannot be granted");
+        else throw ChannelException(403, "Access would violate previously granted exclusivity");
+    }
 }
 
 void
@@ -445,13 +470,22 @@
 }
 
 void
-BrokerAdapter::MessageHandlerImpl::get( u_int16_t /*channel*/,
+BrokerAdapter::MessageHandlerImpl::get( u_int16_t channelId,
                                              u_int16_t /*ticket*/,
-                                             const string& /*queue*/,
+                                             const string& queueName,
                                              const string& /*destination*/,
-                                             bool /*noAck*/ )
+                                             bool noAck )
 {
     assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+
+    Queue::shared_ptr queue = connection.getQueue(queueName, channelId);
+    
+    // FIXME: get is probably Basic specific
+    if(!connection.getChannel(channelId).get(queue, !noAck)){
+
+        connection.client->getMessageHandler()->empty(channelId);
+    }
+    
 }
 
 void
@@ -475,19 +509,28 @@
 }
 
 void
-BrokerAdapter::MessageHandlerImpl::qos( u_int16_t /*channel*/,
-                                             u_int32_t /*prefetchSize*/,
-                                             u_int16_t /*prefetchCount*/,
-                                             bool /*global*/ )
+BrokerAdapter::MessageHandlerImpl::qos( u_int16_t channel,
+                    u_int32_t prefetchSize,
+                    u_int16_t prefetchCount,
+                    bool /*global*/ )
 {
     assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+    
+    //TODO: handle global
+    connection.getChannel(channel).setPrefetchSize(prefetchSize);
+    connection.getChannel(channel).setPrefetchCount(prefetchCount);
+    
+    connection.client->getMessageHandler()->ok(channel);
 }
 
 void
-BrokerAdapter::MessageHandlerImpl::recover( u_int16_t /*channel*/,
-                                                 bool /*requeue*/ )
+BrokerAdapter::MessageHandlerImpl::recover( u_int16_t channel,
+                                                 bool requeue )
 {
     assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+
+    connection.getChannel(channel).recover(requeue);
+    
 }
 
 void
@@ -507,31 +550,40 @@
 }
 
 void
-BrokerAdapter::MessageHandlerImpl::transfer( u_int16_t /*channel*/,
-                                                  u_int16_t /*ticket*/,
-                                                  const string& /*destination*/,
-                                                  bool /*redelivered*/,
-                                                  bool /*immediate*/,
-                                                  u_int64_t /*ttl*/,
-                                                  u_int8_t /*priority*/,
-                                                  u_int64_t /*timestamp*/,
-                                                  u_int8_t /*deliveryMode*/,
-                                                  u_int64_t /*expiration*/,
-                                                  const string& /*exchange*/,
-                                                  const string& /*routingKey*/,
-                                                  const string& /*messageId*/,
-                                                  const string& /*correlationId*/,
-                                                  const string& /*replyTo*/,
-                                                  const string& /*contentType*/,
-                                                  const string& /*contentEncoding*/,
-                                                  const string& /*userId*/,
-                                                  const string& /*appId*/,
-                                                  const string& /*transactionId*/,
-                                                  const string& /*securityToken*/,
-                                                  const qpid::framing::FieldTable& /*applicationHeaders*/,
-                                                  qpid::framing::Content /*body*/ )
+BrokerAdapter::MessageHandlerImpl::transfer( u_int16_t channel,
+                    u_int16_t /*ticket*/,
+                    const string& /*destination*/,
+                    bool /*redelivered*/,
+                    bool immediate,
+                    u_int64_t /*ttl*/,
+                    u_int8_t /*priority*/,
+                    u_int64_t /*timestamp*/,
+                    u_int8_t /*deliveryMode*/,
+                    u_int64_t /*expiration*/,
+                    const string& exchangeName,
+                    const string& routingKey,
+                    const string& /*messageId*/,
+                    const string& /*correlationId*/,
+                    const string& /*replyTo*/,
+                    const string& /*contentType*/,
+                    const string& /*contentEncoding*/,
+                    const string& /*userId*/,
+                    const string& /*appId*/,
+                    const string& /*transactionId*/,
+                    const string& /*securityToken*/,
+                    const qpid::framing::FieldTable& /*applicationHeaders*/,
+                    qpid::framing::Content /*body*/ )
 {
-    assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+	assert(0);                // FIXME astitcher 2007-01-11: 0-9 feature
+
+	Exchange::shared_ptr exchange = exchangeName.empty() ?
+		connection.broker.getExchanges().getDefault() : connection.broker.getExchanges().get(exchangeName);
+	if(exchange){
+	    Message* msg = new Message(&connection, exchangeName, routingKey, false /*mandatory?*/, immediate);
+	    connection.getChannel(channel).handlePublish(msg, exchange);
+	}else{
+	    throw ChannelException(404, "Exchange not found '" + exchangeName + "'");
+	}
 }
 
 }} // namespace qpid::broker

==== BEGIN SVK PATCH BLOCK ====
Version: svk 1.08 (linux)

eJydWNlv48YZVwM4CwtoGzRtggYtOrtVDNmxDlISSdGN44OUrLWt9VraXEAgDMmRxJoiuTzsVaJN
TPpYrXe7TdAUPYACTVEgbwGKAn1o/4wCRdHn/hF56EO/IWVb3theJ7ZhaWa++X3HfNdMxWnOLTCD
+fn8IMXkB403V0VxA3tq91WmOEhxA6LpnuWkSgODbBMjVRgYVidVHJi4R2DVtXxHpV887HSIR7/o
6hbx5ucZgBNiODmCOIaNUBXsWaabKkfwLc8hJMUMhIXyYKFA/1oppjxwCaxEsC2HbOuubpnAXsjn
gQCoGdht2cRsOZblwQJfFhZYujM/UA3LJS0KDTMLJUrNpkCdiFzTHaKCPH3Yo9p2hBTvjviWRrtP
yYCAShXBFM6BKVOYnEdcz40YxWAROXcOOR+RG7oyRnwhZ5Zy5ihUMSUMsKa12rpBUgX2lGdunbgu
7pAVbGoGcZowl431KrRS7CDDxKKUjs0VAbDMOADeInQ2i3uRis+QqUCNysWr2LaNfssj9zyNGB6m
crZggSlRT6onEonHr4TewYf70rf+IU38upL8RP7+kby0V9n8vZR7KGelic+kl8KVd4NK8PLKR4fV
8uoPqpOHUv6BvBRUJ/fkMHEkOdXA/VReqgYv1sLv71fDhaEc1PbWQn9PmpAmnsivHKwE3ccre699
JlVkVX7hkTQRrFxfC67dDCdW9q6H6/uZfTmY+5s08Ym09/N9KSThag8WpOBGNZz9rRRUDqXwxiM5
G0gTt/fFoPLcb9YPc4+r4U/2bx6yj+uH5JfyobZ62P2F/ODHIZAfSQ++HVYP7wVvPXg9kB9kvpCG
L/xxc/hceHtYCKQH3ztqDN+rDKVfVYYvB/KwID3k4D9dh4/KkKUfB/Xh3bDyUIShdPT8I+nw3l7l
8O0h8DxcG75fOboGkPvV4WRYGSaDxhFfPQITHb0rHdUD+eilPfloPawO33tSDdeB38Pqg5eDlaHw
sfTwR42Hzw+lg++8ObwZ5GaSCK3pKjFdoiHPQl6XoEUbq/DRsNreDnYIqli+qWEPQgulFxuVaQRD
4iDLJJaDehZQqJbpObriw+EjA+EOhGqPmJ6bRahBSP1Ws7YsI/AeTadsdnSvC4x0F+1YzhZqwyZw
Wh0bSDdh0HNIBzuabnYA1+47eqfrIWvHJI7b1W2AbDYqLojat/xZ9CbMstk8SnvdGzem53q4j0zL
Q76LyD2V2B5AAkrPNnRsqrD3HUvxMMxhZLUR9hDqep4t5nI7OztZnLWcTi63BsLWG3IGYO+YBsQN
cshdH3xbQ0ofUWfWVawYBBl4B5B2HN0DWWdd3QUD4RuLDVRr3EBLi41aYxa9VWuu3LrTRG8tbm4u
1ps1uYFubaLlW3Wp1qzdqsOoghbr76zW6tIsImAYMCy5ZztgE51ork1Uva2rwMrs+BC/qGNtE8e0
idPTQTCIZmToPR0snUvmcj/VTdXwNYJ+plsu5Evcm19cv73RWgET0ojvzidx767daju4ByLftXWt
RaO7ZRt+R19yrC3iLGrY9ojjuzR5u+AJBIninDKXTKoGBpZfTSRIRLavgFHQsm3fMXVPFJexSxBK
fgDOhdDyxsadeq3ZasqNZqtxp9aU09Nz6VuQZtaJ17W0llyXYCZpO/o29oiYnEyK6en7yW1L11B6
OpcDHSogMUEk3d1wLM9SLWMW5WdRb8nS+qibzqazHUK3JO+DnGAIBNkKub7uETjo5MbanWqt3qqt
b6zJ63K9uSlXa43m5mJyoTheCqKcR3MoJE6Ob2tqnufKGoN5pV1o5xlBKQscgxWNsIoSl4wLsluJ
IjACz/BMucSqjMK3+TwrKJoiFDDDawW1XYbsysXZ7+ObH+PkROKASxwkHk0dpCLLnitZhKvxZY1T
S21BKIMgKqe126om5DmOEdhyQSifFDP+nLICM6O6klOi047KzzNSOXcCKZwpD6P6cgqWO+NBo/rC
Pwuev9SWAmUjqCVSZBlGYHiBKAzfLguqwuY1nmDC50s4xQr5UmzN4PNG8IUevPLpWuLLzcSfE2H3
S3t3M1EPnvi7TmL/vf99tBuy0TBIBN/91zt/SXj//uFuMJUI3/1PMxHcCg5ff5Swg6D3u0Q/CD88
ineG1xIH14Kj7V0lcTf4hNtPBK/+87ndYD5a/Xvi4MXg08RfE9Xg4dxuUE4sB3+Y3w0XEqvBn0q7
IZ+Qgycf7oZKov7fYng9+JyNHDQOIxQHVS8KBNSNg8oFAhW+m8SYjSLo6/xAKoaQhOiHAJ9CGsSn
bka5OzlaNcHyMISI8ZZjJukRs+msCkkSxmO7IC6f3qgaOuT2zDwAnE0G6enMvLV1gjY3+lLTztfC
b+mmx3AtD+Vm4oZwJnc+5Vmd7vrEJ3XIB1chHlPlfHLFsgwoGWuWii+w9ohiUd26ZB2qjeG7+val
QtGEK4qj7CuKFZ0YWpOWkilaHCFmJsfEzZKe7fXT02hqCo0smSX3dOjFxs9n7OvcCedjcsrV75G0
SXaauDMbW24WXY+VGZP52ADoDTR1etKQ2CHJTsWiUUeYHKnyNT2hpo15woVneWrmSI/bdEUU3S50
IFrL9pyYFr3+lA9HdOlTHHTCazo2SPQPIq5Se3tdFhFsQdB5QIVVwPJ9tIRdqFzHhTYi1tvp65cG
CmDT2fQZe05Pf5BMjp33lYwUn/HTIt9Pjp3iJcFTYCF4bIe0CdyZGvr7FzjfaaAd0y5DR+fNnprn
m0R3EsotLdHJM1lfFM/uqkHrJYqQ7Wnfkh4T5RsnuDjeaEsGxr9KUjtmPtoysvGzrfuV1BQxzs2A
PxIDogY+L0pYEaXe68HtEjqaS3hwxZiHZ1wEFZEJERU0SBY0m/1LSY8RdejePNyzKfH4AjSXuhPl
i6tlW0gSYKnOlROuY/m0HV4l/atQ52Z6sbvULrTl0xtUy3GIEWlw9U0OgcaiaV2dh+lBFDT7NqFb
nl72XXDsK/OGpubqxJ6DTRerX087l6g+dYwmBOIzjvWSEhRJSu82lPkKwXDHcy8CewpmObYXQCjQ
kc/k0DT0/pPJSXnkPGfy+LFHQSofd66TevdGcnJyLKTj3pJG9jGam47Sr0Ta2Dc82CGiq9Cnx7lB
FpiEPH88Bbk7Km6j5DWDem4H5IPCeTyVHiuMs2ejYtznURsbcPcBv8b0zgwt7htgw9NcQPmOTuOy
nBV3ghv0WuV20yDMKUuKcJ8AExB58v65F4WoaS6rDFcmpXYJC+0SEYgA3TJbKBcUpqhwPMlHL0sl
hhsgh2cLC23fVbs6FhG9VDqg9wCx+TyfyTMZhkX5vFgoiQyHXsvDTxItgZuq3ejq3uvH13joF26D
V2TzmXKSQhafDVkqi6xwDLmoaXDDhgt15AdgMduIHhHihwe4rY+641HLTFnbo8vg2W6acueES7nz
KM+I7LhCMyP+0YWWYo8d/VgpQ2nF96BLQRCiPvRL0dsY6hNvmkJUdMOIdTAsmAaZ6XOKApf3LZfO
0tE5mNF7iGppUM1czzKIidqO1Yuoo+5kjBZ0o2+bl+vG8GKhKDKFY93u2OCJ8fMO5E2qoG/HzwNo
FCBJ+gxbg6u7jo2G5ytUEXDo+Xl2kGLZ+IG2Gb2yiiLc8KH2udh4lRukigMbe1244jlkGwa+r2v0
VTZn0G4yd3fkD1ncc+NX2VSBGwhFllc0tpjBpIQzRaLgDC7AUGPbahl+OZXn56fZwUX4hcIgp5uq
T5+HnYgH3D+pOxL3hGOKGxTLXJnlKEOm0ObLpUIpU+QVJZMvMEBQLnGZdhsXS3mo5m1OSHH5Kwkm
nqOaCIr9H295QBc=
==== END SVK PATCH BLOCK ====

Reply via email to