You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2016/04/19 00:06:01 UTC

qpid-proton git commit: PROTON-1180: [C++ binding] endpoint changes: - Implement boolean state predicates: - uninitialized(), - local_active(), remote_active() - closed() - These are the only ones used in the current code, but may still need a bi

Repository: qpid-proton
Updated Branches:
  refs/heads/master 288b1a6f7 -> a5db6a1ed


PROTON-1180: [C++ binding] endpoint changes:
- Implement boolean state predicates:
  - uninitialized(),
  - local_active(), remote_active()
  - closed()
- These are the only ones used in the current code,
  but may still need a bit of consideration
- Raised close() to endpoint class
  - Needed to implement session::close() as it was never used
    so we didn't notice it wasn't implemented!


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

Branch: refs/heads/master
Commit: a5db6a1edc3c804de1bc59b512b3879e1329bb40
Parents: 288b1a6
Author: Andrew Stitcher <as...@apache.org>
Authored: Mon Apr 18 18:01:08 2016 -0400
Committer: Andrew Stitcher <as...@apache.org>
Committed: Mon Apr 18 18:01:08 2016 -0400

----------------------------------------------------------------------
 examples/cpp/broker.hpp                         |  2 +-
 .../bindings/cpp/include/proton/connection.hpp  |  8 ++---
 .../bindings/cpp/include/proton/endpoint.hpp    | 35 +++++++-------------
 proton-c/bindings/cpp/include/proton/link.hpp   |  7 ++--
 .../bindings/cpp/include/proton/session.hpp     |  5 ++-
 proton-c/bindings/cpp/src/connection.cpp        |  2 --
 .../bindings/cpp/src/connection_options.cpp     |  2 +-
 proton-c/bindings/cpp/src/connector.cpp         |  2 +-
 proton-c/bindings/cpp/src/endpoint.cpp          | 32 +++++++++++++-----
 proton-c/bindings/cpp/src/engine_test.cpp       |  2 +-
 proton-c/bindings/cpp/src/link.cpp              |  4 ---
 proton-c/bindings/cpp/src/link_options.cpp      |  2 +-
 proton-c/bindings/cpp/src/session.cpp           |  7 ++--
 13 files changed, 57 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/examples/cpp/broker.hpp
