From 10306f561348c9ca38bfddb34094dadae8be83d0 Mon Sep 17 00:00:00 2001 From: jeka Date: Mon, 17 Aug 2026 21:16:44 +0300 Subject: [PATCH] =?UTF-8?q?chat:=20fix=20CHANNEL=5FINVITE=20invalid=20ch?= =?UTF-8?q?=5Fsig=20=E2=80=94=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B2=D0=BB=D0=B0=D0=B4=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D1=86=D0=B0=20=D0=BA=D0=B0=D0=BD=D0=B0=D0=BB=D0=B0=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=91=D0=94,=20=D0=B0=20=D0=BD=D0=B5=20node=5Fid=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/chat_sync.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/chat/chat_sync.c b/src/chat/chat_sync.c index 0ebdbfd5..4eb88885 100644 --- a/src/chat/chat_sync.c +++ b/src/chat/chat_sync.c @@ -153,9 +153,10 @@ static void cs_handle_peer_upsert(struct chat_sync* cs, uint64_t peer, static void cs_handle_channel_invite(struct chat_sync* cs, uint64_t peer, const char* ch_id, const uint8_t* pl, size_t len); static int cs_send_channel_invite(struct chat_sync* cs, struct UTUN_INSTANCE* inst, - const char* ch_id, uint64_t target_node_id, const char* ch_name, - const uint8_t* ch_x25519, const uint8_t* ch_ed, const uint8_t* ch_sig); - + const char* ch_id, uint64_t target_node_id, + const char* ch_name, uint64_t owner, + const uint8_t* ch_x25519, const uint8_t* ch_ed, + const uint8_t* ch_sig); /* ── Recv dispatcher ── */ static void chat_sync_recv_cb(struct ETCP_CONN* conn, struct ll_entry* entry) { @@ -487,10 +488,10 @@ static void cs_on_conn_up(struct ETCP_CONN* conn, int event, void* arg) { (void) /* we are the inviter — send CHANNEL_INVITE to the joiner */ char ch_id[64]; snprintf(ch_id, sizeof(ch_id), "%llu", (unsigned long long)g_cs->pending_invite_ch_id); - char ch_name[128]; uint8_t ch_x2[32], ch_ed2[32], ch_sig[64]; + char ch_name[128]; uint8_t ch_x2[32], ch_ed2[32], ch_sig[64]; uint64_t ch_owner; if (topo_node_sqlite_channel_get(g_cs->inst->topo_sqlite_db, - ch_id, ch_name, (int)sizeof(ch_name), NULL, ch_x2, ch_ed2, ch_sig) == 0) { - cs_send_channel_invite(g_cs, g_cs->inst, ch_id, peer, ch_name, ch_x2, ch_ed2, ch_sig); + ch_id, ch_name, (int)sizeof(ch_name), &ch_owner, ch_x2, ch_ed2, ch_sig) == 0) { + cs_send_channel_invite(g_cs, g_cs->inst, ch_id, peer, ch_name, ch_owner, ch_x2, ch_ed2, ch_sig); if (g_cs->invite_send_timer) { uasync_cancel_timeout(g_cs->inst->ua, g_cs->invite_send_timer); } g_cs->invite_send_timer = uasync_set_timeout(g_cs->inst->ua, CS_INVITE_SEND_TIMEOUT_MS * 10, g_cs, cs_invite_send_timeout_cb, "cs_invite_send"); @@ -1484,9 +1485,9 @@ static void cs_handle_channel_invite(struct chat_sync* cs, uint64_t peer, static int cs_send_channel_invite(struct chat_sync* cs, struct UTUN_INSTANCE* inst, const char* ch_id, uint64_t target_node_id, - const char* ch_name, const uint8_t* ch_x25519, - const uint8_t* ch_ed, const uint8_t* ch_sig) { - uint64_t owner = inst->node_id; + const char* ch_name, uint64_t owner, + const uint8_t* ch_x25519, const uint8_t* ch_ed, + const uint8_t* ch_sig) { uint8_t join_sig[64] = {0}; uint64_t join_ts = 0; { sqlite3* vdb = inst->topo_sqlite_db; topo_node_sqlite_member_get_join(vdb, ch_id, inst->node_id, join_sig, &join_ts); } @@ -1578,7 +1579,7 @@ void chat_sync_invite_to_channel(struct UTUN_INSTANCE* inst, const char* ch_id, } /* Already connected — send invite now, wait for joiner to respond */ - cs_send_channel_invite(g_cs, inst, ch_id, target_node_id, ch_name, ch_x25519, ch_ed, ch_sig); + cs_send_channel_invite(g_cs, inst, ch_id, target_node_id, ch_name, owner, ch_x25519, ch_ed, ch_sig); g_cs->pending_invite_ch_id = channel_id; g_cs->pending_invite_node_id = target_node_id; g_cs->pending_invite_is_inviter = 1; @@ -1616,10 +1617,10 @@ static void cs_invite_trampoline(void* arg) { /* Check if already connected */ struct ETCP_CONN* conn = cs_find_conn_for_node(inst, target_node_id); if (conn && conn->links_up && conn->initialized) { - char ch_name[128]; uint8_t ch_x2[32], ch_ed2[32], ch_sig[64]; + char ch_name[128]; uint8_t ch_x2[32], ch_ed2[32], ch_sig[64]; uint64_t ch_owner; if (topo_node_sqlite_channel_get(inst->topo_sqlite_db, - ch_id, ch_name, (int)sizeof(ch_name), NULL, ch_x2, ch_ed2, ch_sig) == 0) { - cs_send_channel_invite(g_cs, inst, ch_id, target_node_id, ch_name, ch_x2, ch_ed2, ch_sig); + ch_id, ch_name, (int)sizeof(ch_name), &ch_owner, ch_x2, ch_ed2, ch_sig) == 0) { + cs_send_channel_invite(g_cs, inst, ch_id, target_node_id, ch_name, ch_owner, ch_x2, ch_ed2, ch_sig); g_cs->pending_invite_ch_id = channel_id; g_cs->pending_invite_node_id = target_node_id; g_cs->pending_invite_is_inviter = 1;