iter_resptype.c File Reference

This file defines the response type. More...

#include "config.h"
#include "iterator/iter_resptype.h"
#include "iterator/iter_delegpt.h"
#include "iterator/iterator.h"
#include "services/cache/dns.h"
#include "util/net_help.h"
#include "util/data/dname.h"
#include "sldns/rrdef.h"
#include "sldns/pkthdr.h"

Functions

enum response_type response_type_from_cache (struct dns_msg *msg, struct query_info *request)
 Classifies a response message from cache based on the current request.
 
enum response_type response_type_from_server (int rdset, struct dns_msg *msg, struct query_info *request, struct delegpt *dp, int *empty_nodata_found, int msg_lame_empty, int msg_lame_referral)
 Classifies a response message (from the wire) based on the current request.
 

Detailed Description

This file defines the response type.

DNS Responses can be classified as one of the response types.

Function Documentation

◆ response_type_from_cache()

enum response_type response_type_from_cache ( struct dns_msg msg,
struct query_info request 
)

Classifies a response message from cache based on the current request.

Note that this routine assumes that THROWAWAY or LAME responses will not occur. Also, it will not detect REFERRAL type messages, since those are (currently) automatically classified based on how they came from the cache (findDelegation() instead of lookup()).

Parameters
msgthe message from the cache.
requestthe request that generated the response.
Returns
the response type (CNAME or ANSWER).

References reply_info::an_numrrsets, packed_rrset_key::dname, reply_info::flags, FLAGS_GET_RCODE, get_cname_target(), LDNS_RR_TYPE_ANY, LDNS_RR_TYPE_CNAME, query_info::qclass, query_info::qname, query_info::qname_len, query_info::qtype, query_dname_compare(), dns_msg::rep, RESPONSE_TYPE_ANSWER, RESPONSE_TYPE_CNAME, ub_packed_rrset_key::rk, packed_rrset_key::rrset_class, reply_info::rrsets, and packed_rrset_key::type.

Referenced by processInitRequest().

◆ response_type_from_server()

enum response_type response_type_from_server ( int  rdset,
struct dns_msg msg,
struct query_info request,
struct delegpt dp,
int *  empty_nodata_found,
int  msg_lame_empty,
int  msg_lame_referral 
)

Classifies a response message (from the wire) based on the current request.

NOTE: currently this routine uses the AA bit in the response to help distinguish between some non-standard referrals and answers. It also relies somewhat on the originating zone to be accurate (for lameness detection, mostly).

Parameters
rdsetif RD bit was sent in query sent by unbound.
msgthe message from the cache.
requestthe request that generated the response.
dpThe delegation point that was being queried when the response was returned.
empty_nodata_foundflag to keep track of empty nodata detection.
msg_lame_emptyThe scrubber indicates that this empty message is lame, before it became empty.
msg_lame_referralreturned true if the reply has a referral before scrub.
Returns
the response type (CNAME or ANSWER).

References reply_info::an_numrrsets, reply_info::ar_numrrsets, BIT_AA, BIT_RA, BIT_TC, packed_rrset_key::dname, dname_strict_subdomain_c(), dname_subdomain_c(), EMPTY_NODATA_RETRY_COUNT, reply_info::flags, FLAGS_GET_RCODE, get_cname_target(), LDNS_RR_TYPE_ANY, LDNS_RR_TYPE_CNAME, LDNS_RR_TYPE_NS, LDNS_RR_TYPE_SOA, delegpt::name, reply_info::ns_numrrsets, query_info::qclass, query_info::qname, query_info::qname_len, query_info::qtype, query_dname_compare(), dns_msg::rep, RESPONSE_TYPE_ANSWER, RESPONSE_TYPE_CNAME, RESPONSE_TYPE_LAME, RESPONSE_TYPE_REC_LAME, RESPONSE_TYPE_REFERRAL, RESPONSE_TYPE_THROWAWAY, ub_packed_rrset_key::rk, packed_rrset_key::rrset_class, reply_info::rrsets, and packed_rrset_key::type.

Referenced by processPrimeResponse(), and processQueryResponse().