summaryrefslogtreecommitdiff
path: root/cpp/src/qpid
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2010-01-12 12:02:38 +0000
committerGordon Sim <gsim@apache.org>2010-01-12 12:02:38 +0000
commitf47385682d2e9a82d007481e2c6d171a68dffa5f (patch)
tree272cc16ac4b05ce23aab1dd22fcd751c8dd6f3db /cpp/src/qpid
parent0528688ee4f8831b05576e2448d0835d6375ee82 (diff)
downloadqpid-python-f47385682d2e9a82d007481e2c6d171a68dffa5f.tar.gz
QPID-664: Added some of the missing standard message headers. Added two new test utilities for sending and receiving with the new API (both still works in progress).
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@898296 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid')
-rw-r--r--cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp16
-rw-r--r--cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp12
-rw-r--r--cpp/src/qpid/messaging/Message.cpp17
-rw-r--r--cpp/src/qpid/messaging/MessageImpl.cpp14
-rw-r--r--cpp/src/qpid/messaging/MessageImpl.h6
5 files changed, 57 insertions, 8 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
index e66dc5915c..669ffd7e9a 100644
--- a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
+++ b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp
@@ -264,22 +264,32 @@ void IncomingMessages::MessageTransfer::retrieve(qpid::messaging::Message* messa
parent.retrieve(content, message);
}
+
+namespace {
+//TODO: unify conversion to and from 0-10 message that is currently
+//split between IncomingMessages and OutgoingMessage
+const std::string SUBJECT("subject");
+}
+
void populateHeaders(qpid::messaging::Message& message,
const DeliveryProperties* deliveryProperties,
const MessageProperties* messageProperties)
{
if (deliveryProperties) {
- message.setSubject(deliveryProperties->getRoutingKey());
- //TODO: convert other delivery properties
+ message.setTtl(deliveryProperties->getTtl());
+ message.setDurable(deliveryProperties->getDeliveryMode() == DELIVERY_MODE_PERSISTENT);
+ MessageImplAccess::get(message).redelivered = deliveryProperties->getRedelivered();
}
if (messageProperties) {
message.setContentType(messageProperties->getContentType());
if (messageProperties->hasReplyTo()) {
message.setReplyTo(AddressResolution::convert(messageProperties->getReplyTo()));
}
+ message.setSubject(messageProperties->getApplicationHeaders().getAsString(SUBJECT));
message.getHeaders().clear();
translate(messageProperties->getApplicationHeaders(), message.getHeaders());
- //TODO: convert other message properties
+ message.setCorrelationId(messageProperties->getCorrelationId());
+ message.setUserId(messageProperties->getUserId());
}
}
diff --git a/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp b/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp
index abd4f4c28c..4065a16c6d 100644
--- a/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp
+++ b/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp
@@ -25,6 +25,7 @@
#include "qpid/messaging/Address.h"
#include "qpid/messaging/Message.h"
#include "qpid/messaging/MessageImpl.h"
+#include "qpid/framing/enum.h"
namespace qpid {
namespace client {
@@ -32,20 +33,25 @@ namespace amqp0_10 {
using qpid::messaging::Address;
using qpid::messaging::MessageImplAccess;
+using namespace qpid::framing::message;
void OutgoingMessage::convert(const qpid::messaging::Message& from)
{
//TODO: need to avoid copying as much as possible
message.setData(from.getContent());
message.getMessageProperties().setContentType(from.getContentType());
+ message.getMessageProperties().setCorrelationId(from.getCorrelationId());
+ message.getMessageProperties().setUserId(from.getUserId());
const Address& address = from.getReplyTo();
if (address) {
message.getMessageProperties().setReplyTo(AddressResolution::convert(address));
}
translate(from.getHeaders(), message.getMessageProperties().getApplicationHeaders());
- //TODO: set other message properties
- message.getDeliveryProperties().setRoutingKey(from.getSubject());
- //TODO: set other delivery properties
+ message.getDeliveryProperties().setTtl(from.getTtl());
+ if (from.getDurable()) {
+ message.getDeliveryProperties().setDeliveryMode(DELIVERY_MODE_PERSISTENT);
+ }
+
}
namespace {
diff --git a/cpp/src/qpid/messaging/Message.cpp b/cpp/src/qpid/messaging/Message.cpp
index deb40b6aa3..e4b28c3b2c 100644
--- a/cpp/src/qpid/messaging/Message.cpp
+++ b/cpp/src/qpid/messaging/Message.cpp
@@ -41,6 +41,23 @@ const std::string& Message::getSubject() const { return impl->getSubject(); }
void Message::setContentType(const std::string& s) { impl->setContentType(s); }
const std::string& Message::getContentType() const { return impl->getContentType(); }
+void Message::setMessageId(const std::string& id) { impl->messageId = id; }
+const std::string& Message::getMessageId() const { return impl->messageId; }
+
+void Message::setUserId(const std::string& id) { impl->userId = id; }
+const std::string& Message::getUserId() const { return impl->userId; }
+
+void Message::setCorrelationId(const std::string& id) { impl->correlationId = id; }
+const std::string& Message::getCorrelationId() const { return impl->correlationId; }
+
+void Message::setTtl(uint64_t ttl) { impl->ttl = ttl; }
+uint64_t Message::getTtl() const { return impl->ttl; }
+
+void Message::setDurable(bool durable) { impl->durable = durable; }
+bool Message::getDurable() const { return impl->durable; }
+
+bool Message::isRedelivered() const { return impl->redelivered; }
+
const VariantMap& Message::getHeaders() const { return impl->getHeaders(); }
VariantMap& Message::getHeaders() { return impl->getHeaders(); }
diff --git a/cpp/src/qpid/messaging/MessageImpl.cpp b/cpp/src/qpid/messaging/MessageImpl.cpp
index e17fccd64f..5d754ac487 100644
--- a/cpp/src/qpid/messaging/MessageImpl.cpp
+++ b/cpp/src/qpid/messaging/MessageImpl.cpp
@@ -28,8 +28,18 @@ namespace {
const std::string EMPTY_STRING = "";
}
-MessageImpl::MessageImpl(const std::string& c) : bytes(c), internalId(0) {}
-MessageImpl::MessageImpl(const char* chars, size_t count) : bytes(chars, count), internalId(0) {}
+MessageImpl::MessageImpl(const std::string& c) :
+ ttl(0),
+ durable(false),
+ redelivered(false),
+ bytes(c),
+ internalId(0) {}
+MessageImpl::MessageImpl(const char* chars, size_t count) :
+ ttl(0),
+ durable (false),
+ redelivered(false),
+ bytes(chars, count),
+ internalId(0) {}
void MessageImpl::setReplyTo(const Address& d) { replyTo = d; }
const Address& MessageImpl::getReplyTo() const { return replyTo; }
diff --git a/cpp/src/qpid/messaging/MessageImpl.h b/cpp/src/qpid/messaging/MessageImpl.h
index 4939cdc5cc..bdbc1f6a1e 100644
--- a/cpp/src/qpid/messaging/MessageImpl.h
+++ b/cpp/src/qpid/messaging/MessageImpl.h
@@ -33,6 +33,12 @@ struct MessageImpl
Address replyTo;
std::string subject;
std::string contentType;
+ std::string messageId;
+ std::string userId;
+ std::string correlationId;
+ uint64_t ttl;
+ bool durable;
+ bool redelivered;
Variant::Map headers;
std::string bytes;