anchor.diff:      (cons (dns-rr-ttl rr)
             (cons preference
                   (subseq name 0 (1- (length name)))))))
  -
  -(defmethod %decode-rr ((rr dns-rr) (type (eql :txt)) class)
  -  (declare (ignore class))
  -  (cons (dns-rr-ttl rr) (dns-rr-data rr)))
   
   (defun decode-rr (rr)
     (%decode-rr rr (dns-record-type rr) (dns-record-class rr)))
  
positive.code: 
  (defgeneric %decode-rr (rr type class))
  
  (defmethod %decode-rr ((rr dns-rr) (type (eql :cname)) class)
    (declare (ignore class))
    (let ((cname (dns-rr-data rr)))
  
negative.code: (defgeneric decode-flags (message)
    (:method ((msg dns-message))
      (let (flags)
        (push (if (eql (opcode-field msg) +opcode-standard+)
                  :op/s :op/u)
              flags)
        (when (authoritative-field msg) (push :auth flags))
        (when (truncated-field msg) (push :trunc flags))
        (when (recursion-desired-field msg) (push :rd flags))
        (when (recursion-available-field msg) (push :ra flags))
        (push (or (rcode-field msg) :rc/u) flags)
        (nreverse flags))))
  
  (defmethod initialize-instance :after ((msg dns-message) &key
                                         (qdcount 0) (ancount 0)
                                         (nscount 0) (arcount 0))
    (with-slots (id flags decoded-flags question answer authority additional) msg
      (setf decoded-flags (decode-flags msg)
            question      (make-array qdcount :adjustable t :fill-pointer 0)
            answer        (make-array ancount :adjustable t :fill-pointer 0)
            authority     (make-array nscount :adjustable t :fill-pointer 0)
            additional    (make-array arcount :adjustable t :fill-pointer 0))))
  
  (defmethod print-object ((msg dns-message) stream)
    (print-unreadable-object (msg stream :type nil :identity nil)
      (with-slots (id decoded-flags question qdcount ancount nscount arcount) msg
        (format stream "DNS ~A Id: ~A, Question: ~A Flags: ~S, Sections: QD(~A) AN(~A) NS(~A) AD(~A)"
                (if (response-field msg) :response :query)
                id question decoded-flags
                qdcount ancount nscount arcount))))
  
  (defclass dns-record ()
    ((name  :initarg :name  :accessor dns-record-name)
  