30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/zabbix_protocol.rb', line 30
def self.load(data)
unless data.is_a?(String)
raise TypeError, "wrong argument type #{data.class} (expected String)"
end
if data.length < MIN_DATA_LEN
raise Error, "data length is too short (data: #{data.inspect})"
end
sliced = data.dup
= sliced.slice!(0, .length)
if !=
raise Error, "invalid header: #{header.inspect} (data: #{data.inspect})"
end
version = sliced.slice!(0, ZABBIX_VERSION.length)
if version != ZABBIX_VERSION
raise Error, "unsupported version: #{version.inspect} (data: #{data.inspect})"
end
payload_len = sliced.slice!(0, PAYLOAD_LEN_BYTES)
payload_len = payload_len.unpack("Q").first
if payload_len != sliced.length
raise Error, "invalid payload length: expected=#{payload_len}, actual=#{sliced.length} (data: #{data.inspect})"
end
begin
MultiJson.load(sliced)
rescue MultiJson::ParseError
data
end
end
|