diff --git a/src/Makefile.in b/src/Makefile.in index c01f1443..1e1dddab 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -40,6 +40,7 @@ EXTENSION_LIBEV_OBJ=@EXTENSION_LIBEV_OBJ@ GETDNS_OBJ=sync.lo context.lo list.lo dict.lo convert.lo general.lo \ hostname.lo service.lo request-internal.lo validate_dnssec.lo \ util-internal.lo getdns_error.lo rr-dict.lo validation-chain.lo \ + const-info.lo \ $(EXTENSION_LIBEVENT_OBJ) $(EXTENSION_LIBUV_OBJ) $(EXTENSION_LIBEV_OBJ) .SUFFIXES: .c .o .a .lo .h diff --git a/src/const-info.c b/src/const-info.c new file mode 100644 index 00000000..c9b6c0ff --- /dev/null +++ b/src/const-info.c @@ -0,0 +1,95 @@ +/* WARNING! This file is generated by the mk-const-info.c.sh program. + * Do not edit manually! + */ +#include +#include +#include "const-info.h" + +static struct const_info consts_info[] = { + { -1, "/* */", "/* */" }, + { 0, "GETDNS_RETURN_GOOD", GETDNS_RETURN_GOOD_TEXT }, + { 1, "GETDNS_RETURN_GENERIC_ERROR", GETDNS_RETURN_GENERIC_ERROR_TEXT }, + { 300, "GETDNS_RETURN_BAD_DOMAIN_NAME", GETDNS_RETURN_BAD_DOMAIN_NAME_TEXT }, + { 301, "GETDNS_RETURN_BAD_CONTEXT", GETDNS_RETURN_BAD_CONTEXT_TEXT }, + { 302, "GETDNS_RETURN_CONTEXT_UPDATE_FAIL", GETDNS_RETURN_CONTEXT_UPDATE_FAIL_TEXT }, + { 303, "GETDNS_RETURN_UNKNOWN_TRANSACTION", GETDNS_RETURN_UNKNOWN_TRANSACTION_TEXT }, + { 304, "GETDNS_RETURN_NO_SUCH_LIST_ITEM", GETDNS_RETURN_NO_SUCH_LIST_ITEM_TEXT }, + { 305, "GETDNS_RETURN_NO_SUCH_DICT_NAME", GETDNS_RETURN_NO_SUCH_DICT_NAME_TEXT }, + { 306, "GETDNS_RETURN_WRONG_TYPE_REQUESTED", GETDNS_RETURN_WRONG_TYPE_REQUESTED_TEXT }, + { 307, "GETDNS_RETURN_NO_SUCH_EXTENSION", GETDNS_RETURN_NO_SUCH_EXTENSION_TEXT }, + { 308, "GETDNS_RETURN_EXTENSION_MISFORMAT", GETDNS_RETURN_EXTENSION_MISFORMAT_TEXT }, + { 309, "GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED", GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED_TEXT }, + { 310, "GETDNS_RETURN_MEMORY_ERROR", GETDNS_RETURN_MEMORY_ERROR_TEXT }, + { 311, "GETDNS_RETURN_INVALID_PARAMETER", GETDNS_RETURN_INVALID_PARAMETER_TEXT }, + { 400, "GETDNS_DNSSEC_SECURE", GETDNS_DNSSEC_SECURE_TEXT }, + { 401, "GETDNS_DNSSEC_BOGUS", GETDNS_DNSSEC_BOGUS_TEXT }, + { 402, "GETDNS_DNSSEC_INDETERMINATE", GETDNS_DNSSEC_INDETERMINATE_TEXT }, + { 403, "GETDNS_DNSSEC_INSECURE", GETDNS_DNSSEC_INSECURE_TEXT }, + { 404, "GETDNS_DNSSEC_NOT_PERFORMED", GETDNS_DNSSEC_NOT_PERFORMED_TEXT }, + { 500, "GETDNS_NAMESPACE_DNS", GETDNS_NAMESPACE_DNS_TEXT }, + { 501, "GETDNS_NAMESPACE_LOCALNAMES", GETDNS_NAMESPACE_LOCALNAMES_TEXT }, + { 502, "GETDNS_NAMESPACE_NETBIOS", GETDNS_NAMESPACE_NETBIOS_TEXT }, + { 503, "GETDNS_NAMESPACE_MDNS", GETDNS_NAMESPACE_MDNS_TEXT }, + { 504, "GETDNS_NAMESPACE_NIS", GETDNS_NAMESPACE_NIS_TEXT }, + { 520, "GETDNS_RESOLUTION_STUB", GETDNS_RESOLUTION_STUB_TEXT }, + { 521, "GETDNS_RESOLUTION_RECURSING", GETDNS_RESOLUTION_RECURSING_TEXT }, + { 530, "GETDNS_REDIRECTS_FOLLOW", GETDNS_REDIRECTS_FOLLOW_TEXT }, + { 531, "GETDNS_REDIRECTS_DO_NOT_FOLLOW", GETDNS_REDIRECTS_DO_NOT_FOLLOW_TEXT }, + { 540, "GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP", GETDNS_TRANSPORT_UDP_FIRST_AND_FALL_BACK_TO_TCP_TEXT }, + { 541, "GETDNS_TRANSPORT_UDP_ONLY", GETDNS_TRANSPORT_UDP_ONLY_TEXT }, + { 542, "GETDNS_TRANSPORT_TCP_ONLY", GETDNS_TRANSPORT_TCP_ONLY_TEXT }, + { 543, "GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN", GETDNS_TRANSPORT_TCP_ONLY_KEEP_CONNECTIONS_OPEN_TEXT }, + { 550, "GETDNS_APPEND_NAME_ALWAYS", GETDNS_APPEND_NAME_ALWAYS_TEXT }, + { 551, "GETDNS_APPEND_NAME_ONLY_TO_SINGLE_LABEL_AFTER_FAILURE", GETDNS_APPEND_NAME_ONLY_TO_SINGLE_LABEL_AFTER_FAILURE_TEXT }, + { 552, "GETDNS_APPEND_NAME_ONLY_TO_MULTIPLE_LABEL_NAME_AFTER_FAILURE", GETDNS_APPEND_NAME_ONLY_TO_MULTIPLE_LABEL_NAME_AFTER_FAILURE_TEXT }, + { 553, "GETDNS_APPEND_NAME_NEVER", GETDNS_APPEND_NAME_NEVER_TEXT }, + { 600, "GETDNS_CONTEXT_CODE_NAMESPACES", GETDNS_CONTEXT_CODE_NAMESPACES_TEXT }, + { 601, "GETDNS_CONTEXT_CODE_RESOLUTION_TYPE", GETDNS_CONTEXT_CODE_RESOLUTION_TYPE_TEXT }, + { 602, "GETDNS_CONTEXT_CODE_FOLLOW_REDIRECTS", GETDNS_CONTEXT_CODE_FOLLOW_REDIRECTS_TEXT }, + { 603, "GETDNS_CONTEXT_CODE_UPSTREAM_RECURSIVE_SERVERS", GETDNS_CONTEXT_CODE_UPSTREAM_RECURSIVE_SERVERS_TEXT }, + { 604, "GETDNS_CONTEXT_CODE_DNS_ROOT_SERVERS", GETDNS_CONTEXT_CODE_DNS_ROOT_SERVERS_TEXT }, + { 605, "GETDNS_CONTEXT_CODE_DNS_TRANSPORT", GETDNS_CONTEXT_CODE_DNS_TRANSPORT_TEXT }, + { 606, "GETDNS_CONTEXT_CODE_LIMIT_OUTSTANDING_QUERIES", GETDNS_CONTEXT_CODE_LIMIT_OUTSTANDING_QUERIES_TEXT }, + { 607, "GETDNS_CONTEXT_CODE_APPEND_NAME", GETDNS_CONTEXT_CODE_APPEND_NAME_TEXT }, + { 608, "GETDNS_CONTEXT_CODE_SUFFIX", GETDNS_CONTEXT_CODE_SUFFIX_TEXT }, + { 609, "GETDNS_CONTEXT_CODE_DNSSEC_TRUST_ANCHORS", GETDNS_CONTEXT_CODE_DNSSEC_TRUST_ANCHORS_TEXT }, + { 610, "GETDNS_CONTEXT_CODE_EDNS_MAXIMUM_UDP_PAYLOAD_SIZE", GETDNS_CONTEXT_CODE_EDNS_MAXIMUM_UDP_PAYLOAD_SIZE_TEXT }, + { 611, "GETDNS_CONTEXT_CODE_EDNS_EXTENDED_RCODE", GETDNS_CONTEXT_CODE_EDNS_EXTENDED_RCODE_TEXT }, + { 612, "GETDNS_CONTEXT_CODE_EDNS_VERSION", GETDNS_CONTEXT_CODE_EDNS_VERSION_TEXT }, + { 613, "GETDNS_CONTEXT_CODE_EDNS_DO_BIT", GETDNS_CONTEXT_CODE_EDNS_DO_BIT_TEXT }, + { 614, "GETDNS_CONTEXT_CODE_DNSSEC_ALLOWED_SKEW", GETDNS_CONTEXT_CODE_DNSSEC_ALLOWED_SKEW_TEXT }, + { 615, "GETDNS_CONTEXT_CODE_MEMORY_FUNCTIONS", GETDNS_CONTEXT_CODE_MEMORY_FUNCTIONS_TEXT }, + { 616, "GETDNS_CONTEXT_CODE_TIMEOUT", GETDNS_CONTEXT_CODE_TIMEOUT_TEXT }, + { 700, "GETDNS_CALLBACK_COMPLETE", GETDNS_CALLBACK_COMPLETE_TEXT }, + { 701, "GETDNS_CALLBACK_CANCEL", GETDNS_CALLBACK_CANCEL_TEXT }, + { 702, "GETDNS_CALLBACK_TIMEOUT", GETDNS_CALLBACK_TIMEOUT_TEXT }, + { 703, "GETDNS_CALLBACK_ERROR", GETDNS_CALLBACK_ERROR_TEXT }, + { 800, "GETDNS_NAMETYPE_DNS", GETDNS_NAMETYPE_DNS_TEXT }, + { 801, "GETDNS_NAMETYPE_WINS", GETDNS_NAMETYPE_WINS_TEXT }, + { 900, "GETDNS_RESPSTATUS_GOOD", GETDNS_RESPSTATUS_GOOD_TEXT }, + { 901, "GETDNS_RESPSTATUS_NO_NAME", GETDNS_RESPSTATUS_NO_NAME_TEXT }, + { 902, "GETDNS_RESPSTATUS_ALL_TIMEOUT", GETDNS_RESPSTATUS_ALL_TIMEOUT_TEXT }, + { 903, "GETDNS_RESPSTATUS_NO_SECURE_ANSWERS", GETDNS_RESPSTATUS_NO_SECURE_ANSWERS_TEXT }, + { 1000, "GETDNS_EXTENSION_TRUE", GETDNS_EXTENSION_TRUE_TEXT }, + { 1001, "GETDNS_EXTENSION_FALSE", GETDNS_EXTENSION_FALSE_TEXT }, + { 1100, "GETDNS_BAD_DNS_CNAME_IN_TARGET", GETDNS_BAD_DNS_CNAME_IN_TARGET_TEXT }, + { 1101, "GETDNS_BAD_DNS_ALL_NUMERIC_LABEL", GETDNS_BAD_DNS_ALL_NUMERIC_LABEL_TEXT }, + { 1102, "GETDNS_BAD_DNS_CNAME_RETURNED_FOR_OTHER_TYPE", GETDNS_BAD_DNS_CNAME_RETURNED_FOR_OTHER_TYPE_TEXT }, +}; + +static int const_info_cmp(const void *a, const void *b) +{ + return ((struct const_info *) a)->code - ((struct const_info *) b)->code; +} +struct const_info * +priv_getdns_get_const_info(int value) +{ + struct const_info key = { value, "", "" }; + struct const_info *i = bsearch(&key, consts_info, + sizeof(consts_info) / sizeof(struct const_info), + sizeof(struct const_info), const_info_cmp); + if (i) + return i; + return consts_info; +} + diff --git a/src/convert.c b/src/convert.c index 2429c151..adb97136 100644 --- a/src/convert.c +++ b/src/convert.c @@ -33,7 +33,6 @@ */ #include -#include #include #include #include @@ -41,6 +40,7 @@ #include #include #include +#include "getdns_error.h" /* stuff to make it compile pedantically */ #define UNUSED_PARAM(x) ((void)(x)) @@ -192,6 +192,7 @@ getdns_display_ip_address(const struct getdns_bindata return NULL; } +const char *getdns_get_errorstr_by_id(uint16_t err); getdns_return_t getdns_strerror(getdns_return_t err, char *buf, size_t buflen) { diff --git a/src/getdns_error.c b/src/getdns_error.c index 419ccf0e..82cd5edd 100644 --- a/src/getdns_error.c +++ b/src/getdns_error.c @@ -32,53 +32,11 @@ */ #include -#include - -getdns_lookup_table getdns_error_str[] = { - {GETDNS_RETURN_GOOD, "Good"} - , - {GETDNS_RETURN_GENERIC_ERROR, "Generic error"} - , - {GETDNS_RETURN_BAD_DOMAIN_NAME, "Badly-formed domain name in first argument"} - , - {GETDNS_RETURN_BAD_CONTEXT, "Bad value for a context type"} - , - {GETDNS_RETURN_CONTEXT_UPDATE_FAIL, "Did not update the context"} - , - {GETDNS_RETURN_UNKNOWN_TRANSACTION, - "An attempt was made to cancel a callback with a transaction_id that is not recognized"} - , - {GETDNS_RETURN_NO_SUCH_LIST_ITEM, - "A helper function for lists had an index argument that was too high."} - , - {GETDNS_RETURN_NO_SUCH_DICT_NAME, - "A helper function for dicts had a name argument that for a name that is not in the dict."} - , - {GETDNS_RETURN_WRONG_TYPE_REQUESTED, - "A helper function was supposed to return a certain type for an item, but the wrong type was given."} - , - {GETDNS_RETURN_NO_SUCH_EXTENSION, - "A name in the extensions dict is not a valid extension."} - , - {GETDNS_RETURN_EXTENSION_MISFORMAT, - "One or more of the extensions is has a bad format."} - , - {GETDNS_RETURN_DNSSEC_WITH_STUB_DISALLOWED, - "A query was made with a context that is using stub resolution and a DNSSEC extension specified."} - , - {GETDNS_RETURN_MEMORY_ERROR, - "Unable to allocate the memory required."} - , - {GETDNS_RETURN_INVALID_PARAMETER, - GETDNS_RETURN_INVALID_PARAMETER_TEXT } - , - {0, ""} -}; +#include "const-info.h" /*---------------------------------------- getdns_get_errorstr_by_id() */ /** * return error string from getdns return - * heavily modeled on ldns ldns_get_errorstr_by_id * @param err getdns_return_t * @return string containing error message */ @@ -86,15 +44,7 @@ getdns_lookup_table getdns_error_str[] = { const char * getdns_get_errorstr_by_id(uint16_t err) { - getdns_lookup_table *lt; - - lt = getdns_error_str; - while (lt->name != 0) { - if (lt->id == err) - return lt->name; - lt++; - } - return 0; + return priv_getdns_get_const_info(err)->text; } /* getdns_error.c */ diff --git a/src/getdns_error.h b/src/getdns_error.h new file mode 100644 index 00000000..95fc913a --- /dev/null +++ b/src/getdns_error.h @@ -0,0 +1,19 @@ +/** + * \file + * @brief defines and data structure for getdns_error_str_by_id() + * + * This source was taken from the original pseudo-implementation by + * Paul Hoffman. + */ + +#ifndef GETDNS_ERROR_H +#define GETDNS_ERROR_H + +#include + +const char *getdns_get_errorstr_by_id(uint16_t err); + +/** @} + */ + +#endif /* GETDNS_ERROR_H */