Browse Source

Pass stable identities to insertion callbacks and bound signed bodies

master
evgeny 6 days ago
parent
commit
60b4870549
  1. 9
      src/chat/db_sync.c
  2. 4
      src/chat/db_sync.h

9
src/chat/db_sync.c

@ -531,6 +531,9 @@ static int db_verify_author_sig(struct DB_SYNC_INSTANCE* si,
const char* json, size_t jlen,
const uint8_t* sig)
{
if (!sig || jlen > DB_SYNC_MESSAGE_MAX || (jlen && !json)) {
DEBUG_ERROR(DEBUG_CATEGORY_CHAT_SYNC, "history: invalid signed body tbl=%s bytes=%zu", SI_TBL(si), jlen); return -1;
}
uint8_t pubkey[32];
if (db_get_ed25519_pubkey(si->db_sync, author_node_id, pubkey) != 0) {
DEBUG_WARN(DEBUG_CATEGORY_CHAT_SYNC,
@ -638,7 +641,11 @@ static int db_record_insert_cascade(struct DB_SYNC_INSTANCE* si,
int ret = db_record_insert(si, rid, rts, rauthor, rdata, rdlen, rsig, local_attrs);
if (ret != 0) return ret;
if (si->on_insert) si->on_insert(si, rts, rdata, rdlen, rauthor, initial_sync, si->on_insert_arg);
if (si->on_insert) {
uint8_t message_id[32];
if (chat_message_id(si->group_id, rts, rsig, message_id) < 0) return -1;
si->on_insert(si, message_id, rts, rdata, rdlen, rauthor, initial_sync, si->on_insert_arg);
}
uint8_t pbuf[4096]; uint32_t poff = 1; pbuf[0] = DB_MSG_PUSH;
memcpy(pbuf + poff, &rid, 8); poff += 8;

4
src/chat/db_sync.h

@ -30,6 +30,9 @@ struct DB_SYNC_INSTANCE;
#define DB_MSG_ERROR 0x08
#define DB_MSG_REQUEST_SYNC 0x09
/* PUSH имеет фиксированный буфер 4096 байт; 4000 оставляет место заголовку и подписи. */
#define DB_SYNC_MESSAGE_MAX 4000
// SEND_DATA want_from sentinel
#define DB_WANT_FROM_NONE 0xFFFFFFFF // no request for peer's data
@ -102,6 +105,7 @@ int db_sync_select(struct DB_SYNC_INSTANCE* si, uint32_t offset, uint32_t l
// initial_sync = 1 если запись пришла в рамках bulk-обмена SEND_DATA (initial/re-sync),
// 0 для live-PUSH и локальных вставок.
typedef void (*db_sync_insert_cb)(struct DB_SYNC_INSTANCE* si,
const uint8_t message_id[32],
uint64_t record_timestamp,
const char* json_data, size_t len,
uint64_t author_node_id, int initial_sync, void* arg);

Loading…
Cancel
Save