diff --git a/src/chat/chat_sync.h b/src/chat/chat_sync.h index 4e471e564..e5c9bca8b 100644 --- a/src/chat/chat_sync.h +++ b/src/chat/chat_sync.h @@ -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) */ diff --git a/src/utun_instance.h b/src/utun_instance.h index aee17a959..c18811b73 100644 --- a/src/utun_instance.h +++ b/src/utun_instance.h @@ -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; // зарегистрированные ключи приглашений