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;