Switch to the MIT licence.
[iolib.git] / net.sockets / dns / common.lisp
blob8224127c5eef056ff4e9c51b283df866e8c7f45b
1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; indent-tabs-mode: nil -*-
2 ;;;
3 ;;; --- DNS client constants.
4 ;;;
6 (in-package :net.sockets)
8 (enable-reader-macro 'literal-hash-table)
10 (defconstant +dns-max-datagram-size+ 4096)
12 (defconstant +opcode-standard+ 0)
14 ;;; Query types
16 (define-constant +query-type-to-value-map+
17 #h:eq((:a . 1) (:ns . 2) (:cname . 5) (:soa . 6)
18 (:wks . 11) (:ptr . 12) (:hinfo . 13) (:mx . 15)
19 (:txt . 16) (:aaaa . 28) (:any . 255))
20 :test #'equalp)
22 (define-constant +query-value-to-type-map+
23 #h((1 . :a) (2 . :ns) (5 . :cname) (6 . :soa)
24 (11 . :wks) (12 . :ptr) (13 . :hinfo) (15 . :mx)
25 (16 . :txt) (28 . :aaaa) (255 . :any))
26 :test #'equalp)
28 (defun query-type-number (id)
29 (gethash id +query-type-to-value-map+))
31 (defun query-type-id (number)
32 (gethash number +query-value-to-type-map+))
34 (defun dns-record-type-p (id)
35 (query-type-number id))
37 ;;; Query classes
39 (define-constant +query-class-to-value-map+
40 #h:eq((:in . 1) (:any . 255))
41 :test #'equalp)
43 (define-constant +query-value-to-class-map+
44 #h((1 . :in) (255 . :any))
45 :test #'equalp)
47 (defun query-class-number (id)
48 (gethash id +query-class-to-value-map+))
50 (defun query-class-id (number)
51 (gethash number +query-value-to-class-map+))
53 ;;; Error codes
55 (define-constant +rcode-to-value-map+
56 #h:eq((:no-error . 0) (:format-error . 1)
57 (:server-failure . 2) (:name-error . 3)
58 (:not-implemented . 4) (:refused . 5))
59 :test #'equalp)
61 (define-constant +value-to-rcode-map+
62 #h((0 . :no-error) (1 . :format-error)
63 (2 . :server-failure) (3 . :name-error)
64 (4 . :not-implemented) (5 . :refused))
65 :test #'equalp)
67 (defun rcode-number (id)
68 (gethash id +rcode-to-value-map+))
70 (defun rcode-id (number)
71 (gethash number +value-to-rcode-map+))
73 (disable-reader-macro 'literal-hash-table)