Add scoped authenticated carrier interface for chat joins

This commit is contained in:
evgeny committed 2026-10-30 23:32:47 +01:00
1 parent 44c796a72f
commit 8a0cc6f5e1
2 files changed
+27

No files matched your search

+26
View File
@@ -23,6 +23,32 @@ extern "C" {
struct UTUN_INSTANCE;
#define CHAT_JOIN_WIRE_MAX 2048 /* Полное сообщение CHAT_SYNC для ограниченного транспорта JOIN. */
/* Подтверждённая личность и путь конкретной попытки; handle=0 обозначает обычный ETCP. */
struct chat_join_route {
uint64_t peer, handle;
uint8_t public_key[32];
};
/* Заимствованный транспорт только JOIN, все вызовы в uasync, без синхронных событий.
* open закрепляет X25519 из ссылки: 0=принято и handle!=0, 1=пир недоступен, -1=ошибка.
* send копирует весь CHAT_SYNC frame: 0=принят, -1=отказ без передачи владения.
* close освобождает удержание JOIN после отправки принятых сообщений; физический GATT не закрывает.
* success разрешает повышение до ETCP только при независимой проверке known-key. */
struct chat_join_carrier {
void* ctx;
int (*open)(void* ctx, const uint8_t public_key[32], uint64_t* handle);
int (*send)(void* ctx, uint64_t handle, const uint8_t* data, size_t len);
void (*close)(void* ctx, uint64_t handle, int success);
};
/* Установить/снять provider; замена отменяет его попытки и waiters до освобождения ctx. 0/-1. */
int chat_sync_set_join_carrier(struct UTUN_INSTANCE* inst, const struct chat_join_carrier* carrier);
/* События provider после проверки личности и свежести сессии. Получение разрешает только JOIN-типы;
* data/public_key заимствованы до возврата. closed отменяет только указанный handle. */
void chat_sync_join_carrier_ready(struct UTUN_INSTANCE* inst, uint64_t handle, const uint8_t public_key[32]);
void chat_sync_join_carrier_receive(struct UTUN_INSTANCE* inst, uint64_t handle, const uint8_t public_key[32],
const uint8_t* data, size_t len);
void chat_sync_join_carrier_closed(struct UTUN_INSTANCE* inst, uint64_t handle);
/* etcp service IDs (direct P2P): ETCP_ID_CHAT_SYNC / ETCP_ID_MEMBER_SYNC
* (etcp_bind, см. etcp_api.h) */
+1
View File
@@ -243,6 +243,7 @@ struct UTUN_INSTANCE {
// Контексты чат-сервиса; освобождаются при chat_service_stop.
struct chat_core_ctx* chat_core; // каналы, сообщения и доступ к общей БД
const struct chat_local_provider* bluetooth_discovery; // заимствованный API BLE владельца GUI; снять до destroy instance
const struct chat_join_carrier* join_carrier; // заимствованный транспорт JOIN до допуска ETCP; снять до destroy provider
struct local_transport* local_transport; // отдельный открытый LAN UDP, принадлежит чат-сервису
struct chat_sync* chat_sync; // join и синхронизация каналов
struct join_key_entry* join_keys; // зарегистрированные ключи приглашений