diff --git a/src/chat/chat_core.c b/src/chat/chat_core.c index dccdd45e..77aba1b9 100644 --- a/src/chat/chat_core.c +++ b/src/chat/chat_core.c @@ -310,7 +310,7 @@ int chat_core_get_channels_json(char* buf, size_t buf_size, size_t* out_len) { char peers_tbl[80]; peers_table_name(ch_id, peers_tbl, sizeof(peers_tbl)); int peer_count = 0, online_count = 0; sqlite3_stmt* ps = NULL; - char psql[200]; snprintf(psql, sizeof(psql), "SELECT node_id FROM \"%s\"", peers_tbl); + char psql[200]; snprintf(psql, sizeof(psql), "SELECT node_id FROM \"%s\" WHERE deleted=0", peers_tbl); if (sqlite3_prepare_v2(g_cc.db, psql, -1, &ps, NULL) == SQLITE_OK) { while (sqlite3_step(ps) == SQLITE_ROW) { uint64_t pid = (uint64_t)sqlite3_column_int64(ps, 0); diff --git a/src/chat/chat_msg.c b/src/chat/chat_msg.c index b656e171..f3cd7fa2 100644 --- a/src/chat/chat_msg.c +++ b/src/chat/chat_msg.c @@ -451,7 +451,7 @@ int chat_core_list_peers(const char* ch_id, uint8_t* buf, size_t buf_size, if (!g_cc.initialized || !buf || !out_len) return -1; char tbl[80]; peers_table_name(ch_id, tbl, sizeof(tbl)); char sql[128]; snprintf(sql, sizeof(sql), - "SELECT node_id FROM \"%s\"", tbl); + "SELECT node_id FROM \"%s\" WHERE deleted=0", tbl); sqlite3_stmt* stmt = NULL; if (sqlite3_prepare_v2(g_cc.db, sql, -1, &stmt, NULL) != SQLITE_OK) { uint16_t z = 0; memcpy(buf, &z, 2); *out_len = 2; return -1; diff --git a/src/chat/chat_sync.c b/src/chat/chat_sync.c index 9e38a502..1b42489b 100644 --- a/src/chat/chat_sync.c +++ b/src/chat/chat_sync.c @@ -1081,7 +1081,7 @@ static void cs_handle_channel_info_resp(struct chat_sync* cs, uint64_t peer, CS_ID, (unsigned long long)peer, (unsigned long long)inviter_update_ts); } sqlite3* vdb = cs->inst->topo_sqlite_db; - int rc = topo_node_sqlite_member_put(vdb, ch_id, peer, inviter_join_sig, inviter_join_ts, inviter_update_sig, inviter_update_ts, inv_x25519, inv_ed, inv_userinfo, inviter_join_sig, NULL, NULL, 0); + int rc = topo_node_sqlite_member_block_put(vdb, ch_id, peer, inviter_join_sig, inviter_join_ts, inviter_update_sig, inviter_update_ts, inv_x25519, inv_ed, inv_userinfo, inviter_join_sig); if (rc != 0) DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member_put(inviter) FAILED ch=%s peer=%016llx rc=%d", CS_ID, ch_id, (unsigned long long)peer, rc); char inv_name[128]; json_flat_get(inv_userinfo, "name", inv_name, sizeof(inv_name)); topo_node_sqlite_node_update_verified(vdb, peer, inv_name, inv_x25519, inv_ed, inviter_join_ts, ntp_time_get_seconds(cs->inst)); @@ -1153,7 +1153,7 @@ static void cs_handle_channel_join(struct chat_sync* cs, uint64_t peer, } sqlite3* db = cs->inst->topo_sqlite_db; - int rc = topo_node_sqlite_member_put(db, ch_id, node_id, join_sig, join_ts, NULL, 0, x25519, ed_pub, joiner_userinfo, NULL, NULL, NULL, 0); + int rc = topo_node_sqlite_member_block_put(db, ch_id, node_id, join_sig, join_ts, NULL, 0, x25519, ed_pub, joiner_userinfo, NULL); if (rc != 0) DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member_put(joiner) FAILED ch=%s node=0x%016llx rc=%d", CS_ID, ch_id, (unsigned long long)node_id, rc); { char j_name[128]; json_flat_get(joiner_userinfo, "name", j_name, sizeof(j_name)); topo_node_sqlite_node_update_verified(db, node_id, j_name, x25519, ed_pub, join_ts, ntp_time_get_seconds(cs->inst)); } @@ -1276,7 +1276,7 @@ static void cs_handle_welcome(struct chat_sync* cs, uint64_t peer, } } - int rc = topo_node_sqlite_member_put(db, ch_id, node_id, join_sig, join_ts, NULL, 0, x25519, ed_pub, peer_userinfo, NULL, NULL, NULL, 0); + int rc = topo_node_sqlite_member_block_put(db, ch_id, node_id, join_sig, join_ts, NULL, 0, x25519, ed_pub, peer_userinfo, NULL); if (rc != 0) DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member_put(welcome) FAILED ch=%s node=0x%016llx rc=%d", CS_ID, ch_id, (unsigned long long)node_id, rc); { char pn[256]; json_flat_get(peer_userinfo, "name", pn, sizeof(pn)); topo_node_sqlite_node_update_verified(db, node_id, pn, x25519, ed_pub, join_ts, ntp_time_get_seconds(cs->inst)); } @@ -1292,7 +1292,7 @@ static void cs_handle_welcome(struct chat_sync* cs, uint64_t peer, const uint8_t* my_x25 = cs->inst->my_keys.public_key; const uint8_t* my_ed = cs->inst->my_ed25519_pubkey; const char* my_name = cs->inst->name[0] ? cs->inst->name : ""; - int src = topo_node_sqlite_member_put(db, ch_id, myid, NULL, 0, NULL, 0, my_x25, my_ed, my_name, NULL, NULL, NULL, 0); + int src = topo_node_sqlite_member_block_put(db, ch_id, myid, NULL, 0, NULL, 0, my_x25, my_ed, my_name, NULL); if (src != 0) DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member_put(self) FAILED in WELCOME ch=%s rc=%d", CS_ID, ch_id, src); else @@ -1372,7 +1372,7 @@ static void cs_handle_peer_upsert(struct chat_sync* cs, uint64_t peer, sqlite3* db = cs->inst->topo_sqlite_db; - int rc = topo_node_sqlite_member_put(db, ch_id, node_id, join_sig, join_ts, NULL, 0, x25519, ed_pub, peer_userinfo, NULL, NULL, NULL, 0); + int rc = topo_node_sqlite_member_block_put(db, ch_id, node_id, join_sig, join_ts, NULL, 0, x25519, ed_pub, peer_userinfo, NULL); if (rc != 0) DEBUG_ERROR(DEBUG_CATEGORY_MEMBER_SYNC, "%s: member_put(peer_upsert) FAILED ch=%s node=0x%016llx rc=%d", CS_ID, ch_id, (unsigned long long)node_id, rc); { char pn2[128]; json_flat_get(peer_userinfo, "name", pn2, sizeof(pn2)); topo_node_sqlite_node_update_verified(db, node_id, pn2, x25519, ed_pub, join_ts, ntp_time_get_seconds(cs->inst)); } diff --git a/src/routing_layer/topo_node_sqlite.c b/src/routing_layer/topo_node_sqlite.c index 3875c264..7a5f6c0d 100644 --- a/src/routing_layer/topo_node_sqlite.c +++ b/src/routing_layer/topo_node_sqlite.c @@ -402,54 +402,6 @@ int topo_node_sqlite_channel_put(sqlite3* db, const char* channel_id, return rc == SQLITE_DONE ? 0 : -1; } -int topo_node_sqlite_member_put(sqlite3* db, const char* channel_id, uint64_t node_id, - const uint8_t* join_sig, uint64_t join_ts, - const uint8_t* update_sig, uint64_t update_ts, - const uint8_t* x25519_pubkey, const uint8_t* ed25519_pubkey, const char* userinfo, - const uint8_t* creator_sig, - const char* adm_tags, const uint8_t* adm_tags_sig, int storage) { - if (!db || !channel_id || !x25519_pubkey || !ed25519_pubkey) return -1; - char peers_tbl[80]; peers_table_name(channel_id, peers_tbl, sizeof(peers_tbl)); - char sql[256]; - snprintf(sql, sizeof(sql), - "INSERT OR REPLACE INTO \"%s\"(node_id, x25519_pubkey, ed25519_pubkey," - " join_sig, join_ts, update_sig, update_ts, userinfo, creator_sig)" - " VALUES(?,?,?,?,?,?,?,?,?)", peers_tbl); - sqlite3_stmt* stmt = NULL; - if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) return -1; - sqlite3_bind_int64(stmt, 1, (sqlite3_int64)node_id); - sqlite3_bind_blob(stmt, 2, x25519_pubkey, 32, SQLITE_STATIC); - sqlite3_bind_blob(stmt, 3, ed25519_pubkey, 32, SQLITE_STATIC); - if (join_sig) sqlite3_bind_blob(stmt, 4, join_sig, PEERS_JOIN_SIG_SIZE, SQLITE_STATIC); - else { static const unsigned char zsig[PEERS_JOIN_SIG_SIZE] = {0}; sqlite3_bind_blob(stmt, 4, zsig, PEERS_JOIN_SIG_SIZE, SQLITE_STATIC); } - sqlite3_bind_int64(stmt, 5, (sqlite3_int64)join_ts); - if (update_sig) sqlite3_bind_blob(stmt, 6, update_sig, PEERS_UPDATE_SIG_SIZE, SQLITE_STATIC); - else sqlite3_bind_null(stmt, 6); - sqlite3_bind_int64(stmt, 7, (sqlite3_int64)update_ts); - sqlite3_bind_text(stmt, 8, userinfo ? userinfo : "", -1, SQLITE_STATIC); - if (creator_sig) sqlite3_bind_blob(stmt, 9, creator_sig, PEERS_JOIN_SIG_SIZE, SQLITE_STATIC); - else sqlite3_bind_null(stmt, 9); - int rc = sqlite3_step(stmt); sqlite3_finalize(stmt); - if (rc != SQLITE_DONE) return -1; - - if (adm_tags || adm_tags_sig || storage > 0) { - snprintf(sql, sizeof(sql), - "UPDATE \"%s\" SET adm_tags=?, adm_tags_sig=?, storage=?, deleted=? WHERE node_id=?", peers_tbl); - sqlite3_stmt* u = NULL; - if (sqlite3_prepare_v2(db, sql, -1, &u, NULL) == SQLITE_OK) { - if (adm_tags && adm_tags[0]) sqlite3_bind_text(u, 1, adm_tags, -1, SQLITE_STATIC); - else sqlite3_bind_null(u, 1); - if (adm_tags_sig) sqlite3_bind_blob(u, 2, adm_tags_sig, 64, SQLITE_STATIC); - else sqlite3_bind_null(u, 2); - sqlite3_bind_int(u, 3, storage); - sqlite3_bind_int(u, 4, adm_tags_deleted(adm_tags)); - sqlite3_bind_int64(u, 5, (sqlite3_int64)node_id); - sqlite3_step(u); sqlite3_finalize(u); - } - } - return 0; -} - /* Упрощённый плейсхолдер мембера от topo_group: только node_id + pubkeys, source=1. * Не участвует в merkle-хеше. Если запись уже есть (полная merkle) — не трогает её. * Позже полная merkle-запись дополняет/перезаписывает блоки и сбрасывает source=0. */ diff --git a/src/routing_layer/topo_node_sqlite.h b/src/routing_layer/topo_node_sqlite.h index f2da6114..4f56c964 100644 --- a/src/routing_layer/topo_node_sqlite.h +++ b/src/routing_layer/topo_node_sqlite.h @@ -33,13 +33,6 @@ int topo_node_sqlite_channel_put(sqlite3* db, const char* channel_id, const uint8_t* ed25519_pub, const uint8_t* ed25519_priv, const uint8_t* signature); -int topo_node_sqlite_member_put(sqlite3* db, const char* channel_id, uint64_t node_id, - const uint8_t* join_sig, uint64_t join_ts, - const uint8_t* update_sig, uint64_t update_ts, - const uint8_t* x25519_pubkey, const uint8_t* ed25519_pubkey, const char* userinfo, - const uint8_t* creator_sig, - const char* adm_tags, const uint8_t* adm_tags_sig, int storage); - /* Упрощённый плейсхолдер мембера от topo_group (source=1, не участвует в merkle-хеше). */ int topo_node_sqlite_member_placeholder_put(sqlite3* db, const char* channel_id, uint64_t node_id, const uint8_t* x25519_pubkey, const uint8_t* ed25519_pubkey);