summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-09-11 16:05:46 +0000
committerGordon Sim <gsim@apache.org>2013-09-11 16:05:46 +0000
commit1ed5e671332e9f98b671f19b62d32c0cf1b834d7 (patch)
tree7c9c844a6cc2a1ea07ff69a09f91fe8f83da6706 /qpid/cpp
parent44879ab727ee024c21318ac438bf37951fbdc451 (diff)
downloadqpid-python-1ed5e671332e9f98b671f19b62d32c0cf1b834d7.tar.gz
QPID-5130: map type to exchange-type when translating old x-declare clause into node properties
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1521919 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp b/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
index 9b0fd18ed1..603ead7074 100644
--- a/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
+++ b/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
@@ -96,6 +96,7 @@ const std::string X_DECLARE("x-declare");
const std::string X_BINDINGS("x-bindings");
const std::string X_SUBSCRIBE("x-subscribe");
const std::string ARGUMENTS("arguments");
+const std::string EXCHANGE_TYPE("exchange-type");
const std::vector<std::string> RECEIVER_MODES = boost::assign::list_of<std::string>(ALWAYS) (RECEIVER);
const std::vector<std::string> SENDER_MODES = boost::assign::list_of<std::string>(ALWAYS) (SENDER);
@@ -225,6 +226,18 @@ void flatten(Variant::Map& base, const std::string& nested)
base.erase(i);
}
}
+bool replace(Variant::Map& map, const std::string& original, const std::string& desired)
+{
+ Variant::Map::iterator i = map.find(original);
+ if (i != map.end()) {
+ map[desired] = i->second;
+ map.erase(original);
+ return true;
+ } else {
+ return false;
+ }
+}
+
void write(pn_data_t* data, const Variant& value);
void write(pn_data_t* data, const Variant::Map& map)
@@ -331,6 +344,7 @@ AddressHelper::AddressHelper(const Address& address) :
Variant::Map::iterator i = node.find(X_DECLARE);
if (i != node.end()) {
Variant::Map x_declare = i->second.asMap();
+ replace(x_declare, TYPE, EXCHANGE_TYPE);
flatten(x_declare, ARGUMENTS);
add(properties, x_declare);
node.erase(i);