Repository: qpid-proton
Updated Branches:
  refs/heads/master 27f296ccd -> 35f425bc4


PROTON-1258: Make transport events more consistent on client and server
- This is almost the same as 4a601011 but with some review fixes from
  [email protected]


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

Branch: refs/heads/master
Commit: 35f425bc40b3e4ede43d65cd4d7e9ecd98b0a58a
Parents: 27f296c
Author: Andrew Stitcher <[email protected]>
Authored: Wed Jul 13 19:23:26 2016 -0400
Committer: Andrew Stitcher <[email protected]>
Committed: Fri Jul 15 16:48:40 2016 -0400

----------------------------------------------------------------------
 proton-c/bindings/cpp/src/messaging_adapter.cpp | 31 +++++++++++++-------
 proton-c/bindings/cpp/src/messaging_adapter.hpp |  2 +-
 2 files changed, 22 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/35f425bc/proton-c/bindings/cpp/src/messaging_adapter.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/messaging_adapter.cpp 
b/proton-c/bindings/cpp/src/messaging_adapter.cpp
index e74fa4e..4328ca2 100644
--- a/proton-c/bindings/cpp/src/messaging_adapter.cpp
+++ b/proton-c/bindings/cpp/src/messaging_adapter.cpp
@@ -177,6 +177,10 @@ bool is_local_unititialised(pn_state_t state) {
     return state & PN_LOCAL_UNINIT;
 }
 
+bool is_remote_unititialised(pn_state_t state) {
+    return state & PN_REMOTE_UNINIT;
+}
+
 } // namespace
 
 void messaging_adapter::on_link_remote_close(proton_event &pe) {
@@ -221,10 +225,12 @@ void 
messaging_adapter::on_connection_remote_close(proton_event &pe) {
 }
 
 void messaging_adapter::on_connection_remote_open(proton_event &pe) {
-    pn_connection_t *conn = pn_event_connection(pe.pn_event());
-    connection c(make_wrapper(conn));
+    // Generate on_transport_open event here until we find a better place
     transport t(make_wrapper(pn_event_transport(pe.pn_event())));
     delegate_.on_transport_open(t);
+
+    pn_connection_t *conn = pn_event_connection(pe.pn_event());
+    connection c(make_wrapper(conn));
     delegate_.on_connection_open(c);
     if (!is_local_open(pn_connection_state(conn)) && 
is_local_unititialised(pn_connection_state(conn))) {
         pn_connection_open(conn);
@@ -263,16 +269,21 @@ void messaging_adapter::on_link_remote_open(proton_event 
&pe) {
     credit_topup(lnk);
 }
 
-void messaging_adapter::on_transport_tail_closed(proton_event &pe) {
+void messaging_adapter::on_transport_closed(proton_event &pe) {
+    pn_transport_t *tspt = pn_event_transport(pe.pn_event());
+    transport t(make_wrapper(tspt));
+
+    // If the connection isn't open generate on_transport_open event
+    // because we didn't generate it yet and the events won't match.
     pn_connection_t *conn = pn_event_connection(pe.pn_event());
-    if (conn && is_local_open(pn_connection_state(conn))) {
-        pn_transport_t *tspt = pn_event_transport(pe.pn_event());
-        transport t(make_wrapper(tspt));
-        if (pn_condition_is_set(pn_transport_condition(tspt))) {
-            delegate_.on_transport_error(t);
-        }
-        delegate_.on_transport_close(t);
+    if (!conn || is_remote_unititialised(pn_connection_state(conn))) {
+        delegate_.on_transport_open(t);
+    }
+
+    if (pn_condition_is_set(pn_transport_condition(tspt))) {
+        delegate_.on_transport_error(t);
     }
+    delegate_.on_transport_close(t);
 }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/35f425bc/proton-c/bindings/cpp/src/messaging_adapter.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/messaging_adapter.hpp 
b/proton-c/bindings/cpp/src/messaging_adapter.hpp
index c12d33b..5d7b37a 100644
--- a/proton-c/bindings/cpp/src/messaging_adapter.hpp
+++ b/proton-c/bindings/cpp/src/messaging_adapter.hpp
@@ -50,7 +50,7 @@ class messaging_adapter : public proton_handler
     void on_link_local_open(proton_event &e);
     void on_link_remote_open(proton_event &e);
     void on_link_remote_close(proton_event &e);
-    void on_transport_tail_closed(proton_event &e);
+    void on_transport_closed(proton_event &e);
 
   private:
     messaging_handler &delegate_;  // The handler for generated 
messaging_event's


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to