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 2009/06/11 01:38:18 UTC

svn commit: r783571 - /qpid/trunk/qpid/cpp/src/qpid/client/SessionImpl.cpp

Author: gsim
Date: Wed Jun 10 23:38:18 2009
New Revision: 783571

URL: http://svn.apache.org/viewvc?rev=783571&view=rev
Log:
Ensure that messages sent by clusters update client are correctly fragmented based on the max frame size for the session.


Modified:
    qpid/trunk/qpid/cpp/src/qpid/client/SessionImpl.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/client/SessionImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/SessionImpl.cpp?rev=783571&r1=783570&r2=783571&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/SessionImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/SessionImpl.cpp Wed Jun 10 23:38:18 2009
@@ -289,15 +289,24 @@
 }
 
 namespace {
-// Functor for FrameSet::map to send header + content frames but, not method frames.
-struct SendContentFn {
-    FrameHandler& handler;
-    void operator()(const AMQFrame& f) {
-        if (!f.getMethod()) 
-            handler(const_cast<AMQFrame&>(f));
+// Adaptor to make FrameSet look like MethodContent; used in cluster update client
+struct MethodContentAdaptor : MethodContent
+{
+    AMQHeaderBody header;
+    const std::string content;
+
+    MethodContentAdaptor(const FrameSet& f) : header(*f.getHeaders()), content(f.getContent()) {}
+
+    AMQHeaderBody getHeader() const
+    {
+        return header;
+    }
+    const std::string& getData() const
+    {
+        return content;
     }
-    SendContentFn(FrameHandler& h) : handler(h) {}
 };
+
 }
     
 Future SessionImpl::send(const AMQBody& command, const FrameSet& content) {
@@ -318,8 +327,8 @@
     frame.setEof(false);
     handleOut(frame);
 
-    SendContentFn send(out);
-    content.map(send);
+    MethodContentAdaptor c(content);
+    sendContent(c);
     return f;
 }
 



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org