You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2009/11/23 12:20:31 UTC
svn commit: r883305 -
/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
Author: gsim
Date: Mon Nov 23 11:20:31 2009
New Revision: 883305
URL: http://svn.apache.org/viewvc?rev=883305&view=rev
Log:
QPID-664: Use subject if specified as binding key when a map filter is specified
Modified:
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp?rev=883305&r1=883304&r2=883305&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp Mon Nov 23 11:20:31 2009
@@ -209,9 +209,10 @@
Bindings bindings;
void bindSpecial(const std::string& exchangeType);
- void bind(const Variant& filter);
- void bind(const Variant::Map& filter);
- void bind(const Variant::List& filter);
+ void bind(const std::string& subject);
+ void bind(const std::string& subject, const Variant& filter);
+ void bind(const std::string& subject, const Variant::Map& filter);
+ void bind(const std::string& subject, const Variant::List& filter);
void add(const std::string& exchange, const std::string& key, const FieldTable& options = EMPTY_FIELD_TABLE);
static std::string getSubscriptionName(const std::string& base, const Variant& name);
};
@@ -405,9 +406,7 @@
const Variant& filter = address.getOption(FILTER);
if (!filter.isVoid()) {
- //TODO: if both subject _and_ filter are specified, combine in
- //some way; for now we just ignore the subject in that case.
- bind(filter);
+ bind(address.getSubject(), filter);
} else if (address.hasSubject()) {
//Note: This will not work for headers- or xml- exchange;
//fanout exchange will do no filtering.
@@ -537,32 +536,39 @@
}
}
-void Subscription::bind(const Variant& filter)
+void Subscription::bind(const std::string& subject)
+{
+ add(name, subject);
+}
+
+void Subscription::bind(const std::string& subject, const Variant& filter)
{
switch (filter.getType()) {
case qpid::messaging::VAR_MAP:
- bind(filter.asMap());
+ bind(subject, filter.asMap());
break;
case qpid::messaging::VAR_LIST:
- bind(filter.asList());
+ bind(subject, filter.asList());
break;
default:
+ //TODO: if both subject _and_ filter are specified, combine in
+ //some way; for now we just ignore the subject in that case.
add(name, filter.asString());
break;
}
}
-void Subscription::bind(const Variant::Map& filter)
+void Subscription::bind(const std::string& subject, const Variant::Map& filter)
{
qpid::framing::FieldTable arguments;
translate(filter, arguments);
- add(name, queue, arguments);
+ add(name, subject.empty() ? queue : subject, arguments);
}
-void Subscription::bind(const Variant::List& filter)
+void Subscription::bind(const std::string& subject, const Variant::List& filter)
{
for (Variant::List::const_iterator i = filter.begin(); i != filter.end(); ++i) {
- bind(*i);
+ bind(subject, *i);
}
}
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org