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

/*
* 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