summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2012-11-16 21:32:11 +0000
committerGordon Sim <gsim@apache.org>2012-11-16 21:32:11 +0000
commitc2e7cfde679e83a51598fc65ebe5b45299d59a94 (patch)
treeeb35a55e3978d28f0bc73bb10db01dcb9c19ff27 /cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
parent969e6bcd810f82dec73333d5bf4df4d96b68adc5 (diff)
downloadqpid-python-c2e7cfde679e83a51598fc65ebe5b45299d59a94.tar.gz
QPID-4368: Small improvements to setting and checking filter descriptors
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1410576 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/messaging/amqp/ReceiverContext.cpp')
-rw-r--r--cpp/src/qpid/messaging/amqp/ReceiverContext.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp b/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
index 33ddabfc75..0a8f139839 100644
--- a/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
+++ b/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
@@ -21,6 +21,7 @@
#include "ReceiverContext.h"
#include "qpid/messaging/Duration.h"
#include "qpid/messaging/Message.h"
+#include "qpid/amqp/descriptors.h"
extern "C" {
#include <proton/engine.h>
}
@@ -94,6 +95,15 @@ pn_bytes_t convert(const std::string& s)
result.size = s.size();
return result;
}
+bool hasWildcards(const std::string& key)
+{
+ return key.find('*') != std::string::npos || key.find('#') != std::string::npos;
+}
+
+uint64_t getFilterDescriptor(const std::string& key)
+{
+ return hasWildcards(key) ? qpid::amqp::filters::LEGACY_TOPIC_FILTER_CODE : qpid::amqp::filters::LEGACY_DIRECT_FILTER_CODE;
+}
}
void ReceiverContext::configure() const
@@ -110,7 +120,7 @@ void ReceiverContext::configure(pn_terminus_t* source) const
pn_data_put_symbol(filter, convert("subject"));
pn_data_put_described(filter);
pn_data_enter(filter);
- pn_data_put_ulong(filter, 0x0000468C00000001/*LEGACY_TOPIC_FILTER*/);
+ pn_data_put_ulong(filter, getFilterDescriptor(address.getSubject()));
pn_data_put_string(filter, convert(address.getSubject()));
pn_data_exit(filter);
pn_data_exit(filter);