Module: RubyHome::HAP::TLV
- Defined in:
- lib/ruby_home/hap/tlv.rb
Defined Under Namespace
Classes: Bytes, Payload, TLV, UTF8String
Constant Summary
collapse
- ERROR_TYPES =
{
unknown: 1,
authentication: 2,
backoff: 3,
max_peers: 4,
max_tries: 5,
unavailable: 6,
busy: 7,
}.freeze
- TYPE_ERRORS =
ERROR_TYPES.invert.freeze
- NAME_TYPES =
{
method: 0,
identifier: 1,
salt: 2,
public_key: 3,
proof: 4,
encrypted_data: 5,
state: 6,
error: 7,
retry_delay: 8,
certificate: 9,
signature: 10,
permissions: 11,
fragment_data: 12,
fragment_last: 13,
}.freeze
- TYPE_NAMES =
NAME_TYPES.invert.freeze
- READER =
BinData::Array.new(type: :tlv, read_until: :eof)
Class Method Summary
collapse
Class Method Details
.encode(hash) ⇒ Object
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/ruby_home/hap/tlv.rb', line 83
def self.encode(hash)
hash.to_hash.each_with_object(String.new) do |(key, value), memo|
type_id = NAME_TYPES[key]
next unless type_id
if value.is_a?(String)
value.scan(/.{1,255}/m)
else
[value]
end.each do |frame_value|
tlv = TLV.new(type_id: type_id, val: frame_value).tap do |tlv|
tlv.len = tlv.val.to_binary_s.length
end
memo << tlv.to_binary_s
end
end
end
|
.read(input) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/ruby_home/hap/tlv.rb', line 68
def self.read(input)
READER.clear
READER.read(input)
READER.snapshot.each_with_object({}) do |(hash), memo|
type = TYPE_NAMES[hash[:type_id]]
next unless type
if memo[type]
memo[type] << hash[:val]
else
memo[type] = hash[:val]
end
end
end
|