summaryrefslogtreecommitdiffstats
path: root/solec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'solec.lua')
-rw-r--r--solec.lua155
1 files changed, 113 insertions, 42 deletions
diff --git a/solec.lua b/solec.lua
index f48831b..e4c8514 100644
--- a/solec.lua
+++ b/solec.lua
@@ -13,15 +13,6 @@ local Solec_payload_type = ProtoField.new('payload_type', 'Solec.payload_type',
table.insert(proto.fields, Solec_payload_type)
local Solec_payload_length = ProtoField.new('payload_length', 'Solec.payload_length', ftypes.UINT32)
table.insert(proto.fields, Solec_payload_length)
-local Solec_String_len_payload = ProtoField.new('len_payload', 'Solec.String.len_payload', ftypes.UINT32)
-table.insert(proto.fields, Solec_String_len_payload)
-local str_decode = require("string_decode")
-local Solec_String_payload = ProtoField.new('payload', 'Solec.String.payload', ftypes.STRINGZ)
-table.insert(proto.fields, Solec_String_payload)
-local Solec_Binary_len_payload = ProtoField.new('len_payload', 'Solec.Binary.len_payload', ftypes.UINT32)
-table.insert(proto.fields, Solec_Binary_len_payload)
-local Solec_Binary_payload = ProtoField.new('payload', 'Solec.Binary.payload', ftypes.BYTES)
-table.insert(proto.fields, Solec_Binary_payload)
local Solec_Test_num1 = ProtoField.new('num1', 'Solec.Test.num1', ftypes.UINT8)
table.insert(proto.fields, Solec_Test_num1)
local Solec_Test_time1 = ProtoField.new('time1', 'Solec.Test.time1', ftypes.UINT32)
@@ -32,6 +23,21 @@ local Solec_Test_num3 = ProtoField.new('num3', 'Solec.Test.num3', ftypes.UINT32)
table.insert(proto.fields, Solec_Test_num3)
local Solec_Test_num4 = ProtoField.new('num4', 'Solec.Test.num4', ftypes.UINT32)
table.insert(proto.fields, Solec_Test_num4)
+local Solec_Binary_len_payload = ProtoField.new('len_payload', 'Solec.Binary.len_payload', ftypes.UINT32)
+table.insert(proto.fields, Solec_Binary_len_payload)
+local Solec_Binary_payload = ProtoField.new('payload', 'Solec.Binary.payload', ftypes.BYTES)
+table.insert(proto.fields, Solec_Binary_payload)
+local Solec_String_len_payload = ProtoField.new('len_payload', 'Solec.String.len_payload', ftypes.UINT32)
+table.insert(proto.fields, Solec_String_len_payload)
+local str_decode = require("string_decode")
+local Solec_String_payload = ProtoField.new('payload', 'Solec.String.payload', ftypes.STRINGZ)
+table.insert(proto.fields, Solec_String_payload)
+local Solec_Handshake_proto_ver_major = ProtoField.new('proto_ver_major', 'Solec.Handshake.proto_ver_major', ftypes.UINT8)
+table.insert(proto.fields, Solec_Handshake_proto_ver_major)
+local Solec_Handshake_proto_ver_minor = ProtoField.new('proto_ver_minor', 'Solec.Handshake.proto_ver_minor', ftypes.UINT8)
+table.insert(proto.fields, Solec_Handshake_proto_ver_minor)
+local Solec_Pong_timestamp = ProtoField.new('timestamp', 'Solec.Pong.timestamp', ftypes.UINT32)
+table.insert(proto.fields, Solec_Pong_timestamp)
function proto.dissector(tvb, pinfo, root)
pinfo.cols.protocol = 'Solec'
@@ -67,7 +73,19 @@ function Solec:_read()
self._tree:add(Solec_payload_length, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload_length)
local _offset = self._io:pos()
local _on = self.payload_type
- if _on == Solec.Type.test then
+ if _on == Solec.Type.handshake then
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
+ self.payload = Solec.Handshake(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ elseif _on == Solec.Type.ping then
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
+ self.payload = Solec.Ping(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ elseif _on == Solec.Type.pong then
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
+ self.payload = Solec.Pong(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ elseif _on == Solec.Type.test then
local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
self.payload = Solec.Test(self._io, _tree, self, self._root)
_tree:set_len(self._io:pos() - _offset)
@@ -75,9 +93,11 @@ function Solec:_read()
end
-Solec.String = class.class(KaitaiStruct)
+--
+-- Test payload, used for parsers testing.
+Solec.Test = class.class(KaitaiStruct)
-function Solec.String:_init(io, tree, parent, root)
+function Solec.Test:_init(io, tree, parent, root)
KaitaiStruct._init(self, io)
self._parent = parent
self._root = root or self
@@ -85,13 +105,34 @@ function Solec.String:_init(io, tree, parent, root)
self:_read()
end
-function Solec.String:_read()
+function Solec.Test:_read()
local _offset = self._io:pos()
- self.len_payload = self._io:read_u2be()
- self._tree:add(Solec_String_len_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.len_payload)
+ self.num1 = self._io:read_u1()
+ self._tree:add(Solec_Test_num1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num1)
local _offset = self._io:pos()
- self.payload = str_decode.decode(self._io:read_bytes(self.len_payload), "UTF-8")
- self._tree:add(Solec_String_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload)
+ self.time1 = self._io:read_u8be()
+ self._tree:add(Solec_Test_time1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.time1)
+ local _offset = self._io:pos()
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str1')
+ self.str1 = Solec.String(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ local _offset = self._io:pos()
+ self.num2 = self._io:read_u2be()
+ self._tree:add(Solec_Test_num2, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num2)
+ local _offset = self._io:pos()
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'bin1')
+ self.bin1 = Solec.Binary(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ local _offset = self._io:pos()
+ self.num3 = self._io:read_u4be()
+ self._tree:add(Solec_Test_num3, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num3)
+ local _offset = self._io:pos()
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str2')
+ self.str2 = Solec.String(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ local _offset = self._io:pos()
+ self.num4 = self._io:read_u8be()
+ self._tree:add(Solec_Test_num4, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num4)
end
@@ -115,9 +156,9 @@ function Solec.Binary:_read()
end
-Solec.Test = class.class(KaitaiStruct)
+Solec.String = class.class(KaitaiStruct)
-function Solec.Test:_init(io, tree, parent, root)
+function Solec.String:_init(io, tree, parent, root)
KaitaiStruct._init(self, io)
self._parent = parent
self._root = root or self
@@ -125,34 +166,64 @@ function Solec.Test:_init(io, tree, parent, root)
self:_read()
end
-function Solec.Test:_read()
- local _offset = self._io:pos()
- self.num1 = self._io:read_u1()
- self._tree:add(Solec_Test_num1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num1)
- local _offset = self._io:pos()
- self.time1 = self._io:read_u8be()
- self._tree:add(Solec_Test_time1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.time1)
- local _offset = self._io:pos()
- local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str1')
- self.str1 = Solec.String(self._io, _tree, self, self._root)
- _tree:set_len(self._io:pos() - _offset)
+function Solec.String:_read()
local _offset = self._io:pos()
- self.num2 = self._io:read_u2be()
- self._tree:add(Solec_Test_num2, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num2)
+ self.len_payload = self._io:read_u2be()
+ self._tree:add(Solec_String_len_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.len_payload)
local _offset = self._io:pos()
- local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'bin1')
- self.bin1 = Solec.Binary(self._io, _tree, self, self._root)
- _tree:set_len(self._io:pos() - _offset)
+ self.payload = str_decode.decode(self._io:read_bytes(self.len_payload), "UTF-8")
+ self._tree:add(Solec_String_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload)
+end
+
+
+Solec.Ping = class.class(KaitaiStruct)
+
+function Solec.Ping:_init(io, tree, parent, root)
+ KaitaiStruct._init(self, io)
+ self._parent = parent
+ self._root = root or self
+ self._tree = tree
+ self:_read()
+end
+
+function Solec.Ping:_read()
+end
+
+
+Solec.Handshake = class.class(KaitaiStruct)
+
+function Solec.Handshake:_init(io, tree, parent, root)
+ KaitaiStruct._init(self, io)
+ self._parent = parent
+ self._root = root or self
+ self._tree = tree
+ self:_read()
+end
+
+function Solec.Handshake:_read()
local _offset = self._io:pos()
- self.num3 = self._io:read_u4be()
- self._tree:add(Solec_Test_num3, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num3)
+ self.proto_ver_major = self._io:read_u1()
+ self._tree:add(Solec_Handshake_proto_ver_major, self._io._io.tvb(_offset, self._io:pos() - _offset), self.proto_ver_major)
local _offset = self._io:pos()
- local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str2')
- self.str2 = Solec.String(self._io, _tree, self, self._root)
- _tree:set_len(self._io:pos() - _offset)
+ self.proto_ver_minor = self._io:read_u1()
+ self._tree:add(Solec_Handshake_proto_ver_minor, self._io._io.tvb(_offset, self._io:pos() - _offset), self.proto_ver_minor)
+end
+
+
+Solec.Pong = class.class(KaitaiStruct)
+
+function Solec.Pong:_init(io, tree, parent, root)
+ KaitaiStruct._init(self, io)
+ self._parent = parent
+ self._root = root or self
+ self._tree = tree
+ self:_read()
+end
+
+function Solec.Pong:_read()
local _offset = self._io:pos()
- self.num4 = self._io:read_u8be()
- self._tree:add(Solec_Test_num4, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num4)
+ self.timestamp = self._io:read_u8be()
+ self._tree:add(Solec_Pong_timestamp, self._io._io.tvb(_offset, self._io:pos() - _offset), self.timestamp)
end