This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git

commit d1966475433ce218bb700bc5d2763f5437868c7f
Author: Kenneth Giusti <[email protected]>
AuthorDate: Sat Dec 12 11:51:19 2020 -0500

    DISPATCH-1880: avoid discarding invalid messages on outbound link
---
 src/adaptors/http1/http1_client.c | 5 -----
 src/adaptors/http1/http1_server.c | 6 ------
 src/router_node.c                 | 2 +-
 3 files changed, 1 insertion(+), 12 deletions(-)

diff --git a/src/adaptors/http1/http1_client.c 
b/src/adaptors/http1/http1_client.c
index 952c992..19a70a2 100644
--- a/src/adaptors/http1/http1_client.c
+++ b/src/adaptors/http1/http1_client.c
@@ -1456,8 +1456,6 @@ uint64_t 
qdr_http1_client_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                                             bool                    settled)
 {
     qd_message_t        *msg = qdr_delivery_message(delivery);
-    if (qd_message_is_discard(msg))
-        return 0;
 
     _client_request_t  *hreq = (_client_request_t*) 
qdr_delivery_get_context(delivery);
     if (!hreq) {
@@ -1471,7 +1469,6 @@ uint64_t 
qdr_http1_client_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                    "[C%"PRIu64"][L%"PRIu64"] Malformed HTTP/1.x message",
                    hconn->conn_id, link->identity);
             qd_message_set_send_complete(msg);
-            qd_message_set_discard(msg, true);
             qdr_http1_close_connection(hconn, "Malformed response message");
             return PN_REJECTED;
 
@@ -1483,7 +1480,6 @@ uint64_t 
qdr_http1_client_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                 qd_log(qdr_http1_adaptor->log, QD_LOG_WARNING,
                        "[C%"PRIu64"][L%"PRIu64"] Discarding malformed 
message.", hconn->conn_id, link->identity);
                 qd_message_set_send_complete(msg);
-                qd_message_set_discard(msg, true);
                 qdr_http1_close_connection(hconn, "Cannot correlate response 
message");
                 return PN_REJECTED;
             }
@@ -1545,7 +1541,6 @@ uint64_t 
qdr_http1_client_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
             } else {
                 // The response was bad.  There's not much that can be done to
                 // recover, so for now I punt...
-                qd_message_set_discard(msg, true);
 
                 // returning a terminal disposition will cause the delivery to 
be updated and settled,
                 // so drop our reference
diff --git a/src/adaptors/http1/http1_server.c 
b/src/adaptors/http1/http1_server.c
index 8f03fe7..18a114a 100644
--- a/src/adaptors/http1/http1_server.c
+++ b/src/adaptors/http1/http1_server.c
@@ -631,7 +631,6 @@ static bool _process_requests(qdr_http1_connection_t *hconn)
 
         // clean up the request message delivery
         if (hreq->request_dlv) {
-            qd_message_set_discard(qdr_delivery_message(hreq->request_dlv), 
true);
 
             if ((!hreq->request_acked || !hreq->request_settled) &&
                 hconn->cfg.aggregation == QD_AGGREGATION_NONE) {
@@ -1407,8 +1406,6 @@ uint64_t 
qdr_http1_server_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                                             bool                    settled)
 {
     qd_message_t *msg = qdr_delivery_message(delivery);
-    if (qd_message_is_discard(msg))
-        return 0;
 
     _server_request_t *hreq = (_server_request_t*) 
qdr_delivery_get_context(delivery);
     if (!hreq) {
@@ -1422,7 +1419,6 @@ uint64_t 
qdr_http1_server_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                    "[C%"PRIu64"][L%"PRIu64"] Malformed HTTP/1.x message",
                    hconn->conn_id, link->identity);
             qd_message_set_send_complete(msg);
-            qd_message_set_discard(msg, true);
             qdr_link_flow(qdr_http1_adaptor->core, link, 1, false);
             return PN_REJECTED;
 
@@ -1432,7 +1428,6 @@ uint64_t 
qdr_http1_server_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                 qd_log(qdr_http1_adaptor->log, QD_LOG_WARNING,
                        "[C%"PRIu64"][L%"PRIu64"] Discarding malformed 
message.", hconn->conn_id, link->identity);
                 qd_message_set_send_complete(msg);
-                qd_message_set_discard(msg, true);
                 qdr_link_flow(qdr_http1_adaptor->core, link, 1, false);
                 return PN_REJECTED;
             }
@@ -1458,7 +1453,6 @@ uint64_t 
qdr_http1_server_core_link_deliver(qdr_http1_adaptor_t    *adaptor,
                        hconn->conn_id, link->identity, hreq->base.msg_id);
             } else {
                 // message invalid
-                qd_message_set_discard(msg, true);
                 _cancel_request(hreq);
 
                 // returning a terminal disposition will cause the delivery to 
be updated and settled,
diff --git a/src/router_node.c b/src/router_node.c
index f39a4e0..a61fe87 100644
--- a/src/router_node.c
+++ b/src/router_node.c
@@ -1960,7 +1960,7 @@ static void CORE_delivery_update(void *context, 
qdr_delivery_t *dlv, uint64_t di
             qdr_node_disconnect_deliveries(router->router_core, link, dlv, 
pnd);
             pn_delivery_settle(pnd);
         } else {
-            if (disp == PN_RELEASED || disp == PN_MODIFIED || 
qdr_delivery_presettled(dlv)) {
+            if (disp == PN_RELEASED || disp == PN_MODIFIED || disp == 
PN_REJECTED || qdr_delivery_presettled(dlv)) {
                 //
                 // If the delivery is settled and it is still arriving, defer 
the settlement
                 // until the content has fully arrived. For now set the 
disposition on the qdr_delivery


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to