----------------------------------------------------------------------
diff --git a/examples/cpp/broker.hpp b/examples/cpp/broker.hpp
index 92b7bb5..2797e55 100644
--- a/examples/cpp/broker.hpp
+++ b/examples/cpp/broker.hpp
@@ -205,7 +205,7 @@ class broker_handler : public proton::handler {
     void remove_stale_consumers(proton::connection connection) {
         proton::link_range r = connection.links();
         for (proton::link_iterator l = r.begin(); l != r.end(); ++l) {
-            if ((l->state() & proton::endpoint::REMOTE_ACTIVE) && !!l->sender())
+            if (!!l->sender() && l->remote_active())
                 unsubscribe(l->sender());
         }
     }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/include/proton/connection.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/connection.hpp b/proton-c/bindings/cpp/include/proton/connection.hpp
index a451a9f..9167d83 100644
--- a/proton-c/bindings/cpp/include/proton/connection.hpp
+++ b/proton-c/bindings/cpp/include/proton/connection.hpp
@@ -52,7 +52,10 @@ PN_CPP_CLASS_EXTERN connection : public internal::object<pn_connection_t>, publi
     connection() : internal::object<pn_connection_t>(0) {}
 
     /// Get the state of this connection.
-    PN_CPP_EXTERN endpoint::state state() const;
+    PN_CPP_EXTERN bool uninitialized() const;
+    PN_CPP_EXTERN bool local_active() const;
+    PN_CPP_EXTERN bool remote_active() const;
+    PN_CPP_EXTERN bool closed() const;
 
     PN_CPP_EXTERN class condition condition() const;
 
@@ -114,9 +117,6 @@ PN_CPP_CLASS_EXTERN connection : public internal::object<pn_connection_t>, publi
     /// XXX not yet discussed, why this convenience but not others?
     /// opened?  should this not be on endpoint?
     ///
-    /// True if the connection is fully closed, i.e. local and remote
-    /// ends are closed.
-    bool closed() const { return (state() & LOCAL_CLOSED) && (state() & REMOTE_CLOSED); }
     /// @endcond
 
     /// @cond INTERNAL

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/include/proton/endpoint.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/endpoint.hpp b/proton-c/bindings/cpp/include/proton/endpoint.hpp
index 809c2a3..3f06ebd 100644
--- a/proton-c/bindings/cpp/include/proton/endpoint.hpp
+++ b/proton-c/bindings/cpp/include/proton/endpoint.hpp
@@ -34,33 +34,22 @@ PN_CPP_CLASS_EXTERN endpoint {
   public:
     PN_CPP_EXTERN virtual ~endpoint();
 
-    /// A bit mask of state bit values.
-    ///
-    /// A state mask is matched against an endpoint as follows: If the
-    /// state mask contains both local and remote flags, then an exact
-    /// match against those flags is performed. If state contains only
-    /// local or only remote flags, then a match occurs if any of the
-    /// local or remote flags are set respectively.
-    ///
-    /// @see connection::links, connection::sessions
-    typedef int state;
-
-    // XXX use an enum instead to handle name collision
-
-    PN_CPP_EXTERN static const state LOCAL_UNINIT;  ///< Local endpoint is uninitialized
-    PN_CPP_EXTERN static const state REMOTE_UNINIT; ///< Remote endpoint is uninitialized
-    PN_CPP_EXTERN static const state LOCAL_ACTIVE;  ///< Local endpoint is active
-    PN_CPP_EXTERN static const state REMOTE_ACTIVE; ///< Remote endpoint is active
-    PN_CPP_EXTERN static const state LOCAL_CLOSED;  ///< Local endpoint has been closed
-    PN_CPP_EXTERN static const state REMOTE_CLOSED; ///< Remote endpoint has been closed
-    PN_CPP_EXTERN static const state LOCAL_MASK;    ///< Mask including all LOCAL_ bits (UNINIT, ACTIVE, CLOSED)
-    PN_CPP_EXTERN static const state REMOTE_MASK;   ///< Mask including all REMOTE_ bits (UNINIT, ACTIVE, CLOSED)
-
-    /// XXX add endpoint state boolean operations
+    /// True if the connection is uninitialized
+    virtual bool uninitialized() const = 0;
+    /// True if the local end is active
+    virtual bool local_active() const = 0;
+    /// True if the remote end is active
+    virtual bool remote_active() const = 0;
+    /// True if the connection is fully closed, i.e. local and remote
+    /// ends are closed.
+    virtual bool closed() const = 0;
 
     /// Get the error condition of the remote endpoint.
     virtual class condition condition() const = 0;
 
+    /// Close endpoint
+    virtual void close() = 0;
+
 #if PN_CPP_HAS_CPP11
     // Make everything explicit for C++11 compilers
     endpoint() = default;

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/include/proton/link.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/link.hpp b/proton-c/bindings/cpp/include/proton/link.hpp
index 8e07704..9c7c32b 100644
--- a/proton-c/bindings/cpp/include/proton/link.hpp
+++ b/proton-c/bindings/cpp/include/proton/link.hpp
@@ -53,9 +53,10 @@ PN_CPP_CLASS_EXTERN link : public internal::object<pn_link_t> , public endpoint
     link() : internal::object<pn_link_t>(0) {}
 
     // Endpoint behaviours
-
-    /// Get the state of this link.
-    PN_CPP_EXTERN endpoint::state state() const;
+    PN_CPP_EXTERN bool uninitialized() const;
+    PN_CPP_EXTERN bool local_active() const;
+    PN_CPP_EXTERN bool remote_active() const;
+    PN_CPP_EXTERN bool closed() const;
 
     PN_CPP_EXTERN class condition condition() const;
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/include/proton/session.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/session.hpp b/proton-c/bindings/cpp/include/proton/session.hpp
index 74ffc21..01daf32 100644
--- a/proton-c/bindings/cpp/include/proton/session.hpp
+++ b/proton-c/bindings/cpp/include/proton/session.hpp
@@ -50,7 +50,10 @@ PN_CPP_CLASS_EXTERN session : public internal::object<pn_session_t>, public endp
     // Endpoint behaviours
 
     /// Get the state of this session.
-    PN_CPP_EXTERN endpoint::state state() const;
+    PN_CPP_EXTERN bool uninitialized() const;
+    PN_CPP_EXTERN bool local_active() const;
+    PN_CPP_EXTERN bool remote_active() const;
+    PN_CPP_EXTERN bool closed() const;
 
     PN_CPP_EXTERN class condition condition() const;
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/connection.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/connection.cpp b/proton-c/bindings/cpp/src/connection.cpp
index 089f750..9b5bf34 100644
--- a/proton-c/bindings/cpp/src/connection.cpp
+++ b/proton-c/bindings/cpp/src/connection.cpp
@@ -106,8 +106,6 @@ receiver connection::open_receiver(const std::string &addr, const link_options &
     return default_session().open_receiver(addr, opts);
 }
 
-endpoint::state connection::state() const { return pn_connection_state(pn_object()); }
-
 condition connection::condition() const {
     return pn_connection_remote_condition(pn_object());
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/connection_options.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/connection_options.cpp b/proton-c/bindings/cpp/src/connection_options.cpp
index c218d64..4a0956b 100644
--- a/proton-c/bindings/cpp/src/connection_options.cpp
+++ b/proton-c/bindings/cpp/src/connection_options.cpp
@@ -67,7 +67,7 @@ class connection_options::impl {
         pn_transport_t *pnt = pn_connection_transport(pnc);
         connector *outbound = dynamic_cast<connector*>(
             connection_context::get(c).handler.get());
-        bool uninit = (c.state() & endpoint::LOCAL_UNINIT);
+        bool uninit = c.uninitialized();
 
         // pnt is NULL between reconnect attempts.
         // Only apply transport options if uninit or outbound with

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/connector.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/connector.cpp b/proton-c/bindings/cpp/src/connector.cpp
index 66b51a6..3967ca4 100644
--- a/proton-c/bindings/cpp/src/connector.cpp
+++ b/proton-c/bindings/cpp/src/connector.cpp
@@ -93,7 +93,7 @@ void connector::on_transport_tail_closed(proton_event &e) {
 
 void connector::on_transport_closed(proton_event &e) {
     if (!connection_) return;
-    if (connection_.state() & endpoint::LOCAL_ACTIVE) {
+    if (connection_.local_active()) {
         if (reconnect_timer_) {
             e.connection().transport().unbind();
             transport_configured_ = false;

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/endpoint.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/endpoint.cpp b/proton-c/bindings/cpp/src/endpoint.cpp
index 9b9a3ab..86adc13 100644
--- a/proton-c/bindings/cpp/src/endpoint.cpp
+++ b/proton-c/bindings/cpp/src/endpoint.cpp
@@ -24,22 +24,36 @@
 #include "proton/connection.hpp"
 #include "proton/session.hpp"
 #include "proton/link.hpp"
-#include "proton/transport.hpp"
 
 #include "proton/connection.h"
 #include "proton/session.h"
 #include "proton/link.h"
 
+namespace {
+
+inline bool uninitialized(int state) { return state & PN_LOCAL_UNINIT; }
+inline bool local_active(int state) { return state & PN_LOCAL_ACTIVE; }
+inline bool remote_active(int state) { return state & PN_REMOTE_ACTIVE; }
+inline bool closed(int state) { return (state & PN_LOCAL_CLOSED) && (state & PN_REMOTE_CLOSED); }
+
+}
+
 namespace proton {
 
-const int endpoint::LOCAL_UNINIT = PN_LOCAL_UNINIT;
-const int endpoint::REMOTE_UNINIT = PN_REMOTE_UNINIT;
-const int endpoint::LOCAL_ACTIVE = PN_LOCAL_ACTIVE;
-const int endpoint::REMOTE_ACTIVE = PN_REMOTE_ACTIVE;
-const int endpoint::LOCAL_CLOSED = PN_LOCAL_CLOSED;
-const int endpoint::REMOTE_CLOSED = PN_REMOTE_CLOSED;
-const int endpoint::LOCAL_MASK = PN_LOCAL_MASK;
-const int endpoint::REMOTE_MASK = PN_REMOTE_MASK;
+bool connection::uninitialized() const { return ::uninitialized(pn_connection_state(pn_object())); }
+bool connection::local_active() const { return ::local_active(pn_connection_state(pn_object())); }
+bool connection::remote_active() const { return ::remote_active(pn_connection_state(pn_object())); }
+bool connection::closed() const { return ::closed(pn_connection_state(pn_object())); }
+
+bool session::uninitialized() const { return ::uninitialized(pn_session_state(pn_object())); }
+bool session::local_active() const { return ::local_active(pn_session_state(pn_object())); }
+bool session::remote_active() const { return ::remote_active(pn_session_state(pn_object())); }
+bool session::closed() const { return ::closed(pn_session_state(pn_object())); }
+
+bool link::uninitialized() const { return ::uninitialized(pn_link_state(pn_object())); }
+bool link::local_active() const { return ::local_active(pn_link_state(pn_object())); }
+bool link::remote_active() const { return ::remote_active(pn_link_state(pn_object())); }
+bool link::closed() const { return ::closed(pn_link_state(pn_object())); }
 
 endpoint::~endpoint() {}
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/engine_test.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/engine_test.cpp b/proton-c/bindings/cpp/src/engine_test.cpp
index 99a003e..cca4e60 100644
--- a/proton-c/bindings/cpp/src/engine_test.cpp
+++ b/proton-c/bindings/cpp/src/engine_test.cpp
@@ -222,7 +222,7 @@ void test_transport_close() {
     record_handler ha, hb;
     engine_pair e(ha, hb);
     e.a.connection().open();
-    while (!e.a.connection().state() & endpoint::REMOTE_ACTIVE) e.process();
+    while (!e.a.connection().remote_active()) e.process();
 
     e.a.close("oops", "engine failure");
     // Closed but we still have output data to flush so a.dispatch() is true.

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/link.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/link.cpp b/proton-c/bindings/cpp/src/link.cpp
index e31a656..b6e268b 100644
--- a/proton-c/bindings/cpp/src/link.cpp
+++ b/proton-c/bindings/cpp/src/link.cpp
@@ -99,10 +99,6 @@ void link::detach_handler() {
     pn_record_set_handler(record, 0);
 }
 
-endpoint::state link::state() const {
-    return pn_link_state(pn_object());
-}
-
 condition link::condition() const {
     return pn_link_remote_condition(pn_object());
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/link_options.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/link_options.cpp b/proton-c/bindings/cpp/src/link_options.cpp
index 2fecf3a..136d6a8 100644
--- a/proton-c/bindings/cpp/src/link_options.cpp
+++ b/proton-c/bindings/cpp/src/link_options.cpp
@@ -77,7 +77,7 @@ class link_options::impl {
     option<int> credit_window;
 
     void apply(link& l) {
-        if (l.state() & endpoint::LOCAL_UNINIT) {
+        if (l.uninitialized()) {
             bool sender = !l.receiver();
             if (local_address.set) {
                 if (sender)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/a5db6a1e/proton-c/bindings/cpp/src/session.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/session.cpp b/proton-c/bindings/cpp/src/session.cpp
index 6deca10..a6fed21 100644
--- a/proton-c/bindings/cpp/src/session.cpp
+++ b/proton-c/bindings/cpp/src/session.cpp
@@ -36,6 +36,11 @@ void session::open() {
     pn_session_open(pn_object());
 }
 
+void session::close()
+{
+    pn_session_close(pn_object());
+}
+
 container& session::container() const {
     return connection().container();
 }
@@ -65,8 +70,6 @@ receiver session::open_receiver(const std::string &addr, const link_options &lo)
     return rcv;
 }
 
-endpoint::state session::state() const { return pn_session_state(pn_object()); }
-
 condition session::condition() const {
     return pn_session_remote_condition(pn_object());
 }


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