Author: gsim
Date: Fri Aug 30 12:31:45 2013
New Revision: 1518955

URL: http://svn.apache.org/r1518955
Log:
QPID-5040: fix for string and symbol types on AmqpValue section (also clear 
message on fetch())

Modified:
    qpid/trunk/qpid/cpp/examples/messaging/drain.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.h
    qpid/trunk/qpid/cpp/src/qpid/messaging/Receiver.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp
    qpid/trunk/qpid/cpp/src/tests/qpid-receive.cpp

Modified: qpid/trunk/qpid/cpp/examples/messaging/drain.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/drain.cpp?rev=1518955&r1=1518954&r2=1518955&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/drain.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/drain.cpp Fri Aug 30 12:31:45 2013
@@ -92,11 +92,15 @@ int main(int argc, char** argv)
             int i = 0;
 
             while (receiver.fetch(message, timeout)) {
-                std::cout << "Message(properties=" << message.getProperties() 
<< ", content='" ;
+                std::cout << "Message(properties=" << message.getProperties();
+                if (!message.getSubject().empty()) {
+                    std::cout << ", subject='" << message.getSubject() << "'";
+                }
+                std::cout << ", content='";
                 if (message.getContentType() == "amqp/map") {
                     std::cout << message.getContentObject().asMap();
                 } else {
-                    std::cout << message.getContent();
+                    std::cout << message.getContentObject();
                 }
                 std::cout  << "')" << std::endl;
                 session.acknowledge();

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.cpp?rev=1518955&r1=1518954&r2=1518955&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.cpp Fri Aug 30 12:31:45 
2013
@@ -47,6 +47,27 @@ MessageImpl::MessageImpl(const char* cha
     contentDecoded(false),
     internalId(0) {}
 
+void MessageImpl::clear()
+{
+    replyTo = Address();
+    subject = std::string();
+    contentType = std::string();
+    messageId = std::string();
+    userId= std::string();
+    correlationId = std::string();
+    priority = 0;
+    ttl = 0;
+    durable = false;
+    redelivered = false;
+    headers = qpid::types::Variant::Map();
+
+    bytes = std::string();
+    content = qpid::types::Variant();
+    contentDecoded = false;
+    encoded = boost::shared_ptr<const qpid::messaging::amqp::EncodedMessage>();
+    internalId = 0;
+}
+
 void MessageImpl::setReplyTo(const Address& d)
 {
     replyTo = d;

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.h
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.h?rev=1518955&r1=1518954&r2=1518955&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/MessageImpl.h Fri Aug 30 12:31:45 
2013
@@ -61,6 +61,7 @@ class MessageImpl
     MessageImpl(const std::string& c);
     MessageImpl(const char* chars, size_t count);
 
+    void clear();
     void setReplyTo(const Address& d);
     QPID_MESSAGING_EXTERN const Address& getReplyTo() const;
 

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/Receiver.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/Receiver.cpp?rev=1518955&r1=1518954&r2=1518955&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/Receiver.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/Receiver.cpp Fri Aug 30 12:31:45 2013
@@ -21,6 +21,7 @@
 #include "qpid/messaging/Receiver.h"
 #include "qpid/messaging/Address.h"
 #include "qpid/messaging/Message.h"
+#include "qpid/messaging/MessageImpl.h"
 #include "qpid/messaging/ReceiverImpl.h"
 #include "qpid/messaging/Session.h"
 #include "qpid/messaging/PrivateImplRef.h"
@@ -36,7 +37,11 @@ Receiver::~Receiver() { PI::dtor(*this);
 Receiver& Receiver::operator=(const Receiver& s) { return PI::assign(*this, 
s); }
 bool Receiver::get(Message& message, Duration timeout) { return 
impl->get(message, timeout); }
 Message Receiver::get(Duration timeout) { return impl->get(timeout); }
-bool Receiver::fetch(Message& message, Duration timeout) { return 
impl->fetch(message, timeout); }
+bool Receiver::fetch(Message& message, Duration timeout)
+{
+    MessageImplAccess::get(message).clear();
+    return impl->fetch(message, timeout);
+}
 Message Receiver::fetch(Duration timeout) { return impl->fetch(timeout); }
 void Receiver::setCapacity(uint32_t c) { impl->setCapacity(c); }
 uint32_t Receiver::getCapacity() { return impl->getCapacity(); }

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp?rev=1518955&r1=1518954&r2=1518955&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp Fri Aug 30 
12:31:45 2013
@@ -185,15 +185,14 @@ void EncodedMessage::getCorrelationId(st
 }
 void EncodedMessage::getBody(std::string& raw, qpid::types::Variant& c) const
 {
-    //TODO: based on section type, populate content
     if (!content.isVoid()) {
         c = content;//integer types, floats, bool etc
         //TODO: populate raw data?
     } else {
         if (bodyType.empty()
             || bodyType == qpid::amqp::typecodes::BINARY_NAME
-            || bodyType == qpid::amqp::typecodes::STRING_NAME
-            || bodyType == qpid::amqp::typecodes::SYMBOL_NAME)
+            || bodyType == qpid::types::encodings::UTF8
+            || bodyType == qpid::types::encodings::ASCII)
         {
             c = std::string(body.data, body.size);
             c.setEncoding(bodyType);

Modified: qpid/trunk/qpid/cpp/src/tests/qpid-receive.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/qpid-receive.cpp?rev=1518955&r1=1518954&r2=1518955&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/qpid-receive.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/qpid-receive.cpp Fri Aug 30 12:31:45 2013
@@ -69,6 +69,7 @@ struct Options : public qpid::Options
     string readyAddress;
     uint receiveRate;
     std::string replyto;
+    bool noReplies;
 
     Options(const std::string& argv0=std::string())
         : qpid::Options("Options"),
@@ -91,7 +92,8 @@ struct Options : public qpid::Options
           reportTotal(false),
           reportEvery(0),
           reportHeader(true),
-          receiveRate(0)
+          receiveRate(0),
+          noReplies(false)
     {
         addOptions()
             ("broker,b", qpid::optValue(url, "URL"), "url of broker to connect 
to")
@@ -116,6 +118,7 @@ struct Options : public qpid::Options
             ("ready-address", qpid::optValue(readyAddress, "ADDRESS"), "send a 
message to this address when ready to receive")
             ("receive-rate", qpid::optValue(receiveRate,"N"), "Receive at rate 
of N messages/second. 0 means receive as fast as possible.")
             ("reply-to", qpid::optValue(replyto, "REPLY-TO"), "specify 
reply-to address on response messages")
+            ("ignore-reply-to", qpid::optValue(noReplies), "Do not send 
replies even if reply-to is set")
             ("help", qpid::optValue(help), "print this usage statement");
         add(log);
     }
@@ -248,7 +251,7 @@ int main(int argc, char ** argv)
                 } else if (opts.ackFrequency && (count % opts.ackFrequency == 
0)) {
                     session.acknowledge();
                 }
-                if (msg.getReplyTo()) { // Echo message back to reply-to 
address.
+                if (msg.getReplyTo() && !opts.noReplies) { // Echo message 
back to reply-to address.
                     Sender& s = replyTo[msg.getReplyTo().str()];
                     if (s.isNull()) {
                         s = session.createSender(msg.getReplyTo());
@@ -263,8 +266,6 @@ int main(int argc, char ** argv)
                     int64_t delay = qpid::sys::Duration(qpid::sys::now(), 
waitTill);
                     if (delay > 0) 
qpid::sys::usleep(delay/qpid::sys::TIME_USEC);
                 }
-                // Clear out message properties & content for next iteration.
-                msg = Message(); // TODO aconway 2010-12-01: should be done by 
fetch
             }
             if (opts.reportTotal) reporter.report();
             if (opts.tx) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to