Object
Created when adding a DNS record using DNSSD::Service#add_record. Provides convenience methods for creating the DNS record.
See also RFC 1035
Maps record constant values to the constant name
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
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
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.
Generated with the Darkfish Rdoc Generator 1.1.6.