You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2013/06/19 16:51:55 UTC

svn commit: r1494644 - in /qpid/trunk/qpid/cpp/src/qpid/messaging/amqp: SenderContext.cpp SenderContext.h

Author: gsim
Date: Wed Jun 19 14:51:55 2013
New Revision: 1494644

URL: http://svn.apache.org/r1494644
Log:
QPID-4935: handle case where peer to sender settles without setting a delivery state

Modified:
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp?rev=1494644&r1=1494643&r2=1494644&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp Wed Jun 19 14:51:55 2013
@@ -95,8 +95,8 @@ SenderContext::Delivery* SenderContext::
 
 uint32_t SenderContext::processUnsettled()
 {
-    //remove accepted messages from front of deque
-    while (!deliveries.empty() && deliveries.front().accepted()) {
+    //remove messages from front of deque once peer has confirmed receipt
+    while (!deliveries.empty() && deliveries.front().delivered()) {
         deliveries.front().settle();
         deliveries.pop_front();
     }
@@ -453,10 +453,28 @@ void SenderContext::Delivery::send(pn_li
     pn_link_advance(sender);
 }
 
+bool SenderContext::Delivery::delivered()
+{
+    if (pn_delivery_remote_state(token) || pn_delivery_settled(token)) {
+        //TODO: need a better means for signalling outcomes other than accepted
+        if (rejected()) {
+            QPID_LOG(warning, "delivery " << id << " was rejected by peer");
+        } else if (!accepted()) {
+            QPID_LOG(info, "delivery " << id << " was not accepted by peer");
+        }
+        return true;
+    } else {
+        return false;
+    }
+}
 bool SenderContext::Delivery::accepted()
 {
     return pn_delivery_remote_state(token) == PN_ACCEPTED;
 }
+bool SenderContext::Delivery::rejected()
+{
+    return pn_delivery_remote_state(token) == PN_REJECTED;
+}
 void SenderContext::Delivery::settle()
 {
     pn_delivery_settle(token);

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h?rev=1494644&r1=1494643&r2=1494644&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h Wed Jun 19 14:51:55 2013
@@ -53,7 +53,9 @@ class SenderContext
         Delivery(int32_t id);
         void encode(const qpid::messaging::MessageImpl& message, const qpid::messaging::Address&);
         void send(pn_link_t*);
+        bool delivered();
         bool accepted();
+        bool rejected();
         void settle();
       private:
         int32_t id;



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