You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/11/07 22:06:16 UTC

qpid-proton git commit: PROTON-1681: [cpp] access to terminus capabilities

Repository: qpid-proton
Updated Branches:
  refs/heads/master 51cda9d5d -> 3904225c7


PROTON-1681: [cpp] access to terminus capabilities


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/3904225c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/3904225c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/3904225c

Branch: refs/heads/master
Commit: 3904225c78ae4dfc1b65b42b453a430fc479b2c0
Parents: 51cda9d
Author: Alan Conway <ac...@redhat.com>
Authored: Tue Nov 7 17:00:01 2017 -0500
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue Nov 7 17:00:01 2017 -0500

----------------------------------------------------------------------
 .../cpp/include/proton/source_options.hpp       |  3 +++
 .../cpp/include/proton/target_options.hpp       |  3 +++
 .../bindings/cpp/include/proton/terminus.hpp    |  4 ++++
 .../bindings/cpp/src/connection_driver_test.cpp | 21 ++++++++++++++------
 proton-c/bindings/cpp/src/node_options.cpp      | 15 ++++++++++++--
 proton-c/bindings/cpp/src/terminus.cpp          |  9 +++++++--
 6 files changed, 45 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3904225c/proton-c/bindings/cpp/include/proton/source_options.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/source_options.hpp b/proton-c/bindings/cpp/include/proton/source_options.hpp
