# File lib/dnsruby/message/message.rb, line 541
    def encode(canonical=false)
      if @tsigkey && (@tsigstate == :Unsigned) && !@signing
        @signing = true
        sign!
        @signing = false
      end

      return MessageEncoder.new { |msg|
        header = @header
        header.encode(msg)
        @question.each { |q|
          msg.put_name(q.qname)
          msg.put_pack('nn', q.qtype.code, q.qclass.code)
        }
        [@answer, @authority, @additional].each { |rr|
          rr.each { |r|
            msg.put_rr(r, canonical)
          }
        }
      }.to_s
    end