summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
diff options
context:
space:
mode:
authorAndrew Stitcher <astitcher@apache.org>2013-03-04 21:08:36 +0000
committerAndrew Stitcher <astitcher@apache.org>2013-03-04 21:08:36 +0000
commit8d952718247e3c96d180181da95d65b3dc7db035 (patch)
tree718d55279c93eb7c4c24e38b436c659c873d0850 /qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
parent7ac7cac4d371ff8498a5fd46b74278a6aa395c73 (diff)
downloadqpid-python-8d952718247e3c96d180181da95d65b3dc7db035.tar.gz
QPID-4558: Selectors for C++ broker
- Added in amqp 1.0 support that uses a filter for the selector - This change requires at least qpid-proton 0.4 (or a lot of warning messages are produced by the broker) git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1452524 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp')
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp b/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
index 9605cacac1..eb0a6e20aa 100644
--- a/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
+++ b/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
@@ -22,6 +22,7 @@
#include "qpid/broker/amqp/Header.h"
#include "qpid/broker/amqp/Translation.h"
#include "qpid/broker/Queue.h"
+#include "qpid/broker/Selector.h"
#include "qpid/broker/TopicKeyNode.h"
#include "qpid/sys/OutputControl.h"
#include "qpid/amqp/MessageEncoder.h"
@@ -170,6 +171,11 @@ void Outgoing::setSubjectFilter(const std::string& f)
subjectFilter = f;
}
+void Outgoing::setSelectorFilter(const std::string& f)
+{
+ selector.reset(new Selector(f));
+}
+
namespace {
bool match(TokenIterator& filter, TokenIterator& target)
@@ -213,7 +219,8 @@ bool match(const std::string& filter, const std::string& target)
bool Outgoing::filter(const qpid::broker::Message& m)
{
- return subjectFilter.empty() || subjectFilter == m.getRoutingKey() || match(subjectFilter, m.getRoutingKey());
+ return (subjectFilter.empty() || subjectFilter == m.getRoutingKey() || match(subjectFilter, m.getRoutingKey()))
+ && (!selector || selector->filter(m));
}
void Outgoing::cancel() {}