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]
