You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by as...@apache.org on 2016/03/24 18:23:13 UTC

qpid-proton git commit: PROTON-1164: [C++ binding] Change on_message(event&, message&) - To on_message(event&, delivery&, message&) - Also simplify other delivery handlers by adding session(), connection() accessors

Repository: qpid-proton
Updated Branches:
  refs/heads/master 70fe07580 -> 6713bd5ad


PROTON-1164: [C++ binding] Change on_message(event&, message&)
- To on_message(event&, delivery&, message&)
- Also simplify other delivery handlers by adding session(), connection() accessors


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

Branch: refs/heads/master
Commit: 6713bd5adef87efa5d1c213aacf9162692ff4331
Parents: 70fe075
Author: Andrew Stitcher <as...@apache.org>
Authored: Thu Mar 24 01:18:00 2016 -0400
Committer: Andrew Stitcher <as...@apache.org>
Committed: Thu Mar 24 10:12:57 2016 -0400

----------------------------------------------------------------------
 examples/cpp/broker.hpp                             |  6 +++---
 examples/cpp/client.cpp                             |  4 ++--
 examples/cpp/direct_recv.cpp                        |  6 +++---
 examples/cpp/direct_send.cpp                        |  2 +-
 examples/cpp/engine/client.cpp                      |  4 ++--
 examples/cpp/engine/direct_recv.cpp                 |  6 +++---
 examples/cpp/engine/direct_send.cpp                 |  4 ++--
 examples/cpp/engine/helloworld.cpp                  |  4 ++--
 examples/cpp/engine/server.cpp                      |  8 ++++----
 examples/cpp/engine/simple_recv.cpp                 |  6 +++---
 examples/cpp/engine/simple_send.cpp                 |  4 ++--
 examples/cpp/helloworld.cpp                         |  4 ++--
 examples/cpp/helloworld_direct.cpp                  |  6 +++---
 examples/cpp/queue_browser.cpp                      |  6 +++---
 examples/cpp/selected_recv.cpp                      |  2 +-
 examples/cpp/server.cpp                             |  6 +++---
 examples/cpp/server_direct.cpp                      |  6 +++---
 examples/cpp/simple_recv.cpp                        |  6 +++---
 examples/cpp/simple_send.cpp                        |  4 ++--
 examples/cpp/ssl.cpp                                |  6 +++---
 examples/cpp/ssl_client_cert.cpp                    |  6 +++---
 proton-c/bindings/cpp/include/proton/connection.hpp |  1 +
 proton-c/bindings/cpp/include/proton/delivery.hpp   |  6 ++++++
 proton-c/bindings/cpp/include/proton/handler.hpp    |  2 +-
 proton-c/bindings/cpp/src/delivery.cpp              |  9 ++++++++-
 proton-c/bindings/cpp/src/handler.cpp               |  2 +-
 proton-c/bindings/cpp/src/messaging_adapter.cpp     |  2 +-
 tests/tools/apps/cpp/reactor_send.cpp               | 10 +++++-----
 28 files changed, 76 insertions(+), 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/broker.hpp
----------------------------------------------------------------------
diff --git a/examples/cpp/broker.hpp b/examples/cpp/broker.hpp
index ba9040c..f5751e1 100644
--- a/examples/cpp/broker.hpp
+++ b/examples/cpp/broker.hpp
@@ -214,9 +214,9 @@ class broker_handler : public proton::handler {
         queues_.get(address).dispatch(&s);
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
-        std::string address = e.link().local_target().address();
-        queues_.get(address).publish(m, e.link().receiver());
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
+        std::string address = d.link().local_target().address();
+        queues_.get(address).publish(m, d.link().receiver());
     }
 
   protected:

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/client.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/client.cpp b/examples/cpp/client.cpp
index c2ec499..1b6bd2b 100644
--- a/examples/cpp/client.cpp
+++ b/examples/cpp/client.cpp
@@ -58,7 +58,7 @@ class client : public proton::handler {
         send_request();
     }
 
-    void on_message(proton::event &e, proton::message &response) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &response) override {
         if (requests.empty()) return; // Spurious extra message!
 
         std::cout << requests.front() << " => " << response.body() << std::endl;
@@ -67,7 +67,7 @@ class client : public proton::handler {
         if (!requests.empty()) {
             send_request();
         } else {
-            e.connection().close();
+            d.connection().close();
         }
     }
 };

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/direct_recv.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/direct_recv.cpp b/examples/cpp/direct_recv.cpp
index b2df2cc..e67039d 100644
--- a/examples/cpp/direct_recv.cpp
+++ b/examples/cpp/direct_recv.cpp
@@ -49,7 +49,7 @@ class direct_recv : public proton::handler {
         std::cout << "direct_recv listening on " << url << std::endl;
     }
 
