diff options
| author | Gordon Sim <gsim@apache.org> | 2010-06-25 17:25:46 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2010-06-25 17:25:46 +0000 |
| commit | c3a6e87c3f21009135b5826de6917586477e0589 (patch) | |
| tree | b351c0d8a301b6eb7a90d1a586479f2d428ce9f5 /cpp/src/qpid/client | |
| parent | e9920e89d298dbcc5cd01d0c79616353eb750c43 (diff) | |
| download | qpid-python-c3a6e87c3f21009135b5826de6917586477e0589.tar.gz | |
QPID-2698: recognise special property names for amqp 0-10 specific message- and delivery- properties
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@958044 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client')
| -rw-r--r-- | cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp | 19 | ||||
| -rw-r--r-- | cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp | 32 |
2 files changed, 48 insertions, 3 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp index 30cb6340a0..2c00e6fae8 100644 --- a/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp +++ b/cpp/src/qpid/client/amqp0_10/IncomingMessages.cpp @@ -290,6 +290,10 @@ namespace { //TODO: unify conversion to and from 0-10 message that is currently //split between IncomingMessages and OutgoingMessage const std::string SUBJECT("qpid.subject"); + +const std::string X_APP_ID("x-amqp-0-10.app-id"); +const std::string X_ROUTING_KEY("x-amqp-0-10.routing-key"); +const std::string X_CONTENT_ENCODING("x-amqp-0-10.content-encoding"); } void populateHeaders(qpid::messaging::Message& message, @@ -312,6 +316,21 @@ void populateHeaders(qpid::messaging::Message& message, translate(messageProperties->getApplicationHeaders(), message.getProperties()); message.setCorrelationId(messageProperties->getCorrelationId()); message.setUserId(messageProperties->getUserId()); + if (messageProperties->hasMessageId()) { + message.setMessageId(messageProperties->getMessageId().str()); + } + //expose 0-10 specific items through special properties: + // app-id, content-encoding + if (messageProperties->hasAppId()) { + message.getProperties()[X_APP_ID] = messageProperties->getAppId(); + } + if (messageProperties->hasContentEncoding()) { + message.getProperties()[X_CONTENT_ENCODING] = messageProperties->getContentEncoding(); + } + // routing-key, others? + if (deliveryProperties && deliveryProperties->hasRoutingKey()) { + message.getProperties()[X_ROUTING_KEY] = deliveryProperties->getRoutingKey(); + } } } diff --git a/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp b/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp index c22eb5403f..82358961c8 100644 --- a/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp +++ b/cpp/src/qpid/client/amqp0_10/OutgoingMessage.cpp @@ -21,10 +21,12 @@ #include "qpid/client/amqp0_10/OutgoingMessage.h" #include "qpid/client/amqp0_10/AddressResolution.h" #include "qpid/amqp_0_10/Codecs.h" +#include "qpid/types/Variant.h" #include "qpid/messaging/Address.h" #include "qpid/messaging/Message.h" #include "qpid/messaging/MessageImpl.h" #include "qpid/framing/enum.h" +#include <sstream> namespace qpid { namespace client { @@ -32,9 +34,19 @@ namespace amqp0_10 { using qpid::messaging::Address; using qpid::messaging::MessageImplAccess; +using qpid::types::Variant; using namespace qpid::framing::message; using namespace qpid::amqp_0_10; +namespace { +//TODO: unify conversion to and from 0-10 message that is currently +//split between IncomingMessages and OutgoingMessage +const std::string SUBJECT("qpid.subject"); +const std::string X_APP_ID("x-amqp-0-10.app-id"); +const std::string X_ROUTING_KEY("x-amqp-0-10.routing-key"); +const std::string X_CONTENT_ENCODING("x-amqp-0-10.content-encoding"); +} + void OutgoingMessage::convert(const qpid::messaging::Message& from) { //TODO: need to avoid copying as much as possible @@ -55,10 +67,24 @@ void OutgoingMessage::convert(const qpid::messaging::Message& from) message.getDeliveryProperties().setRedelivered(true); } if (from.getPriority()) message.getDeliveryProperties().setPriority(from.getPriority()); -} -namespace { -const std::string SUBJECT("qpid.subject"); + //allow certain 0-10 specific items to be set through special properties: + // message-id, app-id, content-encoding + if (from.getMessageId().size()) { + qpid::framing::Uuid uuid; + std::istringstream data(from.getMessageId()); + data >> uuid; + message.getMessageProperties().setMessageId(uuid); + } + Variant::Map::const_iterator i; + i = from.getProperties().find(X_APP_ID); + if (i != from.getProperties().end()) { + message.getMessageProperties().setAppId(i->second.asString()); + } + i = from.getProperties().find(X_CONTENT_ENCODING); + if (i != from.getProperties().end()) { + message.getMessageProperties().setContentEncoding(i->second.asString()); + } } void OutgoingMessage::setSubject(const std::string& subject) |
