PROTON-1258: Make transport events more consistent on client and server

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

Branch: refs/heads/master
Commit: 4a6010110296846e3c77defc0558a45d8792d3b5
Parents: 0340eab
Author: Andrew Stitcher <[email protected]>
Authored: Wed Jul 13 19:23:26 2016 -0400
Committer: Andrew Stitcher <[email protected]>
Committed: Thu Jul 14 15:17:44 2016 -0400

----------------------------------------------------------------------
 proton-c/bindings/cpp/src/messaging_adapter.cpp | 25 +++++++++++++-------
 1 file changed, 16 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/4a601011/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..4d83871 100644
--- a/proton-c/bindings/cpp/src/messaging_adapter.cpp
+++ b/proton-c/bindings/cpp/src/messaging_adapter.cpp
@@ -221,10 +221,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);
@@ -264,15 +266,20 @@ void messaging_adapter::on_link_remote_open(proton_event 
&pe) {
 }
 
 void messaging_adapter::on_transport_tail_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_local_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);
 }
 
 }


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

Reply via email to