Method: DNSSD::TextRecord.decode

Defined in:
lib/dnssd/text_record.rb

.decode(text_record) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/dnssd/text_record.rb', line 7

def self.decode text_record
  record = {}

  tr = text_record.unpack 'C*'

  until tr.empty? do
    size  = tr.shift

    next if size.zero?

    raise ArgumentError, 'ran out of data in text record' if tr.length < size

    entry = tr.shift(size).pack('C*')

    raise ArgumentError, 'key not found' unless entry =~ /^[^=]/

    key, value = entry.split '=', 2

    next unless key

    record[key] = value
  end

  new record
end