summaryrefslogtreecommitdiffstats
path: root/lib/dns/result.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/dns/result.c121
1 files changed, 121 insertions, 0 deletions
diff --git a/lib/dns/result.c b/lib/dns/result.c
new file mode 100644
index 0000000..bb9afa9
--- /dev/null
+++ b/lib/dns/result.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+/*! \file */
+
+#include <isc/once.h>
+#include <isc/result.h>
+#include <isc/util.h>
+
+#include <dns/result.h>
+
+dns_rcode_t
+dns_result_torcode(isc_result_t result) {
+ /* Try to supply an appropriate rcode. */
+ switch (result) {
+ case DNS_R_NOERROR:
+ case ISC_R_SUCCESS:
+ return (dns_rcode_noerror);
+ case DNS_R_FORMERR:
+ case ISC_R_BADBASE64:
+ case ISC_R_RANGE:
+ case ISC_R_UNEXPECTEDEND:
+ case DNS_R_BADAAAA:
+ /* case DNS_R_BADBITSTRING: deprecated */
+ case DNS_R_BADCKSUM:
+ case DNS_R_BADCLASS:
+ case DNS_R_BADLABELTYPE:
+ case DNS_R_BADPOINTER:
+ case DNS_R_BADTTL:
+ case DNS_R_BADZONE:
+ /* case DNS_R_BITSTRINGTOOLONG: deprecated */
+ case DNS_R_EXTRADATA:
+ case DNS_R_LABELTOOLONG:
+ case DNS_R_NOREDATA:
+ case DNS_R_SYNTAX:
+ case DNS_R_TEXTTOOLONG:
+ case DNS_R_TOOMANYHOPS:
+ case DNS_R_TSIGERRORSET:
+ case DNS_R_UNKNOWN:
+ case DNS_R_NAMETOOLONG:
+ case DNS_R_OPTERR:
+ return (dns_rcode_formerr);
+ case DNS_R_SERVFAIL:
+ return (dns_rcode_servfail);
+ case DNS_R_NXDOMAIN:
+ return (dns_rcode_nxdomain);
+ case DNS_R_NOTIMP:
+ return (dns_rcode_notimp);
+ case DNS_R_REFUSED:
+ case DNS_R_DISALLOWED:
+ return (dns_rcode_refused);
+ case DNS_R_YXDOMAIN:
+ return (dns_rcode_yxdomain);
+ case DNS_R_YXRRSET:
+ return (dns_rcode_yxrrset);
+ case DNS_R_NXRRSET:
+ return (dns_rcode_nxrrset);
+ case DNS_R_NOTAUTH:
+ case DNS_R_TSIGVERIFYFAILURE:
+ case DNS_R_CLOCKSKEW:
+ return (dns_rcode_notauth);
+ case DNS_R_NOTZONE:
+ return (dns_rcode_notzone);
+ case DNS_R_RCODE11:
+ case DNS_R_RCODE12:
+ case DNS_R_RCODE13:
+ case DNS_R_RCODE14:
+ case DNS_R_RCODE15:
+ return (result - DNS_R_NOERROR);
+ case DNS_R_BADVERS:
+ return (dns_rcode_badvers);
+ case DNS_R_BADCOOKIE:
+ return (dns_rcode_badcookie);
+ default:
+ return (dns_rcode_servfail);
+ }
+}
+
+isc_result_t
+dns_result_fromrcode(dns_rcode_t rcode) {
+ switch (rcode) {
+ case dns_rcode_noerror:
+ return (DNS_R_NOERROR);
+ case dns_rcode_formerr:
+ return (DNS_R_FORMERR);
+ case dns_rcode_servfail:
+ return (DNS_R_SERVFAIL);
+ case dns_rcode_nxdomain:
+ return (DNS_R_NXDOMAIN);
+ case dns_rcode_notimp:
+ return (DNS_R_NOTIMP);
+ case dns_rcode_refused:
+ return (DNS_R_REFUSED);
+ case dns_rcode_yxdomain:
+ return (DNS_R_YXDOMAIN);
+ case dns_rcode_yxrrset:
+ return (DNS_R_YXRRSET);
+ case dns_rcode_nxrrset:
+ return (DNS_R_NXRRSET);
+ case dns_rcode_notauth:
+ return (DNS_R_NOTAUTH);
+ case dns_rcode_notzone:
+ return (DNS_R_NOTZONE);
+ case dns_rcode_badvers:
+ return (DNS_R_BADVERS);
+ case dns_rcode_badcookie:
+ return (DNS_R_BADCOOKIE);
+ default:
+ return (DNS_R_SERVFAIL);
+ }
+}