getdns is a [modern asynchronous DNS API](http://www.vpnc.org/getdns-api/) intended to make all types of DNS information easily available as described by Paul Hoffman. This implementation is licensed under the New BSD License (BSD-new).
The [getdns-api mailing list](http://www.vpnc.org/mailman/listinfo/getdns-api) is a good place to engage in discussions regarding the design of the API.
Release numbering follows the [Semantic Versioning](http://semver.org/) approach. We are currently in the early stages of building the API so the code should be considered incomplete.
The 0.1.0 release will be issued when the repository is opened to the public, our goal is to meet the following requirements prior to opening the repository:
* code compiles cleanly on at least the primary target platforms: RHEL/CentOS 6.3 Linux, FreeBSD 9.2
External dependencies are linked outside the getdns API build tree (we rely on configure to find them). We would like to keep the dependency tree short.
* [libunbound from NL](http://www.nlnetlabs.nl/projects/unbound/) svn revision 3012, configure must be run with the --with-libevent option (recommended to also use --with-libunbound-only).
The following API calls are documented in getDNS but *not supported* by the implementation at this time:
* Support for OPT Records in `getdns_general` and variants via the `extensions` parameter.
*`getdns_convert_dns_name_to_fqdn` and `getdns_convert_fqdn_to_dns_name`
* EDNS options
*`getdns_context_set_edns_do_bit`
*`getdns_context_set_edns_version`
*`getdns_context_set_edns_extended_rcode`
*`GETDNS_CONTEXT_TCP_ONLY_KEEP_CONNECTIONS_OPEN` with `getdns_context_set_dns_transport`
* DNS Search suffixes in stub mode
* DNSSEC
*`getdns_context_set_dnssec_trust_anchors`
*`getdns_validate_dnssec`
* Detecting changes to resolv.conf and hosts
Spec Differences
================
This implementation makes a few modifications to the spec by adding the following methods to the public API:
*`getdns_context_set_memory_functions` replaces `getdns_context_set_memory_allocator`, `getdns_context_set_memory_deallocator`, and `getdns_context_set_memory_reallocator`
*`getdns_list_create_with_context, `getdns_list_create_with_memory_functions`, `getdns_dict_create_with_context`, and `getdns_dict_create_with_memory_functions` to create lists and dictionaries with context or user supplied memory management functions.
The primary platforms targeted are Linux and FreeBSD, other platform are supported as we get time. The names listed here are intended to help ensure that we catch platform specific breakage, not to limit the work that folks are doing.
Where at all possible we need to make sure that both 32 and 64 bit implementations work.
The NLNet folks offered to build on a number of legacy platforms as well to help ensure that the code is clean. These include some big endian hardware and a few more obscure operating systems which will not be publicly supported but might work if someone wants to try them.