summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp b/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
index f2949c5879..72a5c59667 100644
--- a/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
+++ b/qpid/cpp/src/qpid/broker/amqp/Outgoing.cpp
@@ -139,8 +139,15 @@ void OutgoingFromQueue::handle(pn_delivery_t* delivery)
outgoingMessageRejected();//TODO: not quite true...
break;
case PN_MODIFIED:
- if (preAcquires()) queue->release(r.cursor, pn_disposition_is_failed(pn_delivery_remote(delivery)));
- //TODO: handle undeliverable-here and message-annotations
+ if (preAcquires()) {
+ //TODO: handle message-annotations
+ if (pn_disposition_is_undeliverable(pn_delivery_remote(delivery))) {
+ //treat undeliverable here as rejection
+ queue->reject(r.cursor);
+ } else {
+ queue->release(r.cursor, pn_disposition_is_failed(pn_delivery_remote(delivery)));
+ }
+ }
outgoingMessageRejected();//TODO: not quite true...
break;
default: