Add DNS_ERR_NODATA error code to handle empty replies.

This commit is contained in:
Leonid Evdokimov 2011-08-10 15:58:47 +04:00 committed by Nick Mathewson
parent 2b6eae5999
commit 94fba5b9ac
2 changed files with 10 additions and 1 deletions

View File

@ -843,13 +843,17 @@ reply_handle(struct request *const req, u16 flags, u32 ttl, struct reply *reply)
/* there was an error */
if (flags & 0x0200) {
error = DNS_ERR_TRUNCATED;
} else {
} else if (flags & 0x000f) {
u16 error_code = (flags & 0x000f) - 1;
if (error_code > 4) {
error = DNS_ERR_UNKNOWN;
} else {
error = error_codes[error_code];
}
} else if (reply && !reply->have_answer) {
error = DNS_ERR_NODATA;
} else {
error = DNS_ERR_UNKNOWN;
}
switch (error) {
@ -3871,6 +3875,7 @@ evdns_err_to_string(int err)
case DNS_ERR_TIMEOUT: return "request timed out";
case DNS_ERR_SHUTDOWN: return "dns subsystem shut down";
case DNS_ERR_CANCEL: return "dns request canceled";
case DNS_ERR_NODATA: return "no records in the reply";
default: return "[Unknown error code]";
}
}

View File

@ -166,6 +166,10 @@ extern "C" {
#define DNS_ERR_SHUTDOWN 68
/** The request was canceled via a call to evdns_cancel_request */
#define DNS_ERR_CANCEL 69
/** There were no answers and no error condition in the DNS packet.
* This can happen when you ask for an address that exists, but a record
* type that doesn't. */
#define DNS_ERR_NODATA 70
#define DNS_IPv4_A 1
#define DNS_PTR 2