diff --git a/src/knot/events/handlers/refresh.c b/src/knot/events/handlers/refresh.c index e73adb310ee2da27e386c2f3447897fd4f7468fd..4204374752abcb7c79093841443828a75ca3e523 100644 --- a/src/knot/events/handlers/refresh.c +++ b/src/knot/events/handlers/refresh.c @@ -1082,7 +1082,7 @@ static int transfer_consume(knot_layer_t *layer, knot_pkt_t *pkt) if (data->expire_timer < 2) { REFRESH_LOG(LOG_WARNING, data, LOG_DIRECTION_NONE, "remote is expired, ignoring"); - return KNOT_STATE_FAIL; + return KNOT_STATE_IGNORE; } data->fallback_axfr = (data->xfr_type == XFR_TYPE_IXFR); diff --git a/src/knot/query/layer.h b/src/knot/query/layer.h index 252d043ae807c05fcfd13e96d31d217db6d18317..119ae5d6ac337ce0c86c012a685f50d9446a6fb5 100644 --- a/src/knot/query/layer.h +++ b/src/knot/query/layer.h @@ -34,6 +34,7 @@ typedef enum { KNOT_STATE_DONE, //!< Finished. KNOT_STATE_FAIL, //!< Error. KNOT_STATE_FINAL, //!< Finished and finalized. + KNOT_STATE_IGNORE, //!< Data has been ignored. } knot_layer_state_t; typedef struct knot_layer_api knot_layer_api_t; diff --git a/src/knot/query/requestor.c b/src/knot/query/requestor.c index 8e27c830fd04269259d976728968cc4a0b9be679..8643f740fb7613007161c10d87a9e090d1439687 100644 --- a/src/knot/query/requestor.c +++ b/src/knot/query/requestor.c @@ -355,10 +355,15 @@ int knot_requestor_exec(knot_requestor_t *requestor, knot_request_t *request, } /* Expect complete request. */ - if (requestor->layer.state != KNOT_STATE_DONE) { - ret = KNOT_EPROCESSING; - } else { + switch (requestor->layer.state) { + case KNOT_STATE_DONE: request->flags |= KNOT_REQUEST_KEEP; + break; + case KNOT_STATE_IGNORE: + ret = KNOT_ERROR; + break; + default: + ret = KNOT_EPROCESSING; } /* Verify last TSIG */