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]

Reply via email to