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]
