Class: Net::DNS::RR::Types

Inherits:
Object
  • Object
show all
Defined in:
lib/net/dns/rr/types.rb

Overview

This is an auxiliary class to handle RR type field in a DNS packet.

Constant Summary collapse

TYPES =
{
  'SIGZERO'   => 0,       # RFC2931 consider this a pseudo type
  'A'         => 1,       # RFC 1035, Section 3.4.1
  'NS'        => 2,       # RFC 1035, Section 3.3.11
  'MD'        => 3,       # RFC 1035, Section 3.3.4 (obsolete)
  'MF'        => 4,       # RFC 1035, Section 3.3.5 (obsolete)
  'CNAME'     => 5,       # RFC 1035, Section 3.3.1
  'SOA'       => 6,       # RFC 1035, Section 3.3.13
  'MB'        => 7,       # RFC 1035, Section 3.3.3
  'MG'        => 8,       # RFC 1035, Section 3.3.6
  'MR'        => 9,       # RFC 1035, Section 3.3.8
  'NULL'      => 10,      # RFC 1035, Section 3.3.10
  'WKS'       => 11,      # RFC 1035, Section 3.4.2 (deprecated)
  'PTR'       => 12,      # RFC 1035, Section 3.3.12
  'HINFO'     => 13,      # RFC 1035, Section 3.3.2
  'MINFO'     => 14,      # RFC 1035, Section 3.3.7
  'MX'        => 15,      # RFC 1035, Section 3.3.9
  'TXT'       => 16,      # RFC 1035, Section 3.3.14
  'RP'        => 17,      # RFC 1183, Section 2.2
  'AFSDB'     => 18,      # RFC 1183, Section 1
  'X25'       => 19,      # RFC 1183, Section 3.1
  'ISDN'      => 20,      # RFC 1183, Section 3.2
  'RT'        => 21,      # RFC 1183, Section 3.3
  'NSAP'      => 22,      # RFC 1706, Section 5
  'NSAP_PTR'  => 23,      # RFC 1348 (obsolete)
  # The following 2 RRs are impemented in Net::DNS::SEC, TODO
  'SIG'       => 24,      # RFC 2535, Section 4.1
  'KEY'       => 25,      # RFC 2535, Section 3.1
  'PX'        => 26,      # RFC 2163,
  'GPOS'      => 27,      # RFC 1712 (obsolete)
  'AAAA'      => 28,      # RFC 1886, Section 2.1
  'LOC'       => 29,      # RFC 1876
  # The following RR is implemented in Net::DNS::SEC, TODO
  'NXT'       => 30,      # RFC 2535, Section 5.2
  'EID'       => 31,      # draft-ietf-nimrod-dns-xx.txt
  'NIMLOC'    => 32,      # draft-ietf-nimrod-dns-xx.txt
  'SRV'       => 33,      # RFC 2052
  'ATMA'      => 34,      # ???
  'NAPTR'     => 35,      # RFC 2168
  'KX'        => 36,      # RFC 2230
  'CERT'      => 37,      # RFC 2538
  'DNAME'     => 39,      # RFC 2672
  'OPT'       => 41,      # RFC 2671
  # The following 4 RRs are implemented in Net::DNS::SEC TODO
  'DS'        => 43,      # draft-ietf-dnsext-delegation-signer
  'SSHFP'     => 44,      # draft-ietf-secsh-dns (No RFC # yet at time of coding)
  'RRSIG'     => 46,      # draft-ietf-dnsext-dnssec-2535typecode-change
  'NSEC'      => 47,      # draft-ietf-dnsext-dnssec-2535typecode-change
  'DNSKEY'    => 48,      # draft-ietf-dnsext-dnssec-2535typecode-change
  'UINFO'     => 100,     # non-standard
  'UID'       => 101,     # non-standard
  'GID'       => 102,     # non-standard
  'UNSPEC'    => 103,     # non-standard
  'TKEY'      => 249,     # RFC 2930
  'TSIG'      => 250,     # RFC 2931
  'IXFR'      => 251,     # RFC 1995
  'AXFR'      => 252,     # RFC 1035
  'MAILB'     => 253,     # RFC 1035 (MB, MG, MR)
  'MAILA'     => 254,     # RFC 1035 (obsolete - see MX)
  'ANY'       => 255,     # RFC 1035
}
@@default =

The default value when type is nil in Resource Records

TYPES["A"]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type) ⇒ Types

Creates a new object representing an RR type. Performs some checks on the argument validity too. Il type is nil, the default value is ANY or the one set with Types.default=



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/net/dns/rr/types.rb', line 121

def initialize(type)
  case type
  when String
    # type in the form "A" or "NS"
    new_from_string(type.upcase)
  when Fixnum
    # type in numeric form
    new_from_num(type)
  when nil
    # default type, control with Types.default=
    @str = TYPES.invert[@@default]
    @num = @@default
  else
    raise ArgumentError, "Wrong type class: #{type.class}"
  end
end

Class Method Details

.default=(str) ⇒ Object

Be able to control the default type to assign when type is nil. Default to A



76
77
78
79
80
81
82
# File 'lib/net/dns/rr/types.rb', line 76

def self.default=(str)
  if TYPES.has_key? str
    @@default = TYPES[str]
  else
    raise ArgumentError, "Unknown type #{str}"
  end
end

.regexpObject

Gives in output the keys from the Types hash in a format suited for regexps



113
114
115
116
# File 'lib/net/dns/rr/types.rb', line 113

def self.regexp
  # Longest ones go first, so the regex engine will match AAAA before A.
  TYPES.keys.sort { |a,b| b.length <=> a.length }.join("|")
end

.to_str(type) ⇒ Object

Returns the type in string format, as “A” or “NS”, given the numeric value



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/net/dns/rr/types.rb', line 98

def self.to_str(type)
  case type
    when Fixnum
      if TYPES.invert.has_key? type
        TYPES.invert[type]
      else
        raise ArgumentError, "Unknown type number #{type}"
      end
    else
      raise ArgumentError, "Wrong type class: #{type.class}"
  end
end

.valid?(type) ⇒ Boolean

Checks whether type is a valid RR type.

Returns:

  • (Boolean)


85
86
87
88
89
90
91
92
93
94
# File 'lib/net/dns/rr/types.rb', line 85

def self.valid?(type)
  case type
    when String
      TYPES.has_key?(type)
    when Fixnum
      TYPES.invert.has_key?(type)
    else
      raise ArgumentError, "Wrong type class: #{type.class}"
  end
end

Instance Method Details

#inspectObject

Returns the type in number format (default for normal use)



140
141
142
# File 'lib/net/dns/rr/types.rb', line 140

def inspect
  @num
end

#to_iObject

Returns the type in numeric format, usable by the pack methods for data transfers



152
153
154
# File 'lib/net/dns/rr/types.rb', line 152

def to_i
  @num.to_i
end

#to_sObject

Returns the type in string format, i.d. “A” or “NS” or such a string.



146
147
148
# File 'lib/net/dns/rr/types.rb', line 146

def to_s
  @str
end

#to_strObject



156
157
158
# File 'lib/net/dns/rr/types.rb', line 156

def to_str
  @num.to_s
end