Repository: qpid-proton Updated Branches: refs/heads/master a4e072641 -> 70fe07580
PROTON-1164: [C++ binding] Update most event handler definitions to include relevant objects Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/3d522203 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/3d522203 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/3d522203 Branch: refs/heads/master Commit: 3d522203cb9e1c3aad86158e63d358faddd7e5d2 Parents: a4e0726 Author: Andrew Stitcher <[email protected]> Authored: Tue Mar 22 14:42:59 2016 -0400 Committer: Andrew Stitcher <[email protected]> Committed: Thu Mar 24 10:12:08 2016 -0400 ---------------------------------------------------------------------- examples/cpp/broker.hpp | 29 ++++------ examples/cpp/client.cpp | 8 +-- examples/cpp/connection_options.cpp | 10 ++-- examples/cpp/direct_recv.cpp | 4 +- examples/cpp/direct_send.cpp | 12 ++-- examples/cpp/engine/client.cpp | 13 ++--- examples/cpp/engine/direct_recv.cpp | 3 +- examples/cpp/engine/direct_send.cpp | 7 +-- examples/cpp/engine/helloworld.cpp | 16 +++--- examples/cpp/engine/server.cpp | 10 ++-- examples/cpp/engine/simple_recv.cpp | 7 +-- examples/cpp/engine/simple_send.cpp | 11 ++-- examples/cpp/helloworld.cpp | 10 ++-- examples/cpp/helloworld_direct.cpp | 14 ++--- examples/cpp/queue_browser.cpp | 4 +- examples/cpp/recurring_timer.cpp | 4 +- examples/cpp/selected_recv.cpp | 4 +- examples/cpp/server.cpp | 4 +- examples/cpp/server_direct.cpp | 8 +-- examples/cpp/simple_recv.cpp | 4 +- examples/cpp/simple_send.cpp | 8 +-- examples/cpp/ssl.cpp | 22 +++---- examples/cpp/ssl_client_cert.cpp | 26 ++++----- .../bindings/cpp/include/proton/connection.hpp | 1 + .../bindings/cpp/include/proton/handler.hpp | 42 ++++++++------ proton-c/bindings/cpp/include/proton/sender.hpp | 1 + .../bindings/cpp/include/proton/transport.hpp | 1 + proton-c/bindings/cpp/src/engine_test.cpp | 8 +-- proton-c/bindings/cpp/src/handler.cpp | 34 +++++------ proton-c/bindings/cpp/src/messaging_adapter.cpp | 60 +++++++++++--------- 30 files changed, 191 insertions(+), 194 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/broker.hpp ---------------------------------------------------------------------- diff --git a/examples/cpp/broker.hpp b/examples/cpp/broker.hpp index 37f27b8..3caffbe 100644 --- a/examples/cpp/broker.hpp +++ b/examples/cpp/broker.hpp @@ -154,8 +154,7 @@ class broker_handler : public proton::handler { public: broker_handler(queues& qs) : queues_(qs) {} - void on_link_open(proton::event &e) override { - proton::link lnk = e.link(); + void on_link_open(proton::event &e, proton::link &lnk) override { if (!!lnk.sender()) { proton::terminus remote_source(lnk.remote_source()); @@ -183,24 +182,22 @@ class broker_handler : public proton::handler { } } - void on_link_close(proton::event &e) override { - proton::link lnk = e.link(); - + void on_link_close(proton::event &e, proton::link &lnk) override { if (!!lnk.sender()) { unsubscribe(lnk.sender()); } } - void on_connection_close(proton::event &e) override { - remove_stale_consumers(e.connection()); + void on_connection_close(proton::event &e, proton::connection &c) override { + remove_stale_consumers(c); } - void on_transport_close(proton::event &e) override { - remove_stale_consumers(e.connection()); + void on_transport_close(proton::event &e, proton::transport &t) override { + remove_stale_consumers(t.connection()); } - void on_transport_error(proton::event &e) override { - std::cout << "broker client disconnect: " << e.transport().condition().what() << std::endl; + void on_transport_error(proton::event &e, proton::transport &t) override { + std::cout << "broker client disconnect: " << t.condition().what() << std::endl; } void on_unhandled_error(proton::event &e, const proton::condition &c) override { @@ -215,17 +212,15 @@ class broker_handler : public proton::handler { } } - void on_sendable(proton::event &e) override { - proton::link lnk = e.link(); - std::string address = lnk.local_source().address(); - proton::sender s = lnk.sender(); + void on_sendable(proton::event &e, proton::sender &s) override { + std::string address = s.local_source().address(); queues_.get(address).dispatch(&s); } - void on_message(proton::event &e) override { + void on_message(proton::event &e, proton::message &m) override { std::string address = e.link().local_target().address(); - queues_.get(address).publish(e.message(), e.link().receiver()); + queues_.get(address).publish(m, e.link().receiver()); } protected: http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/client.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/client.cpp b/examples/cpp/client.cpp index cb2b748..3a55efe 100644 --- a/examples/cpp/client.cpp +++ b/examples/cpp/client.cpp @@ -54,17 +54,15 @@ class client : public proton::handler { sender.send(req); } - void on_link_open(proton::event &e) override { - if (e.link() == receiver) { + void on_link_open(proton::event &e, proton::link &l) override { + if (l == receiver) { send_request(); } } - void on_message(proton::event &e) override { + void on_message(proton::event &e, proton::message &response) override { if (requests.empty()) return; // Spurious extra message! - proton::message& response = e.message(); - std::cout << requests.front() << " => " << response.body() << std::endl; requests.erase(requests.begin()); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/connection_options.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/connection_options.cpp b/examples/cpp/connection_options.cpp index 0e5eecf..26e6216 100644 --- a/examples/cpp/connection_options.cpp +++ b/examples/cpp/connection_options.cpp @@ -32,11 +32,11 @@ using proton::connection_options; #include "fake_cpp11.hpp" class handler_2 : public proton::handler { - void on_connection_open(proton::event &e) { + void on_connection_open(proton::event &e, proton::connection &c) override { std::cout << "connection events going to handler_2" << std::endl; std::cout << "connection max_frame_size: " << e.connection().transport().max_frame_size() << - ", idle timeout: " << e.connection().transport().idle_timeout() << std::endl; - e.connection().close(); + ", idle timeout: " << c.transport().idle_timeout() << std::endl; + c.close(); } }; @@ -54,9 +54,9 @@ class main_handler : public proton::handler { e.container().connect(url, connection_options().handler(&conn_handler).max_frame_size(2468)); } - void on_connection_open(proton::event &e) override { + void on_connection_open(proton::event &e, proton::connection &c) override { std::cout << "unexpected connection event on main handler" << std::endl; - e.connection().close(); + c.close(); } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/direct_recv.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/direct_recv.cpp b/examples/cpp/direct_recv.cpp index ec62c96..282566b 100644 --- a/examples/cpp/direct_recv.cpp +++ b/examples/cpp/direct_recv.cpp @@ -49,9 +49,7 @@ class direct_recv : public proton::handler { std::cout << "direct_recv listening on " << url << std::endl; } - void on_message(proton::event &e) override { - proton::message& msg = e.message(); - + void on_message(proton::event &e, proton::message &msg) override { if (proton::coerce<uint64_t>(msg.id()) < received) { return; // Ignore duplicate } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/direct_send.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/direct_send.cpp b/examples/cpp/direct_send.cpp index fcede83..cc8ede9 100644 --- a/examples/cpp/direct_send.cpp +++ b/examples/cpp/direct_send.cpp @@ -49,9 +49,7 @@ class simple_send : public proton::handler { std::cout << "direct_send listening on " << url << std::endl; } - void on_sendable(proton::event &e) override { - proton::sender sender = e.sender(); - + void on_sendable(proton::event &e, proton::sender &sender) override { while (sender.credit() && sent < total) { proton::message msg; std::map<std::string, int> m; @@ -65,18 +63,18 @@ class simple_send : public proton::handler { } } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &d) override { confirmed++; if (confirmed == total) { std::cout << "all messages confirmed" << std::endl; - e.connection().close(); + d.link().connection().close(); acceptor.close(); } } - void on_transport_close(proton::event &e) override { + void on_transport_close(proton::event &e, proton::transport &) override { sent = confirmed; } }; @@ -85,7 +83,7 @@ int main(int argc, char **argv) { std::string address("127.0.0.1:5672/examples"); int message_count = 100; options opts(argc, argv); - + opts.add_value(address, 'a', "address", "listen and send on URL", "URL"); opts.add_value(message_count, 'm', "messages", "send COUNT messages", "COUNT"); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/client.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/client.cpp b/examples/cpp/engine/client.cpp index ac3ec08..f1066fa 100644 --- a/examples/cpp/engine/client.cpp +++ b/examples/cpp/engine/client.cpp @@ -41,9 +41,9 @@ class client : public proton::handler { public: client(const proton::url &u, const std::vector<std::string>& r) : url(u), requests(r) {} - void on_connection_open(proton::event &e) override { - sender = e.connection().open_sender(url.path()); - receiver = e.connection().open_receiver("", proton::link_options().dynamic_address(true)); + void on_connection_open(proton::event &e, proton::connection &c) override { + sender = c.open_sender(url.path()); + receiver = c.open_receiver("", proton::link_options().dynamic_address(true)); } void send_request() { @@ -53,14 +53,13 @@ class client : public proton::handler { sender.send(req); } - void on_link_open(proton::event &e) override { - if (e.link() == receiver) + void on_link_open(proton::event &e, proton::link &l) override { + if (l == receiver) send_request(); } - void on_message(proton::event &e) override { + void on_message(proton::event &e, proton::message &response) override { if (requests.empty()) return; // Spurious extra message! - proton::message& response = e.message(); std::cout << requests.front() << " => " << response.body() << std::endl; requests.erase(requests.begin()); if (!requests.empty()) { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/direct_recv.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/direct_recv.cpp b/examples/cpp/engine/direct_recv.cpp index 1a2f138..485765b 100644 --- a/examples/cpp/engine/direct_recv.cpp +++ b/examples/cpp/engine/direct_recv.cpp @@ -41,8 +41,7 @@ class direct_recv : public proton::handler { public: direct_recv(int c) : expected(c), received(0) {} - void on_message(proton::event &e) override { - proton::message& msg = e.message(); + void on_message(proton::event &e, proton::message &msg) override { if (msg.id().get<uint64_t>() < received) return; // ignore duplicate if (expected == 0 || received < expected) { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/direct_send.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/direct_send.cpp b/examples/cpp/engine/direct_send.cpp index a79136f..f876810 100644 --- a/examples/cpp/engine/direct_send.cpp +++ b/examples/cpp/engine/direct_send.cpp @@ -42,8 +42,7 @@ class simple_send : public proton::handler { public: simple_send(int c) : sent(0), confirmed(0), total(c) {} - void on_sendable(proton::event &e) override { - proton::sender sender = e.sender(); + void on_sendable(proton::event &e, proton::sender &sender) override { while (sender.credit() && sent < total) { proton::message msg; msg.id(sent + 1); @@ -55,7 +54,7 @@ class simple_send : public proton::handler { } } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &) override { confirmed++; if (confirmed == total) { std::cout << "all messages confirmed" << std::endl; @@ -63,7 +62,7 @@ class simple_send : public proton::handler { } } - void on_transport_close(proton::event &e) override { + void on_transport_close(proton::event &e, proton::transport &) override { sent = confirmed; } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/helloworld.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/helloworld.cpp b/examples/cpp/engine/helloworld.cpp index 7d9f507..d146ae9 100644 --- a/examples/cpp/engine/helloworld.cpp +++ b/examples/cpp/engine/helloworld.cpp @@ -35,19 +35,19 @@ class hello_world : public proton::handler { public: hello_world(const std::string& address) : address_(address) {} - void on_connection_open(proton::event &e) override { - e.connection().open_receiver(address_); - e.connection().open_sender(address_); + void on_connection_open(proton::event &e, proton::connection &c) override { + c.open_receiver(address_); + c.open_sender(address_); } - void on_sendable(proton::event &e) override { + void on_sendable(proton::event &e, proton::sender &s) override { proton::message m("Hello World!"); - e.sender().send(m); - e.sender().close(); + s.send(m); + s.close(); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; e.connection().close(); } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/server.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/server.cpp b/examples/cpp/engine/server.cpp index 9bb896f..02c3ac9 100644 --- a/examples/cpp/engine/server.cpp +++ b/examples/cpp/engine/server.cpp @@ -45,8 +45,8 @@ class server : public proton::handler { server(const std::string &u) : url(u) {} - void on_connection_open(proton::event &e) override { - e.connection().open_receiver(url.path()); + void on_connection_open(proton::event &e, proton::connection &c) override { + c.open_receiver(url.path()); std::cout << "server connected to " << url << std::endl; } @@ -57,9 +57,9 @@ class server : public proton::handler { return uc; } - void on_message(proton::event &e) override { - std::cout << "Received " << e.message().body() << std::endl; - std::string reply_to = e.message().reply_to(); + void on_message(proton::event &e, proton::message &m) override { + std::cout << "Received " << m.body() << std::endl; + std::string reply_to = m.reply_to(); proton::message reply; reply.address(reply_to); reply.body(to_upper(proton::get<std::string>(e.message().body()))); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/simple_recv.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/simple_recv.cpp b/examples/cpp/engine/simple_recv.cpp index d5327bf..bc17c5f 100644 --- a/examples/cpp/engine/simple_recv.cpp +++ b/examples/cpp/engine/simple_recv.cpp @@ -44,13 +44,12 @@ class simple_recv : public proton::handler { simple_recv(const std::string &s, int c) : url(s), expected(c), received(0) {} - void on_connection_open(proton::event &e) override { - receiver = e.connection().open_receiver(url.path()); + void on_connection_open(proton::event &e, proton::connection &c) override { + receiver = c.open_receiver(url.path()); std::cout << "simple_recv listening on " << url << std::endl; } - void on_message(proton::event &e) override { - proton::message& msg = e.message(); + void on_message(proton::event &e, proton::message &msg) override { if (msg.id().get<uint64_t>() < received) return; // ignore duplicate if (expected == 0 || received < expected) { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/engine/simple_send.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/engine/simple_send.cpp b/examples/cpp/engine/simple_send.cpp index 5161852..6a4f421 100644 --- a/examples/cpp/engine/simple_send.cpp +++ b/examples/cpp/engine/simple_send.cpp @@ -44,12 +44,11 @@ class simple_send : public proton::handler { simple_send(const std::string &s, int c) : url(s), sent(0), confirmed(0), total(c) {} - void on_connection_open(proton::event &e) override { - sender = e.connection().open_sender(url.path()); + void on_connection_open(proton::event &e, proton::connection &c) override { + sender = c.open_sender(url.path()); } - void on_sendable(proton::event &e) override { - proton::sender sender = e.sender(); + void on_sendable(proton::event &e, proton::sender &sender) override { while (sender.credit() && sent < total) { proton::message msg; msg.id(sent + 1); @@ -61,7 +60,7 @@ class simple_send : public proton::handler { } } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &) override { confirmed++; if (confirmed == total) { std::cout << "all messages confirmed" << std::endl; @@ -69,7 +68,7 @@ class simple_send : public proton::handler { } } - void on_transport_close(proton::event &e) override { + void on_transport_close(proton::event &e, proton::transport &) override { sent = confirmed; } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/helloworld.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/helloworld.cpp b/examples/cpp/helloworld.cpp index a81cfbd..4847819 100644 --- a/examples/cpp/helloworld.cpp +++ b/examples/cpp/helloworld.cpp @@ -41,14 +41,14 @@ class hello_world : public proton::handler { conn.open_sender(url.path()); } - void on_sendable(proton::event &e) override { + void on_sendable(proton::event &e, proton::sender &s) override { proton::message m("Hello World!"); - e.sender().send(m); - e.sender().close(); + s.send(m); + s.close(); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; e.connection().close(); } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/helloworld_direct.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/helloworld_direct.cpp b/examples/cpp/helloworld_direct.cpp index 11b1c9c..23d9c87 100644 --- a/examples/cpp/helloworld_direct.cpp +++ b/examples/cpp/helloworld_direct.cpp @@ -41,21 +41,21 @@ class hello_world_direct : public proton::handler { e.container().open_sender(url); } - void on_sendable(proton::event &e) override { + void on_sendable(proton::event &e, proton::sender &s) override { proton::message m("Hello World!"); - e.sender().send(m); - e.sender().close(); + s.send(m); + s.close(); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &) override { e.connection().close(); } - void on_connection_close(proton::event &e) override { + void on_connection_close(proton::event &, proton::connection &) override { acceptor.close(); } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/queue_browser.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/queue_browser.cpp b/examples/cpp/queue_browser.cpp index c5b71e8..369404d 100644 --- a/examples/cpp/queue_browser.cpp +++ b/examples/cpp/queue_browser.cpp @@ -41,8 +41,8 @@ class browser : public proton::handler { conn.open_receiver(url.path(), proton::link_options().browsing(true)); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; if (e.receiver().queued() == 0 && e.receiver().drained() > 0) { e.connection().close(); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/recurring_timer.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/recurring_timer.cpp b/examples/cpp/recurring_timer.cpp index 5853b63..2819802 100644 --- a/examples/cpp/recurring_timer.cpp +++ b/examples/cpp/recurring_timer.cpp @@ -32,13 +32,13 @@ #include "fake_cpp11.hpp" class ticker : public proton::handler { - void on_timer(proton::event &e) { + void on_timer(proton::event &e) override { std::cout << "Tick..." << std::endl; } }; class tocker : public proton::handler { - void on_timer(proton::event &e) { + void on_timer(proton::event &e) override { std::cout << "Tock..." << std::endl; } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/selected_recv.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/selected_recv.cpp b/examples/cpp/selected_recv.cpp index df627ec..32bcf7e 100644 --- a/examples/cpp/selected_recv.cpp +++ b/examples/cpp/selected_recv.cpp @@ -41,8 +41,8 @@ class selected_recv : public proton::handler { conn.open_receiver(url.path(), proton::link_options().selector("colour = 'green'")); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/server.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/server.cpp b/examples/cpp/server.cpp index 699cfc3..29534d4 100644 --- a/examples/cpp/server.cpp +++ b/examples/cpp/server.cpp @@ -60,10 +60,10 @@ class server : public proton::handler { return uc; } - void on_message(proton::event &e) override { + void on_message(proton::event &e, proton::message &m) override { std::cout << "Received " << e.message().body() << std::endl; - std::string reply_to = e.message().reply_to(); + std::string reply_to = m.reply_to(); proton::message reply; reply.address(reply_to); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/server_direct.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/server_direct.cpp b/examples/cpp/server_direct.cpp index 9a154e0..5ce2d21 100644 --- a/examples/cpp/server_direct.cpp +++ b/examples/cpp/server_direct.cpp @@ -66,17 +66,15 @@ class server : public proton::handler { return addr.str(); } - void on_link_open(proton::event& e) override { - proton::link link = e.link(); - + void on_link_open(proton::event& e, proton::link &link) override { if (!!link.sender() && link.remote_source().dynamic()) { link.local_source().address(generate_address()); senders[link.local_source().address()] = link.sender(); } } - void on_message(proton::event &e) override { - std::cout << "Received " << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << "Received " << m.body() << std::endl; std::string reply_to = e.message().reply_to(); sender_map::iterator it = senders.find(reply_to); http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/simple_recv.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/simple_recv.cpp b/examples/cpp/simple_recv.cpp index c8d5701..1d4ba91 100644 --- a/examples/cpp/simple_recv.cpp +++ b/examples/cpp/simple_recv.cpp @@ -48,9 +48,7 @@ class simple_recv : public proton::handler { std::cout << "simple_recv listening on " << url << std::endl; } - void on_message(proton::event &e) override { - proton::message& msg = e.message(); - + void on_message(proton::event &e, proton::message &msg) override { if (msg.id().get<uint64_t>() < received) { return; // Ignore duplicate } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/simple_send.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/simple_send.cpp b/examples/cpp/simple_send.cpp index 5cd9f84..e5e795e 100644 --- a/examples/cpp/simple_send.cpp +++ b/examples/cpp/simple_send.cpp @@ -47,9 +47,7 @@ class simple_send : public proton::handler { sender = e.container().open_sender(url); } - void on_sendable(proton::event &e) override { - proton::sender sender = e.sender(); - + void on_sendable(proton::event &e, proton::sender &sender) override { while (sender.credit() && sent < total) { proton::message msg; std::map<std::string, int> m; @@ -63,7 +61,7 @@ class simple_send : public proton::handler { } } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &) override { confirmed++; if (confirmed == total) { @@ -72,7 +70,7 @@ class simple_send : public proton::handler { } } - void on_transport_close(proton::event &e) override { + void on_transport_close(proton::event &e, proton::transport &) override { sent = confirmed; } }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/ssl.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/ssl.cpp b/examples/cpp/ssl.cpp index c1bc8b2..6098b8e 100644 --- a/examples/cpp/ssl.cpp +++ b/examples/cpp/ssl.cpp @@ -47,14 +47,14 @@ std::string find_CN(const std::string &); struct server_handler : public proton::handler { proton::acceptor acceptor; - void on_connection_open(proton::event &e) override { + void on_connection_open(proton::event &e, proton::connection &c) override { std::cout << "Inbound server connection connected via SSL. Protocol: " << - e.connection().transport().ssl().protocol() << std::endl; + c.transport().ssl().protocol() << std::endl; acceptor.close(); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; } }; @@ -67,7 +67,7 @@ class hello_world_direct : public proton::handler { public: hello_world_direct(const proton::url& u) : url(u) {} - void on_start(proton::event &e) override { + void on_start(proton::event &e) override { // Configure listener. Details vary by platform. ssl_certificate server_cert = platform_certificate("tserver", "tserverpw"); ssl_server_options ssl_srv(server_cert); @@ -87,20 +87,20 @@ class hello_world_direct : public proton::handler { e.container().open_sender(url); } - void on_connection_open(proton::event &e) override { - std::string subject = e.connection().transport().ssl().remote_subject(); + void on_connection_open(proton::event &e, proton::connection &c) override { + std::string subject = c.transport().ssl().remote_subject(); std::cout << "Outgoing client connection connected via SSL. Server certificate identity " << find_CN(subject) << std::endl; } - void on_sendable(proton::event &e) override { + void on_sendable(proton::event &e, proton::sender &s) override { proton::message m; m.body("Hello World!"); - e.sender().send(m); - e.sender().close(); + s.send(m); + s.close(); } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &) override { // All done. e.connection().close(); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/examples/cpp/ssl_client_cert.cpp ---------------------------------------------------------------------- diff --git a/examples/cpp/ssl_client_cert.cpp b/examples/cpp/ssl_client_cert.cpp index c8cee43..a15e49b 100644 --- a/examples/cpp/ssl_client_cert.cpp +++ b/examples/cpp/ssl_client_cert.cpp @@ -49,22 +49,22 @@ std::string find_CN(const std::string &); struct server_handler : public proton::handler { proton::acceptor inbound_listener; - void on_connection_open(proton::event &e) override { + void on_connection_open(proton::event &e, proton::connection &c) override { std::cout << "Inbound server connection connected via SSL. Protocol: " << - e.connection().transport().ssl().protocol() << std::endl; - if (e.connection().transport().sasl().outcome() == sasl::OK) { - std::string subject = e.connection().transport().ssl().remote_subject(); + c.transport().ssl().protocol() << std::endl; + if (c.transport().sasl().outcome() == sasl::OK) { + std::string subject = c.transport().ssl().remote_subject(); std::cout << "Inbound client certificate identity " << find_CN(subject) << std::endl; } else { std::cout << "Inbound client authentication failed" <<std::endl; - e.connection().close(); + c.close(); } inbound_listener.close(); } - void on_message(proton::event &e) override { - std::cout << e.message().body() << std::endl; + void on_message(proton::event &e, proton::message &m) override { + std::cout << m.body() << std::endl; } }; @@ -102,20 +102,20 @@ class hello_world_direct : public proton::handler { e.container().open_sender(url); } - void on_connection_open(proton::event &e) override { - std::string subject = e.connection().transport().ssl().remote_subject(); + void on_connection_open(proton::event &e, proton::connection &c) override { + std::string subject = c.transport().ssl().remote_subject(); std::cout << "Outgoing client connection connected via SSL. Server certificate identity " << find_CN(subject) << std::endl; } - void on_sendable(proton::event &e) override { + void on_sendable(proton::event &e, proton::sender &s) override { proton::message m; m.body("Hello World!"); - e.sender().send(m); - e.sender().close(); + s.send(m); + s.close(); } - void on_delivery_accept(proton::event &e) override { + void on_delivery_accept(proton::event &e, proton::delivery &) override { // All done. e.connection().close(); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/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 eb4e598..34600c0 100644 --- a/proton-c/bindings/cpp/include/proton/connection.hpp +++ b/proton-c/bindings/cpp/include/proton/connection.hpp @@ -137,6 +137,7 @@ PN_CPP_CLASS_EXTERN connection : public internal::object<pn_connection_t>, publi friend class reactor; friend class proton_event; friend class override_handler; + friend class messaging_adapter; /// @endcond }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/proton-c/bindings/cpp/include/proton/handler.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/handler.hpp b/proton-c/bindings/cpp/include/proton/handler.hpp index 3086037..4d00f93 100644 --- a/proton-c/bindings/cpp/include/proton/handler.hpp +++ b/proton-c/bindings/cpp/include/proton/handler.hpp @@ -30,6 +30,14 @@ namespace proton { class condition; class event; +class transport; +class connection; +class session; +class link; +class sender; +class receiver; +class delivery; +class message; class messaging_adapter; namespace io { @@ -57,9 +65,9 @@ PN_CPP_CLASS_EXTERN handler /// The event loop is starting. PN_CPP_EXTERN virtual void on_start(event &e); /// A message is received. - PN_CPP_EXTERN virtual void on_message(event &e); + PN_CPP_EXTERN virtual void on_message(event &e, message &m); /// A message can be sent. - PN_CPP_EXTERN virtual void on_sendable(event &e); + PN_CPP_EXTERN virtual void on_sendable(event &e, sender &s); /// transport_open is not present because currently there is no specific /// low level event to hang it from - you should put any initialisation code @@ -69,10 +77,10 @@ PN_CPP_CLASS_EXTERN handler /// XXX symmetry of the API. /// The underlying network transport has closed. - PN_CPP_EXTERN virtual void on_transport_close(event &e); + PN_CPP_EXTERN virtual void on_transport_close(event &e, transport &t); /// The underlying network transport has closed with an error /// condition. - PN_CPP_EXTERN virtual void on_transport_error(event &e); + PN_CPP_EXTERN virtual void on_transport_error(event &e, transport &t); /// Note that every ..._open event is paired with a ..._close event which can clean /// up any resources created by the ..._open handler. @@ -82,34 +90,34 @@ PN_CPP_CLASS_EXTERN handler /// be along in a minute to handle the clean up. /// The remote peer opened the connection. - PN_CPP_EXTERN virtual void on_connection_open(event &e); + PN_CPP_EXTERN virtual void on_connection_open(event &e, connection &c); /// The remote peer closed the connection. - PN_CPP_EXTERN virtual void on_connection_close(event &e); + PN_CPP_EXTERN virtual void on_connection_close(event &e, connection &c); /// The remote peer closed the connection with an error condition. - PN_CPP_EXTERN virtual void on_connection_error(event &e); + PN_CPP_EXTERN virtual void on_connection_error(event &e, connection &c); /// The remote peer opened the session. - PN_CPP_EXTERN virtual void on_session_open(event &e); + PN_CPP_EXTERN virtual void on_session_open(event &e, session &s); /// The remote peer closed the session. - PN_CPP_EXTERN virtual void on_session_close(event &e); + PN_CPP_EXTERN virtual void on_session_close(event &e, session &s); /// The remote peer closed the session with an error condition. - PN_CPP_EXTERN virtual void on_session_error(event &e); + PN_CPP_EXTERN virtual void on_session_error(event &e, session &s); /// The remote peer opened the link. - PN_CPP_EXTERN virtual void on_link_open(event &e); + PN_CPP_EXTERN virtual void on_link_open(event &e, link& l); /// The remote peer closed the link. - PN_CPP_EXTERN virtual void on_link_close(event &e); + PN_CPP_EXTERN virtual void on_link_close(event &e, link& l); /// The remote peer closed the link with an error condition. - PN_CPP_EXTERN virtual void on_link_error(event &e); + PN_CPP_EXTERN virtual void on_link_error(event &e, link& l); /// The remote peer accepted an outgoing message. - PN_CPP_EXTERN virtual void on_delivery_accept(event &e); + PN_CPP_EXTERN virtual void on_delivery_accept(event &e, delivery &d); /// The remote peer rejected an outgoing message. - PN_CPP_EXTERN virtual void on_delivery_reject(event &e); + PN_CPP_EXTERN virtual void on_delivery_reject(event &e, delivery &d); /// The remote peer released an outgoing message. - PN_CPP_EXTERN virtual void on_delivery_release(event &e); + PN_CPP_EXTERN virtual void on_delivery_release(event &e, delivery &d); /// The remote peer settled an outgoing message. - PN_CPP_EXTERN virtual void on_delivery_settle(event &e); + PN_CPP_EXTERN virtual void on_delivery_settle(event &e, delivery &d); // XXX are we missing on_delivery_modify? // XXX on_delivery_accept (and co) is a more discriminated on_delivery_settle http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/proton-c/bindings/cpp/include/proton/sender.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/sender.hpp b/proton-c/bindings/cpp/include/proton/sender.hpp index 03a8df4..71f2ae3 100644 --- a/proton-c/bindings/cpp/include/proton/sender.hpp +++ b/proton-c/bindings/cpp/include/proton/sender.hpp @@ -64,6 +64,7 @@ PN_CPP_CLASS_EXTERN sender : public link /// @cond INTERNAL friend class link; friend class session; + friend class messaging_adapter; /// @endcond }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/proton-c/bindings/cpp/include/proton/transport.hpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/include/proton/transport.hpp b/proton-c/bindings/cpp/include/proton/transport.hpp index bebc974..a6d7570 100644 --- a/proton-c/bindings/cpp/include/proton/transport.hpp +++ b/proton-c/bindings/cpp/include/proton/transport.hpp @@ -76,6 +76,7 @@ class transport : public internal::object<pn_transport_t> { friend class connector; friend class proton_event; friend class io::connection_engine; + friend class messaging_adapter; /// @endcond }; http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/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 83ee352..1b32fb0 100644 --- a/proton-c/bindings/cpp/src/engine_test.cpp +++ b/proton-c/bindings/cpp/src/engine_test.cpp @@ -100,12 +100,12 @@ struct record_handler : public handler { std::deque<proton::session> sessions; std::deque<std::string> errors; - void on_link_open(event& e) override { - links.push_back(e.link()); + void on_link_open(event& e, link &l) override { + links.push_back(l); } - void on_session_open(event& e) override { - sessions.push_back(e.session()); + void on_session_open(event& e, session &s) override { + sessions.push_back(s); } void on_unhandled_error(event& e, const condition& c) override { http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/proton-c/bindings/cpp/src/handler.cpp ---------------------------------------------------------------------- diff --git a/proton-c/bindings/cpp/src/handler.cpp b/proton-c/bindings/cpp/src/handler.cpp index 1119720..a6ee246 100644 --- a/proton-c/bindings/cpp/src/handler.cpp +++ b/proton-c/bindings/cpp/src/handler.cpp @@ -37,24 +37,24 @@ handler::handler() : messaging_adapter_(new messaging_adapter(*this)) {} handler::~handler(){} void handler::on_start(event &e) { on_unhandled(e); } -void handler::on_message(event &e) { on_unhandled(e); } -void handler::on_sendable(event &e) { on_unhandled(e); } +void handler::on_message(event &e, message &) { on_unhandled(e); } +void handler::on_sendable(event &e, sender &) { on_unhandled(e); } void handler::on_timer(event &e) { on_unhandled(e); } -void handler::on_transport_close(event &e) { on_unhandled(e); } -void handler::on_transport_error(event &e) { on_unhandled_error(e, e.transport().condition()); } -void handler::on_connection_close(event &e) { on_unhandled(e); } -void handler::on_connection_error(event &e) { on_unhandled_error(e, e.connection().remote_condition()); } -void handler::on_connection_open(event &e) { on_unhandled(e); } -void handler::on_session_close(event &e) { on_unhandled(e); } -void handler::on_session_error(event &e) { on_unhandled_error(e, e.session().remote_condition()); } -void handler::on_session_open(event &e) { on_unhandled(e); } -void handler::on_link_close(event &e) { on_unhandled(e); } -void handler::on_link_error(event &e) { on_unhandled_error(e, e.link().remote_condition()); } -void handler::on_link_open(event &e) { on_unhandled(e); } -void handler::on_delivery_accept(event &e) { on_unhandled(e); } -void handler::on_delivery_reject(event &e) { on_unhandled(e); } -void handler::on_delivery_release(event &e) { on_unhandled(e); } -void handler::on_delivery_settle(event &e) { on_unhandled(e); } +void handler::on_transport_close(event &e, transport &) { on_unhandled(e); } +void handler::on_transport_error(event &e, transport &t) { on_unhandled_error(e, t.condition()); } +void handler::on_connection_close(event &e, connection &) { on_unhandled(e); } +void handler::on_connection_error(event &e, connection &c) { on_unhandled_error(e, c.remote_condition()); } +void handler::on_connection_open(event &e, connection &) { on_unhandled(e); } +void handler::on_session_close(event &e, session &) { on_unhandled(e); } +void handler::on_session_error(event &e, session &s) { on_unhandled_error(e, s.remote_condition()); } +void handler::on_session_open(event &e, session &) { on_unhandled(e); } +void handler::on_link_close(event &e, link &) { on_unhandled(e); } +void handler::on_link_error(event &e, link &l) { on_unhandled_error(e, l.remote_condition()); } +void handler::on_link_open(event &e, link &) { on_unhandled(e); } +void handler::on_delivery_accept(event &e, delivery &) { on_unhandled(e); } +void handler::on_delivery_reject(event &e, delivery &) { on_unhandled(e); } +void handler::on_delivery_release(event &e, delivery &) { on_unhandled(e); } +void handler::on_delivery_settle(event &e, delivery &) { on_unhandled(e); } void handler::on_unhandled(event &) {} void handler::on_unhandled_error(event &, const condition& c) { throw proton::error(c.what()); } http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3d522203/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 2822969..a0cf9ab 100644 --- a/proton-c/bindings/cpp/src/messaging_adapter.cpp +++ b/proton-c/bindings/cpp/src/messaging_adapter.cpp @@ -23,6 +23,7 @@ #include "proton/sender.hpp" #include "proton/error.hpp" +#include "proton/transport.hpp" #include "contexts.hpp" #include "messaging_event.hpp" @@ -63,10 +64,11 @@ void messaging_adapter::on_reactor_init(proton_event &pe) { void messaging_adapter::on_link_flow(proton_event &pe) { pn_event_t *pne = pe.pn_event(); pn_link_t *lnk = pn_event_link(pne); + sender s(lnk); if (lnk && pn_link_is_sender(lnk) && pn_link_credit(lnk) > 0) { // create on_message extended event messaging_event mevent(messaging_event::SENDABLE, pe); - delegate_.on_sendable(mevent);; + delegate_.on_sendable(mevent, s); } credit_topup(lnk); } @@ -93,14 +95,14 @@ void messaging_adapter::on_delivery(proton_event &pe) { if (lctx.auto_accept) dlv.release(); } else { - delegate_.on_message(mevent); + delegate_.on_message(mevent, msg); if (lctx.auto_accept && !dlv.settled()) dlv.accept(); } } else if (dlv.updated() && dlv.settled()) { messaging_event mevent(messaging_event::DELIVERY_SETTLE, pe); - delegate_.on_delivery_settle(mevent); + delegate_.on_delivery_settle(mevent, dlv); } credit_topup(lnk); } else { @@ -109,20 +111,20 @@ void messaging_adapter::on_delivery(proton_event &pe) { uint64_t rstate = dlv.remote_state(); if (rstate == PN_ACCEPTED) { messaging_event mevent(messaging_event::DELIVERY_ACCEPT, pe); - delegate_.on_delivery_accept(mevent); + delegate_.on_delivery_accept(mevent, dlv); } else if (rstate == PN_REJECTED) { messaging_event mevent(messaging_event::DELIVERY_REJECT, pe); - delegate_.on_delivery_reject(mevent); + delegate_.on_delivery_reject(mevent, dlv); } else if (rstate == PN_RELEASED || rstate == PN_MODIFIED) { messaging_event mevent(messaging_event::DELIVERY_RELEASE, pe); - delegate_.on_delivery_release(mevent); + delegate_.on_delivery_release(mevent, dlv); } if (dlv.settled()) { messaging_event mevent(messaging_event::DELIVERY_SETTLE, pe); - delegate_.on_delivery_settle(mevent); + delegate_.on_delivery_settle(mevent, dlv); } if (lctx.auto_settle) dlv.settle(); @@ -145,43 +147,47 @@ bool is_local_unititialised(pn_state_t state) { void messaging_adapter::on_link_remote_close(proton_event &pe) { pn_event_t *cevent = pe.pn_event(); pn_link_t *lnk = pn_event_link(cevent); + link l(lnk); if (pn_condition_is_set(pn_link_remote_condition(lnk))) { messaging_event mevent(messaging_event::LINK_ERROR, pe); - delegate_.on_link_error(mevent); + delegate_.on_link_error(mevent, l); } messaging_event mevent(messaging_event::LINK_CLOSE, pe); - delegate_.on_link_close(mevent); + delegate_.on_link_close(mevent, l); pn_link_close(lnk); } void messaging_adapter::on_session_remote_close(proton_event &pe) { pn_event_t *cevent = pe.pn_event(); pn_session_t *session = pn_event_session(cevent); + class session s(session); if (pn_condition_is_set(pn_session_remote_condition(session))) { messaging_event mevent(messaging_event::SESSION_ERROR, pe); - delegate_.on_session_error(mevent); + delegate_.on_session_error(mevent, s); } messaging_event mevent(messaging_event::SESSION_CLOSE, pe); - delegate_.on_session_close(mevent); + delegate_.on_session_close(mevent, s); pn_session_close(session); } void messaging_adapter::on_connection_remote_close(proton_event &pe) { pn_event_t *cevent = pe.pn_event(); pn_connection_t *connection = pn_event_connection(cevent); + class connection c(connection); if (pn_condition_is_set(pn_connection_remote_condition(connection))) { messaging_event mevent(messaging_event::CONNECTION_ERROR, pe); - delegate_.on_connection_error(mevent); + delegate_.on_connection_error(mevent, c); } messaging_event mevent(messaging_event::CONNECTION_CLOSE, pe); - delegate_.on_connection_close(mevent); + delegate_.on_connection_close(mevent, c); pn_connection_close(connection); } void messaging_adapter::on_connection_remote_open(proton_event &pe) { messaging_event mevent(messaging_event::CONNECTION_OPEN, pe); - delegate_.on_connection_open(mevent); pn_connection_t *connection = pn_event_connection(pe.pn_event()); + class connection c(connection); + delegate_.on_connection_open(mevent, c); if (!is_local_open(pn_connection_state(connection)) && is_local_unititialised(pn_connection_state(connection))) { pn_connection_open(connection); } @@ -189,8 +195,9 @@ void messaging_adapter::on_connection_remote_open(proton_event &pe) { void messaging_adapter::on_session_remote_open(proton_event &pe) { messaging_event mevent(messaging_event::SESSION_OPEN, pe); - delegate_.on_session_open(mevent); pn_session_t *session = pn_event_session(pe.pn_event()); + class session s(session); + delegate_.on_session_open(mevent, s); if (!is_local_open(pn_session_state(session)) && is_local_unititialised(pn_session_state(session))) { pn_session_open(session); } @@ -202,28 +209,29 @@ void messaging_adapter::on_link_local_open(proton_event &pe) { void messaging_adapter::on_link_remote_open(proton_event &pe) { messaging_event mevent(messaging_event::LINK_OPEN, pe); - delegate_.on_link_open(mevent); - pn_link_t *pnlink = pn_event_link(pe.pn_event()); - if (!is_local_open(pn_link_state(pnlink)) && is_local_unititialised(pn_link_state(pnlink))) { - link lnk(pnlink); + pn_link_t *link = pn_event_link(pe.pn_event()); + class link l(link); + delegate_.on_link_open(mevent, l); + if (!is_local_open(pn_link_state(link)) && is_local_unititialised(pn_link_state(link))) { if (pe.container_) - lnk.open(pe.container_->impl_->link_options_); + l.open(pe.container_->impl_->link_options_); else - lnk.open(); // No default for engine + l.open(); // No default for engine } - credit_topup(pnlink); + credit_topup(link); } void messaging_adapter::on_transport_tail_closed(proton_event &pe) { pn_connection_t *conn = pn_event_connection(pe.pn_event()); if (conn && is_local_open(pn_connection_state(conn))) { - pn_transport_t *t = pn_event_transport(pe.pn_event()); - if (pn_condition_is_set(pn_transport_condition(t))) { + pn_transport_t *tspt = pn_event_transport(pe.pn_event()); + transport t(tspt); + if (pn_condition_is_set(pn_transport_condition(tspt))) { messaging_event mevent(messaging_event::TRANSPORT_ERROR, pe); - delegate_.on_transport_error(mevent); + delegate_.on_transport_error(mevent, t); } messaging_event mevent(messaging_event::TRANSPORT_CLOSE, pe); - delegate_.on_transport_close(mevent); + delegate_.on_transport_close(mevent, t); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
