From 69703f3a808edd9b1e12f5e0c226abae2e79fa21 Mon Sep 17 00:00:00 2001 From: bt Date: Sun, 29 Mar 2026 08:51:30 +0200 Subject: [docs] Update README.md and protocol diagram --- README.md | 3 +- docs/protocol.svg | 492 +++++++++++++++++++++++++++++++++++++++++++++++ solec.ksy | 14 +- solec.lua | 34 +--- solec.svg | 534 ---------------------------------------------------- tools/build_spec.sh | 2 +- 6 files changed, 502 insertions(+), 577 deletions(-) create mode 100644 docs/protocol.svg delete mode 100644 solec.svg diff --git a/README.md b/README.md index 6c7bf81..d56c4fa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # solec -* [Protocol spec](https://git.rctt.net/solec/plain/PROTOCOL.md?h=main) +* [Protocol documentation](https://git.rctt.net/solec/plain/docs/rfc.txt?h=main) +* [Data format diagram](https://git.rctt.net/solec/plain/docs/protocol.svg?h=main) ## Running the daemon diff --git a/docs/protocol.svg b/docs/protocol.svg new file mode 100644 index 0000000..20a9119 --- /dev/null +++ b/docs/protocol.svg @@ -0,0 +1,492 @@ + + + + + + + + +cluster__solec + +Solec + + +cluster__auth + +Solec::Auth + + +cluster__error + +Solec::Error + + +cluster__handshake + +Solec::Handshake + + +cluster__message + +Solec::Message + + +cluster__string + +Solec::String + + +cluster__success + +Solec::Success + + +cluster__test + +Solec::Test + + + +solec__seq + + +pos + + +size + + +type + + +id + +0 + +1 + +u1→PayloadType + +type_payload + +1 + +2 + +u2be + +len_payload + +3 + +... + +switch (type_payload) + +payload + + + +solec__seq:type_payload_type->solec__seq:payload_type + + + + + +solec__seq_payload_switch + + +case + + +type + +:payload_type_auth + +Auth + +:payload_type_error + +Error + +:payload_type_handshake + +Handshake + +:payload_type_message + +Message + +:payload_type_success + +Success + +:payload_type_test + +Test + + + +solec__seq:payload_type->solec__seq_payload_switch + + + + + +auth__seq + + +pos + + +size + + +type + + +id + +0 + +... + +String + +name + +... + +... + +String + +pass + + + +solec__seq_payload_switch:case0->auth__seq + + + + + +error__seq + + +pos + + +size + + +type + + +id + +0 + +1 + +u1→ErrorType + +error_code + + + +solec__seq_payload_switch:case1->error__seq + + + + + +handshake__seq + + +pos + + +size + + +type + + +id + +0 + +1 + +u1 + +proto_ver_major + +1 + +1 + +u1 + +proto_ver_minor + + + +solec__seq_payload_switch:case2->handshake__seq + + + + + +message__seq + + +pos + + +size + + +type + + +id + +0 + +... + +String + +source + +... + +... + +String + +target + +... + +8 + +u8be + +timestamp + +... + +... + +String + +content + + + +solec__seq_payload_switch:case3->message__seq + + + + + +success__seq + + +pos + + +size + + +type + + +id + + + +solec__seq_payload_switch:case4->success__seq + + + + + +test__seq + + +pos + + +size + + +type + + +id + +0 + +1 + +u1 + +num1 + +1 + +8 + +u8be + +time1 + +9 + +... + +String + +str1 + +... + +2 + +u2be + +num2 + +... + +... + +String + +str2 + +... + +4 + +u4be + +num3 + +... + +... + +String + +str3 + +... + +8 + +u8be + +num4 + + + +solec__seq_payload_switch:case5->test__seq + + + + + +string__seq + + +pos + + +size + + +type + + +id + +0 + +2 + +u2be + +len_payload + +2 + +len_payload + +str(UTF-8) + +payload + + + +auth__seq:name_type->string__seq + + + + + +auth__seq:pass_type->string__seq + + + + + +message__seq:source_type->string__seq + + + + + +message__seq:target_type->string__seq + + + + + +message__seq:content_type->string__seq + + + + + +string__seq:len_payload_type->string__seq:payload_size + + + + + +test__seq:str1_type->string__seq + + + + + +test__seq:str2_type->string__seq + + + + + +test__seq:str3_type->string__seq + + + + + diff --git a/solec.ksy b/solec.ksy index dcfcc11..d89f18f 100644 --- a/solec.ksy +++ b/solec.ksy @@ -47,14 +47,6 @@ types: size: len_payload encoding: UTF-8 - binary: - doc: Binary data of unspecifed type. - seq: - - id: len_payload - type: u2 - - id: payload - size: len_payload - success: doc: Send from server if operation succeded. @@ -108,11 +100,11 @@ types: type: string - id: num2 type: u2 - - id: bin1 - type: binary + - id: str2 + type: string - id: num3 type: u4 - - id: str2 + - id: str3 type: string - id: num4 type: u8 diff --git a/solec.lua b/solec.lua index 85efaad..6dece06 100644 --- a/solec.lua +++ b/solec.lua @@ -23,10 +23,6 @@ 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") @@ -152,15 +148,15 @@ function Solec.Test:_read() 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) + 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.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) + local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str3') + self.str3 = 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() @@ -184,28 +180,6 @@ function Solec.Success:_read() end --- --- Binary data of unspecifed type. -Solec.Binary = class.class(KaitaiStruct) - -function Solec.Binary:_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.Binary:_read() - local _offset = self._io:pos() - self.len_payload = self._io:read_u2be() - self._tree:add(Solec_Binary_len_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.len_payload) - local _offset = self._io:pos() - self.payload = self._io:read_bytes(self.len_payload) - self._tree:add(Solec_Binary_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload) -end - - Solec.Auth = class.class(KaitaiStruct) function Solec.Auth:_init(io, tree, parent, root) diff --git a/solec.svg b/solec.svg deleted file mode 100644 index 40365b4..0000000 --- a/solec.svg +++ /dev/null @@ -1,534 +0,0 @@ - - - - - - - - -cluster__solec - -Solec - - -cluster__auth - -Solec::Auth - - -cluster__binary - -Solec::Binary - - -cluster__error - -Solec::Error - - -cluster__handshake - -Solec::Handshake - - -cluster__message - -Solec::Message - - -cluster__string - -Solec::String - - -cluster__success - -Solec::Success - - -cluster__test - -Solec::Test - - - -solec__seq - - -pos - - -size - - -type - - -id - -0 - -1 - -u1→PayloadType - -type_payload - -1 - -2 - -u2be - -len_payload - -3 - -... - -switch (type_payload) - -payload - - - -solec__seq:type_payload_type->solec__seq:payload_type - - - - - -solec__seq_payload_switch - - -case - - -type - -:payload_type_auth - -Auth - -:payload_type_error - -Error - -:payload_type_handshake - -Handshake - -:payload_type_message - -Message - -:payload_type_success - -Success - -:payload_type_test - -Test - - - -solec__seq:payload_type->solec__seq_payload_switch - - - - - -auth__seq - - -pos - - -size - - -type - - -id - -0 - -... - -String - -name - -... - -... - -String - -pass - - - -solec__seq_payload_switch:case0->auth__seq - - - - - -error__seq - - -pos - - -size - - -type - - -id - -0 - -1 - -u1→ErrorType - -error_code - - - -solec__seq_payload_switch:case1->error__seq - - - - - -handshake__seq - - -pos - - -size - - -type - - -id - -0 - -1 - -u1 - -proto_ver_major - -1 - -1 - -u1 - -proto_ver_minor - - - -solec__seq_payload_switch:case2->handshake__seq - - - - - -message__seq - - -pos - - -size - - -type - - -id - -0 - -... - -String - -source - -... - -... - -String - -target - -... - -8 - -u8be - -timestamp - -... - -... - -String - -content - - - -solec__seq_payload_switch:case3->message__seq - - - - - -success__seq - - -pos - - -size - - -type - - -id - - - -solec__seq_payload_switch:case4->success__seq - - - - - -test__seq - - -pos - - -size - - -type - - -id - -0 - -1 - -u1 - -num1 - -1 - -8 - -u8be - -time1 - -9 - -... - -String - -str1 - -... - -2 - -u2be - -num2 - -... - -... - -Binary - -bin1 - -... - -4 - -u4be - -num3 - -... - -... - -String - -str2 - -... - -8 - -u8be - -num4 - - - -solec__seq_payload_switch:case5->test__seq - - - - - -string__seq - - -pos - - -size - - -type - - -id - -0 - -2 - -u2be - -len_payload - -2 - -len_payload - -str(UTF-8) - -payload - - - -auth__seq:name_type->string__seq - - - - - -auth__seq:pass_type->string__seq - - - - - -binary__seq - - -pos - - -size - - -type - - -id - -0 - -2 - -u2be - -len_payload - -2 - -len_payload - - -payload - - - -binary__seq:len_payload_type->binary__seq:payload_size - - - - - -message__seq:source_type->string__seq - - - - - -message__seq:target_type->string__seq - - - - - -message__seq:content_type->string__seq - - - - - -string__seq:len_payload_type->string__seq:payload_size - - - - - -test__seq:bin1_type->binary__seq - - - - - -test__seq:str1_type->string__seq - - - - - -test__seq:str2_type->string__seq - - - - - diff --git a/tools/build_spec.sh b/tools/build_spec.sh index dfebbd2..f5272b4 100755 --- a/tools/build_spec.sh +++ b/tools/build_spec.sh @@ -7,7 +7,7 @@ else fi kaitai-struct-compiler -t graphviz solec.ksy -dot -Tsvg solec.dot > solec.svg +dot -Tsvg solec.dot > docs/protocol.svg rm solec.dot ~/bin/kaitai-struct-compiler-ws/bin/kaitai-struct-compiler -t wireshark --read-pos solec.ksy -- cgit v1.2.3