-    void on_message(proton::event &e, proton::message &msg) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &msg) override {
         if (proton::coerce<uint64_t>(msg.id()) < received) {
             return; // Ignore duplicate
         }
@@ -60,8 +60,8 @@ class direct_recv : public proton::handler {
         }
 
         if (received == expected) {
-            e.receiver().close();
-            e.connection().close();
+            d.link().close();
+            d.connection().close();
 
             if (!!acceptor) acceptor.close();
         }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/direct_send.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/direct_send.cpp b/examples/cpp/direct_send.cpp
index 12ba70e..37038fe 100644
--- a/examples/cpp/direct_send.cpp
+++ b/examples/cpp/direct_send.cpp
@@ -69,7 +69,7 @@ class simple_send : public proton::handler {
         if (confirmed == total) {
             std::cout << "all messages confirmed" << std::endl;
 
-            d.link().connection().close();
+            d.connection().close();
             acceptor.close();
         }
     }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/client.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/client.cpp b/examples/cpp/engine/client.cpp
index 2b22288..2384bf0 100644
--- a/examples/cpp/engine/client.cpp
+++ b/examples/cpp/engine/client.cpp
@@ -57,14 +57,14 @@ class client : public proton::handler {
         send_request();
     }
 
-    void on_message(proton::event &e, proton::message &response) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &response) override {
         if (requests.empty()) return; // Spurious extra message!
         std::cout << requests.front() << " => " << response.body() << std::endl;
         requests.erase(requests.begin());
         if (!requests.empty()) {
             send_request();
         } else {
-            e.connection().close();
+            d.connection().close();
         }
     }
 };

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/direct_recv.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/direct_recv.cpp b/examples/cpp/engine/direct_recv.cpp
index 485765b..64cd26e 100644
--- a/examples/cpp/engine/direct_recv.cpp
+++ b/examples/cpp/engine/direct_recv.cpp
@@ -41,7 +41,7 @@ class direct_recv : public proton::handler {
   public:
     direct_recv(int c) : expected(c), received(0) {}
 
-    void on_message(proton::event &e, proton::message &msg) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &msg) override {
         if (msg.id().get<uint64_t>() < received)
             return; // ignore duplicate
         if (expected == 0 || received < expected) {
@@ -49,8 +49,8 @@ class direct_recv : public proton::handler {
             received++;
         }
         if (received == expected) {
-            e.receiver().close();
-            e.connection().close();
+            d.link().close();
+            d.connection().close();
         }
     }
 };

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/direct_send.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/direct_send.cpp b/examples/cpp/engine/direct_send.cpp
index f876810..d05958d 100644
--- a/examples/cpp/engine/direct_send.cpp
+++ b/examples/cpp/engine/direct_send.cpp
@@ -54,11 +54,11 @@ class simple_send : public proton::handler {
         }
     }
 
-    void on_delivery_accept(proton::event &e, proton::delivery &) 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.connection().close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/helloworld.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/helloworld.cpp b/examples/cpp/engine/helloworld.cpp
index d146ae9..48b0417 100644
--- a/examples/cpp/engine/helloworld.cpp
+++ b/examples/cpp/engine/helloworld.cpp
@@ -46,9 +46,9 @@ class hello_world : public proton::handler {
         s.close();
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
-        e.connection().close();
+        d.connection().close();
     }
 };
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/server.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/server.cpp b/examples/cpp/engine/server.cpp
index 02c3ac9..33becec 100644
--- a/examples/cpp/engine/server.cpp
+++ b/examples/cpp/engine/server.cpp
@@ -57,15 +57,15 @@ class server : public proton::handler {
         return uc;
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, 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())));
-        reply.correlation_id(e.message().correlation_id());
+        reply.body(to_upper(proton::get<std::string>(m.body())));
+        reply.correlation_id(m.correlation_id());
         if (!senders[reply_to])
-            senders[reply_to] = e.connection().open_sender(reply_to);
+            senders[reply_to] = d.connection().open_sender(reply_to);
         senders[reply_to].send(reply);
     }
 };

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/simple_recv.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/simple_recv.cpp b/examples/cpp/engine/simple_recv.cpp
index bc17c5f..184857a 100644
--- a/examples/cpp/engine/simple_recv.cpp
+++ b/examples/cpp/engine/simple_recv.cpp
@@ -49,15 +49,15 @@ class simple_recv : public proton::handler {
         std::cout << "simple_recv listening on " << url << std::endl;
     }
 
