You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
2.2 KiB
48 lines
2.2 KiB
/* |
|
* chat_proto.h — протокол распространения сообщений чата (gossip + catch-up) |
|
* |
|
* Все пакеты идут через MsgClient::sendTo() / received() поверх msg_transport. |
|
* Подписи — внутри пейлоада. utun — чистый транспорт. |
|
*/ |
|
|
|
#ifndef CHAT_PROPAGATE_PROTO_H |
|
#define CHAT_PROPAGATE_PROTO_H |
|
|
|
#include <cstdint> |
|
|
|
namespace ChatProp { |
|
|
|
static constexpr uint8_t kNewMsg = 0x01; /* новое сообщение */ |
|
static constexpr uint8_t kNewAck = 0x02; /* подтверждение получения */ |
|
static constexpr uint8_t kBucketsReq = 0x03; /* запрос bucket-ов канала */ |
|
static constexpr uint8_t kBucketsRsp = 0x04; /* bucket-ы: день+час → count+hash */ |
|
static constexpr uint8_t kHashesReq = 0x05; /* запрос подписей в bucket */ |
|
static constexpr uint8_t kHashesRsp = 0x06; /* список подписей (64 байта каждая) */ |
|
static constexpr uint8_t kMsgsReq = 0x07; /* запрос сообщений по подписям */ |
|
static constexpr uint8_t kMsgsRsp = 0x08; /* сообщения + подписи */ |
|
|
|
static constexpr size_t kSignSize = 64; |
|
static constexpr size_t kHashSize = 32; /* SHA-256 */ |
|
static constexpr int kDefaultFanout = 4; |
|
static constexpr int kDefaultAckTimeoutMs = 1000; |
|
|
|
/* Форматы пакетов (byte stream) ================================================ |
|
|
|
NEW_MSG: [0x01][channel_id_len:1][channel_id][timestamp:8][content_len:2][content][sig:64] |
|
NEW_ACK: [0x02][sig_of_confirmed_msg:64] |
|
|
|
BUCKETS_REQ: [0x03][channel_id_len:1][channel_id] |
|
BUCKETS_RSP: [0x04][channel_id_len:1][channel_id][bucket_count:2][buckets...] |
|
bucket = [day_unix:4][hour:1][msg_count:4][sig_hash:32] |
|
|
|
HASHES_REQ: [0x05][channel_id_len:1][channel_id][day_unix:4][hour:1] |
|
HASHES_RSP: [0x06][sig_count:2][sig:64, sig:64, ...] |
|
|
|
MSGS_REQ: [0x07][sig_count:2][sig:64, sig:64, ...] |
|
MSGS_RSP: [0x08][channel_id_len:1][channel_id][msg_count:2][(sig:64, author:8, timestamp:8, content_len:2, content)...] |
|
|
|
=============================================================================== */ |
|
|
|
} // namespace ChatProp |
|
|
|
#endif
|
|
|