int knot_query_nsid_requested(const knot_packet_t *query) { if (query == NULL) { return KNOT_EINVAL; } return ((knot_edns_get_version(&query->opt_rr) != EDNS_NOT_SUPPORTED) && knot_edns_has_option(&query->opt_rr, EDNS_OPTION_NSID)); }
/*----------------------------------------------------------------------------*/ _public_ bool knot_edns_has_nsid(const knot_rrset_t *opt_rr) { return knot_edns_has_option(opt_rr, KNOT_EDNS_OPTION_NSID); }
static bool test_getters(knot_rrset_t *opt_rr, int *done) { assert(opt_rr != NULL); assert(done != NULL); bool success = true; /* These values should be set from the setters test: * Max UDP payload: E_MAX_PLD2 * Version: E_VERSION2 * RCODE: E_RCODE2 * Flags: E_FLAGS | KNOT_EDNS_FLAG_DO * OPTIONs: 1) KNOT_EDNS_OPTION_NSID, E_NSID_LEN, E_NSID_STR * 2) E_OPT3_CODE, 0, 0 * 3) E_OPT4_CODE, 0, 0 */ /* Payload */ bool check = (knot_edns_get_payload(opt_rr) == E_MAX_PLD2); ok(check, "OPT RR getters: payload"); success &= check; (*done)++; /* Extended RCODE */ check = (knot_edns_get_ext_rcode(opt_rr) == E_RCODE2); ok(check, "OPT RR getters: extended RCODE"); success &= check; (*done)++; /* Extended RCODE */ check = (knot_edns_get_version(opt_rr) == E_VERSION2); ok(check, "OPT RR getters: version"); success &= check; (*done)++; /* DO bit */ check = knot_edns_do(opt_rr); ok(check, "OPT RR getters: DO bit check"); success &= check; (*done)++; /* Wire size */ size_t total_size = KNOT_EDNS_MIN_SIZE + E_NSID_SIZE + E_OPT3_SIZE + E_OPT4_SIZE; size_t actual_size = knot_edns_wire_size(opt_rr); check = actual_size == total_size; ok(check, "OPT RR getters: wire size (expected: %zu, actual: %zu)", total_size, actual_size); success &= check; (*done)++; /* NSID */ check = knot_edns_has_option(opt_rr, KNOT_EDNS_OPTION_NSID); ok(check, "OPT RR getters: NSID check"); success &= check; (*done)++; /* Other OPTIONs */ check = knot_edns_has_option(opt_rr, E_OPT3_CODE); ok(check, "OPT RR getters: empty option 1"); success &= check; (*done)++; check = knot_edns_has_option(opt_rr, E_OPT4_CODE); ok(check, "OPT RR getters: empty option 2"); success &= check; (*done)++; return success; }