-    void on_message(proton::event &e, proton::message &msg) override {
+    void on_message(proton::event &e, proton::delivery& d, proton::message &msg) override {
         if (msg.id().get<uint64_t>() < received)
             return; // ignore duplicate
         if (expected == 0 || received < expected) {
             std::cout << msg.body() << std::endl;
             received++;
             if (received == expected) {
-                e.receiver().close();
-                e.connection().close();
+                d.link().close();
+                d.connection().close();
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/engine/simple_send.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/engine/simple_send.cpp b/examples/cpp/engine/simple_send.cpp
index ef8a5b1..16e4743 100644
--- a/examples/cpp/engine/simple_send.cpp
+++ b/examples/cpp/engine/simple_send.cpp
@@ -59,11 +59,11 @@ class simple_send : public proton::handler {
         }
     }
 
-    void on_delivery_accept(proton::event &e, proton::delivery &) 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.connection().close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/helloworld.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/helloworld.cpp b/examples/cpp/helloworld.cpp
index f38037c..75cb0db 100644
--- a/examples/cpp/helloworld.cpp
+++ b/examples/cpp/helloworld.cpp
@@ -47,9 +47,9 @@ class hello_world : public proton::handler {
         s.close();
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
-        e.connection().close();
+        d.connection().close();
     }
 };
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/helloworld_direct.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/helloworld_direct.cpp b/examples/cpp/helloworld_direct.cpp
index a87d87b..762a179 100644
--- a/examples/cpp/helloworld_direct.cpp
+++ b/examples/cpp/helloworld_direct.cpp
@@ -47,12 +47,12 @@ class hello_world_direct : public proton::handler {
         s.close();
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
     }
 
-    void on_delivery_accept(proton::event &e, proton::delivery &) override {
-        e.connection().close();
+    void on_delivery_accept(proton::event &e, proton::delivery &d) override {
+        d.connection().close();
     }
 
     void on_connection_close(proton::event &, proton::connection &) override {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/queue_browser.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/queue_browser.cpp b/examples/cpp/queue_browser.cpp
index b160773..0da1ca3 100644
--- a/examples/cpp/queue_browser.cpp
+++ b/examples/cpp/queue_browser.cpp
@@ -41,11 +41,11 @@ class browser : public proton::handler {
         conn.open_receiver(url.path(), proton::link_options().browsing(true));
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
 
-        if (e.receiver().queued() == 0 && e.receiver().drained() > 0) {
-            e.connection().close();
+        if (d.link().queued() == 0 && d.link().drained() > 0) {
+            d.connection().close();
         }
     }
 };

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/selected_recv.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/selected_recv.cpp b/examples/cpp/selected_recv.cpp
index 23dee01..e5e64ef 100644
--- a/examples/cpp/selected_recv.cpp
+++ b/examples/cpp/selected_recv.cpp
@@ -41,7 +41,7 @@ class selected_recv : public proton::handler {
         conn.open_receiver(url.path(), proton::link_options().selector("colour = 'green'"));
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
     }
 };

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/server.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/server.cpp b/examples/cpp/server.cpp
index 95938ee..3254d7a 100644
--- a/examples/cpp/server.cpp
+++ b/examples/cpp/server.cpp
@@ -60,14 +60,14 @@ class server : public proton::handler {
         return uc;
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
-        std::cout << "Received " << e.message().body() << std::endl;
+    void on_message(proton::event &e, proton::delivery &d, 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())));
+        reply.body(to_upper(proton::get<std::string>(m.body())));
         reply.correlation_id(e.message().correlation_id());
 
         if (!senders[reply_to]) {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/server_direct.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/server_direct.cpp b/examples/cpp/server_direct.cpp
index 3dff34a..f5d7d46 100644
--- a/examples/cpp/server_direct.cpp
+++ b/examples/cpp/server_direct.cpp
@@ -73,10 +73,10 @@ class server : public proton::handler {
         }
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << "Received " << m.body() << std::endl;
 
-        std::string reply_to = e.message().reply_to();
+        std::string reply_to = m.reply_to();
         sender_map::iterator it = senders.find(reply_to);
 
         if (it == senders.end()) {
@@ -86,7 +86,7 @@ class server : public proton::handler {
             proton::message reply;
 
             reply.address(reply_to);
-            reply.body(to_upper(proton::get<std::string>(e.message().body())));
+            reply.body(to_upper(proton::get<std::string>(m.body())));
             reply.correlation_id(e.message().correlation_id());
 
             sender.send(reply);

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/simple_recv.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/simple_recv.cpp b/examples/cpp/simple_recv.cpp
index 32f9417..4e98fad 100644
--- a/examples/cpp/simple_recv.cpp
+++ b/examples/cpp/simple_recv.cpp
@@ -48,7 +48,7 @@ class simple_recv : public proton::handler {
         std::cout << "simple_recv listening on " << url << std::endl;
     }
 
-    void on_message(proton::event &e, proton::message &msg) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &msg) override {
         if (msg.id().get<uint64_t>() < received) {
             return; // Ignore duplicate
         }
@@ -58,8 +58,8 @@ class simple_recv : public proton::handler {
             received++;
 
             if (received == expected) {
-                e.receiver().close();
-                e.connection().close();
+                d.link().close();
+                d.connection().close();
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/simple_send.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/simple_send.cpp b/examples/cpp/simple_send.cpp
index 95a6601..6e03ac4 100644
--- a/examples/cpp/simple_send.cpp
+++ b/examples/cpp/simple_send.cpp
@@ -61,12 +61,12 @@ class simple_send : public proton::handler {
         }
     }
 
-    void on_delivery_accept(proton::event &e, proton::delivery &) 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.connection().close();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/ssl.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/ssl.cpp b/examples/cpp/ssl.cpp
index b792114..ad6ea03 100644
--- a/examples/cpp/ssl.cpp
+++ b/examples/cpp/ssl.cpp
@@ -53,7 +53,7 @@ struct server_handler : public proton::handler {
         acceptor.close();
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
     }
 };
@@ -100,9 +100,9 @@ class hello_world_direct : public proton::handler {
         s.close();
     }
 
-    void on_delivery_accept(proton::event &e, proton::delivery &) override {
+    void on_delivery_accept(proton::event &e, proton::delivery &d) override {
         // All done.
-        e.connection().close();
+        d.connection().close();
     }
 };
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/examples/cpp/ssl_client_cert.cpp
----------------------------------------------------------------------
diff --git a/examples/cpp/ssl_client_cert.cpp b/examples/cpp/ssl_client_cert.cpp
index 5c2b3ef..7255b07 100644
--- a/examples/cpp/ssl_client_cert.cpp
+++ b/examples/cpp/ssl_client_cert.cpp
@@ -63,7 +63,7 @@ struct server_handler : public proton::handler {
         inbound_listener.close();
     }
 
-    void on_message(proton::event &e, proton::message &m) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &m) override {
         std::cout << m.body() << std::endl;
     }
 };
@@ -115,9 +115,9 @@ class hello_world_direct : public proton::handler {
         s.close();
     }
 
-    void on_delivery_accept(proton::event &e, proton::delivery &) override {
+    void on_delivery_accept(proton::event &e, proton::delivery &d) override {
         // All done.
-        e.connection().close();
+        d.connection().close();
     }
 };
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/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 34600c0..e39f104 100644
--- a/proton-c/bindings/cpp/include/proton/connection.hpp
+++ b/proton-c/bindings/cpp/include/proton/connection.hpp
@@ -134,6 +134,7 @@ PN_CPP_CLASS_EXTERN connection : public internal::object<pn_connection_t>, publi
     friend class transport;
     friend class session;
     friend class link;
+    friend class delivery;
     friend class reactor;
     friend class proton_event;
     friend class override_handler;

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/proton-c/bindings/cpp/include/proton/delivery.hpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/include/proton/delivery.hpp b/proton-c/bindings/cpp/include/proton/delivery.hpp
index 062cf8f..8ae8bc1 100644
--- a/proton-c/bindings/cpp/include/proton/delivery.hpp
+++ b/proton-c/bindings/cpp/include/proton/delivery.hpp
@@ -44,6 +44,12 @@ class delivery : public internal::object<pn_delivery_t> {
     /// Return the link for this delivery
     PN_CPP_EXTERN class link link() const;
 
+    /// Return the session for this delivery
+    PN_CPP_EXTERN class session session() const;
+
+    /// Return the connection for this delivery
+    PN_CPP_EXTERN class connection connection() const;
+
     /// Delivery state values.
     enum state {
         NONE = 0,               ///< Unknown state

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/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 e04b26e..892e545 100644
--- a/proton-c/bindings/cpp/include/proton/handler.hpp
+++ b/proton-c/bindings/cpp/include/proton/handler.hpp
@@ -66,7 +66,7 @@ PN_CPP_CLASS_EXTERN handler
     /// The event loop is starting.
     PN_CPP_EXTERN virtual void on_container_start(event &e, container &c);
     /// A message is received.
-    PN_CPP_EXTERN virtual void on_message(event &e, message &m);
+    PN_CPP_EXTERN virtual void on_message(event &e, delivery &d, message &m);
     /// A message can be sent.
     PN_CPP_EXTERN virtual void on_sendable(event &e, sender &s);
 

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/proton-c/bindings/cpp/src/delivery.cpp
----------------------------------------------------------------------
diff --git a/proton-c/bindings/cpp/src/delivery.cpp b/proton-c/bindings/cpp/src/delivery.cpp
index 761d17a..9d69625 100644
--- a/proton-c/bindings/cpp/src/delivery.cpp
+++ b/proton-c/bindings/cpp/src/delivery.cpp
@@ -20,13 +20,20 @@
  */
 
 #include "proton/delivery.hpp"
-#include <proton/link.hpp>
+
+#include "proton/connection.hpp"
+#include "proton/link.hpp"
+#include "proton/session.hpp"
 
 #include "proton/delivery.h"
+#include "proton/link.h"
+#include "proton/session.h"
 
 namespace proton {
 
 link delivery::link() const { return pn_delivery_link(pn_object()); }
+session delivery::session() const { return pn_link_session(pn_delivery_link(pn_object())); }
+connection delivery::connection() const { return pn_session_connection(pn_link_session(pn_delivery_link(pn_object()))); }
 bool delivery::settled() const { return pn_delivery_settled(pn_object()); }
 
 void delivery::settle() { pn_delivery_settle(pn_object()); }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/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 59319de..00ee452 100644
--- a/proton-c/bindings/cpp/src/handler.cpp
+++ b/proton-c/bindings/cpp/src/handler.cpp
@@ -37,7 +37,7 @@ handler::handler() : messaging_adapter_(new messaging_adapter(*this)) {}
 handler::~handler(){}
 
 void handler::on_container_start(event &e, container &) { on_unhandled(e); }
-void handler::on_message(event &e, message &) { on_unhandled(e); }
+void handler::on_message(event &e, delivery &, message &) { on_unhandled(e); }
 void handler::on_sendable(event &e, sender &) { on_unhandled(e); }
 void handler::on_timer(event &e, container &) { on_unhandled(e); }
 void handler::on_transport_close(event &e, transport &) { on_unhandled(e); }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/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 02e4bc6..56488cc 100644
--- a/proton-c/bindings/cpp/src/messaging_adapter.cpp
+++ b/proton-c/bindings/cpp/src/messaging_adapter.cpp
@@ -97,7 +97,7 @@ void messaging_adapter::on_delivery(proton_event &pe) {
                 if (lctx.auto_accept)
                     dlv.release();
             } else {
-                delegate_.on_message(mevent, msg);
+                delegate_.on_message(mevent, dlv, msg);
                 if (lctx.auto_accept && !dlv.settled())
                     dlv.accept();
             }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/6713bd5a/tests/tools/apps/cpp/reactor_send.cpp
----------------------------------------------------------------------
diff --git a/tests/tools/apps/cpp/reactor_send.cpp b/tests/tools/apps/cpp/reactor_send.cpp
index 541de1c..e21ed9c 100644
--- a/tests/tools/apps/cpp/reactor_send.cpp
+++ b/tests/tools/apps/cpp/reactor_send.cpp
@@ -87,20 +87,20 @@ class reactor_send : public proton::handler {
         if (confirmed_ == total_) {
             std::cout << "all messages confirmed" << std::endl;
             if (!replying_)
-                d.link().connection().close();
+                d.connection().close();
         }
     }
 
-    void on_message(proton::event &e, proton::message &msg) override {
+    void on_message(proton::event &e, proton::delivery &d, proton::message &msg) override {
         received_content_ = proton::get<proton::binary>(msg.body());
         received_bytes_ += received_content_.size();
         if (received_ < total_) {
             received_++;
         }
-        e.delivery().settle();
+        d.settle();
         if (received_ == total_) {
-            e.receiver().close();
-            e.connection().close();
+            d.link().close();
+            d.connection().close();
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org