Parent

DNSSD::Record

Created when adding a DNS record using DNSSD::Service#add_record. Provides convenience methods for creating the DNS record.

See also RFC 1035

Constants

VALUE_TO_NAME

Maps record constant values to the constant name

Public Class Methods

string_to_character_string(string) click to toggle source

Turns string into an RFC-1035 character-string

    # File lib/dnssd/record.rb, line 24
24:   def self.string_to_character_string(string)
25:     length = string.length
26:     raise ArgumentError, "#{string.inspect} is too long (255 bytes max)" if
27:       length > 255
28:     "#{length.chr}#{string}"
29:   end
string_to_domain_name(string) click to toggle source

Turns string into an RFC-1035 domain-name

    # File lib/dnssd/record.rb, line 34
34:   def self.string_to_domain_name(string)
35:     string.split('.').map do |part|
36:       string_to_character_string part
37:     end.join('') << "\00""
38:   end
to_data(type, *args) click to toggle source

Encodes resource args into type. Handles:

A AAAA CNAME MX NS PTR SOA SRV TXT

    # File lib/dnssd/record.rb, line 45
45:   def self.to_data(type, *args)
46:     raise ArgumentError, "unknown type #{type}" unless VALUE_TO_NAME.key? type
47: 
48:     data = case type
49:            when A then
50:              addr = args.shift
51:              addr = IPAddr.new addr unless IPAddr === addr
52:              raise ArgumentError, "#{addr} is not IPv4" unless addr.ipv4?
53:              addr.hton
54:            when AAAA then
55:              addr = args.shift
56:              addr = IPAddr.new addr unless IPAddr === addr
57:              raise ArgumentError, "#{addr} is not IPv6" unless addr.ipv6?
58:              addr.hton
59:            when CNAME, NS, PTR then
60:              string_to_domain_name args.shift
61:            when MX then
62:              [args.shift, string_to_domain_name(args.shift)].pack 'na*'
63:            when SOA then
64:              [
65:                string_to_domain_name(args.shift),
66:                string_to_domain_name(args.shift),
67:                args.shift, args.shift, args.shift, args.shift, args.shift
68:              ].pack 'a*a*NNNNN'
69:            when SRV then
70:              [
71:                args.shift, args.shift, args.shift,
72:                string_to_domain_name(args.shift)
73:              ].pack 'nnna*'
74:            when TXT then
75:              data = args.map do |string|
76:                string_to_character_string string
77:              end.join ''
78: 
79:              raise ArgumentError,
80:                    "TXT record too long (#{data.length} bytes)" if
81:                data.length > 65535
82: 
83:              args.clear
84: 
85:              data
86:            else
87:              raise ArgumentError, "unhandled record type #{VALUE_TO_NAME[type]}"
88:            end
89: 
90:     raise ArgumentError, "Too many arguments for #{VALUE_TO_NAME[type]}" unless
91:       args.empty?
92: 
93:     data
94:   end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.