index 92804c3..5b527ad 100644
--- a/proton-c/bindings/cpp/include/proton/source_options.hpp
+++ b/proton-c/bindings/cpp/include/proton/source_options.hpp
@@ -84,6 +84,9 @@ class source_options {
     /// messages.
     PN_CPP_EXTERN source_options& filters(const source::filter_map&);
 
+    /// Extension capabilities that are supported/requested
+    PN_CPP_EXTERN source_options& capabilities(const std::vector<symbol>&);
+
   private:
     void apply(source&) const;
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3904225c/proton-c/bindings/cpp/include/proton/target_options.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/target_options.hpp b/proton-c/bindings/cpp/include/proton/target_options.hpp
index 428465f..f9b8895 100644
--- a/proton-c/bindings/cpp/include/proton/target_options.hpp
+++ b/proton-c/bindings/cpp/include/proton/target_options.hpp
@@ -75,6 +75,9 @@ class target_options {
     /// target::LINK_CLOSE.
     PN_CPP_EXTERN target_options& expiry_policy(enum target::expiry_policy);
 
+    /// Extension capabilities that are supported/requested
+    PN_CPP_EXTERN target_options& capabilities(const std::vector<symbol>&);
+
   private:
     void apply(target&) const;
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3904225c/proton-c/bindings/cpp/include/proton/terminus.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/terminus.hpp b/proton-c/bindings/cpp/include/proton/terminus.hpp
index 760dcd4..d0f755c 100644
--- a/proton-c/bindings/cpp/include/proton/terminus.hpp
+++ b/proton-c/bindings/cpp/include/proton/terminus.hpp
@@ -28,6 +28,7 @@
 #include <proton/terminus.h>
 
 #include <string>
+#include <vector>
 
 /// @file
 /// @copybrief proton::terminus
@@ -96,6 +97,9 @@ class terminus {
     /// terminus.  See also lifetime_policy.
     PN_CPP_EXTERN value node_properties() const;
 
+    /// Extension capabilities that are supported/requested
+    PN_CPP_EXTERN std::vector<symbol> capabilities() const;
+
   protected:
     pn_terminus_t *pn_object() const { return object_; }
   private:

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3904225c/proton-c/bindings/cpp/src/connection_driver_test.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/connection_driver_test.cpp b/proton-c/bindings/cpp/src/connection_driver_test.cpp
index 9197caf..b176e3e 100644
--- a/proton-c/bindings/cpp/src/connection_driver_test.cpp
+++ b/proton-c/bindings/cpp/src/connection_driver_test.cpp
@@ -34,6 +34,7 @@
 #include "proton/source.hpp"
 #include "proton/source_options.hpp"
 #include "proton/target.hpp"
+#include "proton/target_options.hpp"
 #include "proton/transport.hpp"
 #include "proton/types_fwd.hpp"
 #include "proton/uuid.hpp"
@@ -45,6 +46,7 @@ namespace {
 
 using namespace std;
 using namespace proton;
+using namespace test;
 
 using proton::io::connection_driver;
 using proton::io::const_buffer;
@@ -330,21 +332,25 @@ void test_spin_interrupt() {
 }
 
 void test_link_options() {
-    // Propagation of link properties, including filters
+    // Propagation of link and terminus properties
     record_handler ha, hb;
     driver_pair d(ha, hb);
 
+    std::vector<proton::symbol> caps;
+    caps.push_back("foo");
+    caps.push_back("bar");
+
     source::filter_map f;
     f.put("xx", "xxx");
     ASSERT_EQUAL(1U, f.size());
     d.a.connection().open_sender(
-        "x", sender_options().name("_x").source(source_options().filters(f)));
+        "x", sender_options().name("_x").target(target_options().capabilities(caps)));
 
     f.clear();
     f.put("yy", "yyy");
     ASSERT_EQUAL(1U, f.size());
     d.a.connection().open_receiver(
-        "y", receiver_options().name("_y").source(source_options().filters(f)));
+        "y", receiver_options().name("_y").source(source_options().filters(f).capabilities(caps)));
 
     while (ha.senders.size()+ha.receivers.size() < 2 ||
            hb.senders.size()+hb.receivers.size() < 2)
@@ -354,21 +360,24 @@ void test_link_options() {
     ASSERT_EQUAL("_x", ax.name());
     // TODO PROTON-1679 - the following assertion should pass.
     // ASSERT_EQUAL("x", ax.target().address());
+    // ASSERT_EQUAL(many<proton::symbol>() + "foo" + "bar", ax.target().capabilities());
 
     proton::receiver ay = quick_pop(ha.receivers);
     ASSERT_EQUAL("_y", ay.name());
     // TODO PROTON-1679 - the following assertion should pass.
     // ASSERT_EQUAL("y", ay.source().address());
+    // ASSERT_EQUAL(many<proton::symbol>() + "foo" + "bar", ay.source().capabilities());
 
     proton::receiver bx = quick_pop(hb.receivers);
     ASSERT_EQUAL("x", bx.target().address());
+    ASSERT_EQUAL(many<proton::symbol>() + "foo" + "bar", bx.target().capabilities());
     ASSERT_EQUAL("_x", bx.name());
-    f = bx.source().filters();
-    ASSERT_EQUAL(1U, f.size());
-    ASSERT_EQUAL(value("xxx"), bx.source().filters().get("xx"));
+    ASSERT_EQUAL("", bx.source().address());
+    ASSERT_EQUAL(many<proton::symbol>(), bx.source().capabilities());
 
     proton::sender by = quick_pop(hb.senders);
     ASSERT_EQUAL("y", by.source().address());
+    ASSERT_EQUAL(many<proton::symbol>() + "foo" + "bar", by.source().capabilities());
     ASSERT_EQUAL("_y", by.name());
     f = by.source().filters();
     ASSERT_EQUAL(1U, f.size());

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3904225c/proton-c/bindings/cpp/src/node_options.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/node_options.cpp b/proton-c/bindings/cpp/src/node_options.cpp
index 894ce9c..2156509 100644
--- a/proton-c/bindings/cpp/src/node_options.cpp
+++ b/proton-c/bindings/cpp/src/node_options.cpp
@@ -19,10 +19,11 @@
  *
  */
 
-#include "proton/source_options.hpp"
+#include "proton/codec/vector.hpp"
 #include "proton/source.hpp"
-#include "proton/target_options.hpp"
+#include "proton/source_options.hpp"
 #include "proton/target.hpp"
+#include "proton/target_options.hpp"
 
 #include "proton_bits.hpp"
 
@@ -94,6 +95,7 @@ class source_options::impl {
     option<enum source::expiry_policy> expiry_policy;
     option<enum source::distribution_mode> distribution_mode;
     option<source::filter_map> filters;
+    option<std::vector<symbol> > capabilities;
 
     void apply(source& s) {
         node_address(s, address, dynamic);
@@ -105,6 +107,9 @@ class source_options::impl {
             // Applied at most once via source_option.  No need to clear.
             value(pn_terminus_filter(unwrap(s))) = filters.value;
         }
+        if (capabilities.set) {
+            value(pn_terminus_capabilities(unwrap(s))) = capabilities.value;
+        }
     }
 };
 
@@ -126,6 +131,7 @@ source_options& source_options::timeout(duration d) { impl_->timeout = d; return
 source_options& source_options::expiry_policy(enum source::expiry_policy m) { impl_->expiry_policy = m; return *this; }
 source_options& source_options::distribution_mode(enum source::distribution_mode m) { impl_->distribution_mode = m; return *this; }
 source_options& source_options::filters(const source::filter_map &map) { impl_->filters = map; return *this; }
+source_options& source_options::capabilities(const std::vector<symbol>& c) { impl_->capabilities = c; return *this; }
 
 void source_options::apply(source& s) const { impl_->apply(s); }
 
@@ -138,11 +144,15 @@ class target_options::impl {
     option<enum target::durability_mode> durability_mode;
     option<duration> timeout;
     option<enum target::expiry_policy> expiry_policy;
+    option<std::vector<symbol> > capabilities;
 
     void apply(target& t) {
         node_address(t, address, dynamic);
         node_durability(t, durability_mode);
         node_expiry(t, expiry_policy, timeout);
+        if (capabilities.set) {
+            value(pn_terminus_capabilities(unwrap(t))) = capabilities.value;
+        }
     }
 };
 
@@ -162,6 +172,7 @@ target_options& target_options::dynamic(bool b) { impl_->dynamic = b; return *th
 target_options& target_options::durability_mode(enum target::durability_mode m) { impl_->durability_mode = m; return *this; }
 target_options& target_options::timeout(duration d) { impl_->timeout = d; return *this; }
 target_options& target_options::expiry_policy(enum target::expiry_policy m) { impl_->expiry_policy = m; return *this; }
+target_options& target_options::capabilities(const std::vector<symbol>& c) { impl_->capabilities = c; return *this; }
 
 void target_options::apply(target& s) const { impl_->apply(s); }
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3904225c/proton-c/bindings/cpp/src/terminus.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/terminus.cpp b/proton-c/bindings/cpp/src/terminus.cpp
index c751fd0..413c909 100644
--- a/proton-c/bindings/cpp/src/terminus.cpp
+++ b/proton-c/bindings/cpp/src/terminus.cpp
@@ -19,10 +19,10 @@
  *
  */
 
-#include "proton/terminus.hpp"
-
 #include "proton/duration.hpp"
+#include "proton/terminus.hpp"
 #include "proton/value.hpp"
+#include "proton/codec/vector.hpp"
 
 #include "proton_bits.hpp"
 
@@ -52,4 +52,9 @@ value terminus::node_properties() const {
     return value(pn_terminus_properties(object_));
 }
 
+std::vector<symbol> terminus::capabilities() const {
+    value caps(pn_terminus_capabilities(object_));
+    return caps.empty() ? std::vector<symbol>() : caps.get<std::vector<symbol> >();
+}
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org