# TODO list

## Core library issues

 * socket: decouple event processing from query
 * query: allow multiple reverse names

## Features

 * Improve path ordering
    - use rules from http://tools.ietf.org/html/rfc6724
    - use /etc/gai.conf
 * Allow backend list setting at any time or at least check whether they can be changed
 * Read a configuration file in `/etc/netresolve` in addition to environment variables
 * Consider using -fvisibility=hidden
 * Consider using a separate libnetresolve-backend.so

## Frontends, integration and testing

 * Extend the libc API frontend
    - `getaddrinfo_a()`, `gai_suspend()`, `gai_error()` and `gai_cancel()` (glibc specific)
 * Implement more frontends
    - the getdns API frontend
 * Integrate with more event loops/connectors
    - libverto
    - Python PEP 3156
    - libsystemd
    - and more...
 * Build a fake ares/libunbound library to support DNS testing
 * A comprehensive dualstack test plan
    - DNS: AAAA wildcard search available, only global A record set
    - DNS: AAAA record not answered, A answered (and vice versa)
    - DNS: SRV not answered, A/AAAA answered
    - TCP: IPv6/SYN not answered, IPv4 SYN answered (and vice versa)
    - TCP: first IPv6/SYN not answered, second IPv6/SYN answered (the same for IPv4)
    - TCP: IPv6-only destination, first address not answered, next address works
    - TCP: first SYN answered, application layer failure, next address works
    - UDP: application layer failure, next address works

## Backends

 * Improve `nss` backend
    - support `/etc/nsswitch` configuration
    - consider supporting hostent listing
 * Improve the DNS backends
    - consider domain search support
    - consider `ai_addrconfig`-like functionality
 * Fix `exec` backend
    - it hasn't been tested recently
    - fix the code, extend the format
    - add automated tests
 * Implement more backends
    - nonblocking systemd-resolved based backend (blocking mode available via nss-resolve)
    - standalone nonblocking LLMNR backend
    - the getdns API backend

## Portability

 * Support non-timerfd platforms
    - pass timeout creation and removal request to the application/connector

## Documentation and non-development stuff

 * Website
 * Manpages
 * Provide fixes for glibc resolver
 * IETF notes, errata and drafts
