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