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