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_RESPONSE_LEN
raise Error, "data length is too short (data: #{data.inspect})"
end
data = data.dup
= data.slice!(0, ZABBIX_HEADER.length)
if != ZABBIX_HEADER
raise Error, "invalid header: #{.inspect} (data: #{data.inspect})"
end
version = data.slice!(0, ZABBIX_VERSION.length)
if version != ZABBIX_VERSION
raise Error, "unsupported version: #{version.inspect} (data: #{data.inspect})"
end
data_len = data.slice!(0, DATA_LEN_BYTES)
data_len = data_len.unpack("Q").first
if data_len != data.length
raise Error, "invalid data length: expected=#{data_len}, actual=#{data.length} (data: #{data.inspect})"
end
begin
MultiJson.load(data)
rescue MultiJson::ParseError
data
end
end
|