return (an->count == 0) ? PKT_NODATA : PKT_NOERROR;
case KNOT_RCODE_NXDOMAIN:
return PKT_NXDOMAIN;
+ case KNOT_RCODE_REFUSED:
+ return PKT_REFUSED;
default:
return PKT_ERROR;
}
bool is_final = (query->parent == NULL);
int pkt_class = kr_response_classify(pkt);
if (!knot_dname_is_equal(knot_pkt_qname(pkt), query->sname) &&
- (pkt_class & (PKT_NOERROR|PKT_NXDOMAIN|PKT_NODATA))) {
+ (pkt_class & (PKT_NOERROR|PKT_NXDOMAIN|PKT_REFUSED|PKT_NODATA))) {
DEBUG_MSG("<= found cut, retrying with non-minimized name\n");
query->flags |= QUERY_NO_MINIMIZE;
return KNOT_STATE_DONE;
switch(knot_wire_get_rcode(pkt->wire)) {
case KNOT_RCODE_NOERROR:
case KNOT_RCODE_NXDOMAIN:
+ case KNOT_RCODE_REFUSED:
break; /* OK */
case KNOT_RCODE_FORMERR:
case KNOT_RCODE_NOTIMPL:
PKT_NOERROR = 1 << 0, /* Positive response */
PKT_NODATA = 1 << 1, /* No data response */
PKT_NXDOMAIN = 1 << 2, /* Negative response */
- PKT_ERROR = 1 << 3 /* Refused or server failure */
+ PKT_REFUSED = 1 << 3, /* Refused response */
+ PKT_ERROR = 1 << 4 /* Bad message */
};
/** Classify response by type. */
int kr_response_classify(knot_pkt_t *pkt);
/* Processing module implementation. */
-const knot_layer_api_t *iterate_layer(struct kr_module *module);
\ No newline at end of file
+const knot_layer_api_t *iterate_layer(struct kr_module *module);