chat: права админа + member tags (verified/deleted) + ncd revive
- chat_admin: передача канальных privkey другому узлу (encrypted+signed, ETCP_RT_ID_ADMIN_KEY), событие ADMIN_KEY_RECEIVED - member_sync/bridge: tags verified/deleted, is_channel_owner, transfer_admin (android JNI + chatgui memberpropsdialog) - node_conn_direct: оживление timed_out entry — обновление линков в существующем conn (убрать старые, добавить новые) + немедленная очистка не поднявшегося conn без fin_wait — фикс invite/reconnect
This commit is contained in:
1 parent
6163f34ce1
commit
631a176944
21 files changed
+618
-163
No files matched your search
@@ -619,6 +619,39 @@ int topo_node_sqlite_channel_get_priv(sqlite3* db, const char* channel_id,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int topo_node_sqlite_channel_get_privs(sqlite3* db, const char* channel_id,
|
||||
uint8_t* x25519_priv_out, uint8_t* ed25519_priv_out) {
|
||||
if (!db || !channel_id || !x25519_priv_out || !ed25519_priv_out) return -1;
|
||||
sqlite3_stmt* stmt = NULL;
|
||||
if (sqlite3_prepare_v2(db,
|
||||
"SELECT x25519_privkey, ed25519_privkey FROM channels WHERE channel_id=?", -1, &stmt, NULL) != SQLITE_OK) return -1;
|
||||
sqlite3_bind_text(stmt, 1, channel_id, -1, SQLITE_STATIC);
|
||||
if (sqlite3_step(stmt) != SQLITE_ROW) { sqlite3_finalize(stmt); return -1; }
|
||||
const uint8_t* x = (const uint8_t*)sqlite3_column_blob(stmt, 0);
|
||||
const uint8_t* e = (const uint8_t*)sqlite3_column_blob(stmt, 1);
|
||||
if (!x || sqlite3_column_bytes(stmt, 0) < 32 || !e || sqlite3_column_bytes(stmt, 1) < 32) {
|
||||
sqlite3_finalize(stmt); return -1;
|
||||
}
|
||||
memcpy(x25519_priv_out, x, 32);
|
||||
memcpy(ed25519_priv_out, e, 32);
|
||||
sqlite3_finalize(stmt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int topo_node_sqlite_channel_set_privs(sqlite3* db, const char* channel_id,
|
||||
const uint8_t* x25519_priv, const uint8_t* ed25519_priv) {
|
||||
if (!db || !channel_id || !x25519_priv || !ed25519_priv) return -1;
|
||||
sqlite3_stmt* stmt = NULL;
|
||||
if (sqlite3_prepare_v2(db,
|
||||
"UPDATE channels SET x25519_privkey=?, ed25519_privkey=? WHERE channel_id=?", -1, &stmt, NULL) != SQLITE_OK) return -1;
|
||||
sqlite3_bind_blob(stmt, 1, x25519_priv, 32, SQLITE_STATIC);
|
||||
sqlite3_bind_blob(stmt, 2, ed25519_priv, 32, SQLITE_STATIC);
|
||||
sqlite3_bind_text(stmt, 3, channel_id, -1, SQLITE_STATIC);
|
||||
int rc = sqlite3_step(stmt) == SQLITE_DONE ? 0 : -1;
|
||||
sqlite3_finalize(stmt);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int topo_node_sqlite_channel_peers_all(sqlite3* db, const char* channel_id,
|
||||
uint8_t* buf, size_t buf_sz, size_t* out_len) {
|
||||
if (!db || !channel_id || !buf || !out_len) return -1;
|
||||
|
||||
Reference in new issue
Block a user