return ctx->state;
}
-static int answer_query(knot_pkt_t *pkt, pack_t *addr_set, struct kr_request *param)
+static int answer_query(knot_pkt_t *pkt, pack_t *addr_set, struct kr_query *qry)
{
- knot_dname_t *qname = knot_dname_copy(knot_pkt_qname(pkt), &pkt->mm);
- uint16_t rrtype = knot_pkt_qtype(pkt);
- uint16_t rrclass = knot_pkt_qclass(pkt);
+ uint16_t rrtype = qry->stype;
+ uint16_t rrclass = qry->sclass;
+ if (rrtype != KNOT_RRTYPE_A && rrtype != KNOT_RRTYPE_AAAA) {
+ return kr_error(ENOENT);
+ }
+
+ knot_dname_t *qname = knot_dname_copy(qry->sname, &pkt->mm);
knot_rrset_t rr;
knot_rrset_init(&rr, qname, rrtype, rrclass);
int family_len = sizeof(struct in_addr);
if (!qry || ctx->state & (KNOT_STATE_DONE|KNOT_STATE_FAIL)) {
return ctx->state;
}
- if (qry->stype != KNOT_RRTYPE_A && qry->stype != KNOT_RRTYPE_AAAA) {
- return ctx->state;
- }
/* Find a matching name */
struct kr_module *module = ctx->api->data;
}
/* Write to packet */
- int ret = answer_query(pkt, pack, param);
+ int ret = answer_query(pkt, pack, qry);
if (ret != 0) {
return ctx->state;
}
DEBUG_MSG(qry, "<= answered from hints\n");
- qry->flags |= QUERY_CACHED;
+ qry->flags |= QUERY_CACHED|QUERY_NO_MINIMIZE;
+ pkt->parsed = pkt->size;
knot_wire_set_qr(pkt->wire);
return KNOT_STATE_DONE;
}