75 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| dns
 | |
| ===
 | |
| 
 | |
| This library is a DNS-over-HTTPS client for Common Lisp.
 | |
| 
 | |
| The ambition is to transform it into a fully-featured DNS resolver
 | |
| instead of piggy-backing on the HTTPS implementation, but ...
 | |
| baby-steps!
 | |
| 
 | |
| Note that there is no Common Lisp HTTP client that fully supports the
 | |
| HTTP2 protocol at the moment, so you can not expect this library to
 | |
| provide equivalent performance to a native DNS resolver (yet).
 | |
| 
 | |
| ## API
 | |
| 
 | |
| The API is kept as simple as it can be.
 | |
| 
 | |
| ### Types
 | |
| 
 | |
| The types of this library are implemented as several structs that
 | |
| support binary (de-)serialisation via [lisp-binary][].
 | |
| 
 | |
| The existing structs are as follows and directly implement the
 | |
| corresponding definitions from [RFC 1035][]:
 | |
| 
 | |
| * `dns-header`
 | |
| * `dns-question`
 | |
| * `dns-rr`
 | |
| * `dns-message`
 | |
| 
 | |
| All relevant field accessors for these structs are exported and can be
 | |
| used to inspect query results.
 | |
| 
 | |
| ### Functions
 | |
| 
 | |
| All lookup functions are of the type `(function (string &key doh-url)
 | |
| (dns-message))` and signal a `dns:doh-error` condition for
 | |
| unsuccessful requests.
 | |
| 
 | |
| If `:doh-url` is unspecified, Google's public DNS-over-HTTPS servers
 | |
| at [dns.google][https://dns.google] will be used.
 | |
| 
 | |
| Currently implemented lookup functions:
 | |
| 
 | |
| * `lookup-a`
 | |
| * `lookup-mx`
 | |
| * `lookup-txt`
 | |
| 
 | |
| ## Example usage
 | |
| 
 | |
| ```lisp
 | |
| DNS> (dns-message-answer (lookup-a "git.tazj.in."))
 | |
| #(#S(DNS-RR
 | |
|      :NAME #S(QNAME :START-AT 29 :NAMES #(12))
 | |
|      :TYPE A
 | |
|      :CLASS 1
 | |
|      :TTL 286
 | |
|      :RDLENGTH 4
 | |
|      :RDATA #(34 98 120 189)))
 | |
| ```
 | |
| 
 | |
| ## TODO
 | |
| 
 | |
| Various things in this library are currently broken because I only
 | |
| implemented it to work for my blog setup, but these things will be
 | |
| ironed out.
 | |
| 
 | |
| Most importantly, the following needs to be fixed:
 | |
| 
 | |
| * Each qname *fragment* needs to track its offset, not each qname.
 | |
| * The RDATA for a TXT record can have multiple counted strings.
 | |
| * qnames should be canonicalised after parsing.
 | |
| 
 | |
| [lisp-binary]: https://github.com/j3pic/lisp-binary
 | |
| [RFC 1035]: https://tools.ietf.org/html/rfc1035
 |