Sha256: 18f1deb26a232a10b87f173a27fe1d4fc93b5a59af188ca3f276d2a323b1396c

Contents?: true

Size: 1.52 KB

Versions: 8

Compression:

Stored size: 1.52 KB

Contents

# This file is part of PacketGen
# See https://github.com/sdaubert/packetgen for more informations
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
# This program is published under MIT license.

# frozen_string_literal: true

module PacketGen
  module Header
    class DNS
      # Define a DNS Ressource Record Section
      # @author Sylvain Daubert
      class RRSection < Types::Array
        # @api private
        # @param [DNS] dns
        # @param [Types::Int] counter
        def initialize(dns, counter)
          super(counter: counter)
          @dns = dns
        end

        # Read RR section from a string
        # @param [String] str binary string
        # @return [RRSection] self
        def read(str)
          clear
          return self if str.nil?
          force_binary str
          while !str.empty? && (self.size < @counter.to_i)
            rr = RR.new(@dns).read(str)
            rr = OPT.new(@dns).read(str) if rr.type?('OPT')
            str.slice!(0, rr.sz)
            push rr
          end
          self
        end

        private

        def record_from_hash(hsh)
          if hsh.key? :rtype
            case hsh.delete(:rtype)
            when 'Question'
              Question.new(@dns, hsh)
            when 'OPT'
              OPT.new(@dns, hsh)
            when 'RR'
              RR.new(@dns, hsh)
            else
              raise TypeError, 'rtype should be a Question, OPT or RR'
            end
          else
            hsh
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
packetgen-2.8.7 lib/packetgen/header/dns/rrsection.rb
packetgen-2.8.6 lib/packetgen/header/dns/rrsection.rb
packetgen-2.8.5 lib/packetgen/header/dns/rrsection.rb
packetgen-2.8.4 lib/packetgen/header/dns/rrsection.rb
packetgen-2.8.3 lib/packetgen/header/dns/rrsection.rb
packetgen-2.8.1 lib/packetgen/header/dns/rrsection.rb
packetgen-2.8.0 lib/packetgen/header/dns/rrsection.rb
packetgen-2.7.0 lib/packetgen/header/dns/rrsection.rb