meta: id: solec file-extension: hex endian: be doc: | SOLEC protocol uses big endian encoding. Frames uses type-length-value format. doc-ref: https://git.sr.ht/~rctt/solec/blob/main/solec.svg seq: - id: type_payload type: u1 enum: type - id: len_payload type: u2 - id: payload size: len_payload type: switch-on: type_payload cases: 'type::handshake': handshake 'type::ping': ping 'type::pong': pong 'type::message': message 'type::test': test enums: type: 0x01: handshake 0x02: ping 0x03: pong 0x04: message 0xFF: test types: string: doc: UTF-8 encoded string. seq: - id: len_payload type: u2 - id: payload type: str size: len_payload encoding: UTF-8 binary: doc: Binary data of unspecifed type. seq: - id: len_payload type: u2 - id: payload size: len_payload handshake: doc: | Handshake is sent by the client during connection initialization. If protocol_ver_major is different than version used by the server connection will be aborted. seq: - id: proto_ver_major type: u1 - id: proto_ver_minor type: u1 ping: doc: Ping does not contain any payload. pong: seq: - id: timestamp doc: | Timestamp is set just before sending the pong message. It can be used to meassure packet's travel time between server and client. type: u8 message: doc: | Source and target fields are addresses in user@server format. seq: - id: source type: string - id: target type: string - id: timestamp doc: Set just before sending the message. type: u8 - id: content type: string test: doc: Test payload, used for parsers testing seq: - id: num1 type: u1 - id: time1 type: u8 - id: str1 type: string - id: num2 type: u2 - id: bin1 type: binary - id: num3 type: u4 - id: str2 type: string - id: num4 type: u8