stcp: ed25519 pubkey exchange in handshake, fix instance destroy segfault, fix chat_tcp_test

- u_async.c: process immediate_queue BEFORE epoll_wait in uasync_poll
- stcp_link.c: defensive NULL etcp_conn/etcp_link in stcp_link_close
- utun_instance.c: move stcp_server_list_destroy_all to Phase J (before ETCP),
  add deferred drain in both Phase J and L
- stcp.h/c: STCP_HS_ENC_CLIENT 6→38, STCP_HS_ENC_SERVER 7→39,
  exchange ed25519_pubkey in both handshake directions
- etcp_connections.c: copy peer_ed25519 from STCP to ETCP_CONN in
  etcp_link_enter_ready_tcp; guard link->etcp in tcp_link_close_cb
- chat_sync.c: fix lk->conn NULL dereference for TCP links
- test_stcp.c: update stcp_server_create/stcp_client_connect callsites
- tools/chat_tcp_test: change transport udp→tcp
This commit is contained in:
evgeny committed 2026-08-07 00:48:27 +03:00
1 parent a3783b5f55
commit 38c9f229bc
1272 files changed
+968388 -1

No files matched your search

+29
View File
@@ -0,0 +1,29 @@
# proxy (тестовый инструмент)
## 1. Назначение
UDP прокси с симуляцией сетевых условий — вносит потери пакетов и задержки для тестирования поведения ETCP в нестабильной сети.
## 2. Как пользоваться
```
udp_proxy --listen [IP:]PORT --target IP:PORT [опции]
```
| Опция | Значение |
|---|---|
| `--listen [IP:]PORT` | Адрес прослушивания (IP опционально, по умолчанию 0.0.0.0) |
| `--target IP:PORT` | Куда пробрасывать трафик |
| `--loss-forward N` | Потери в прямом направлении, % (0–100, по умолчанию 0) |
| `--loss-back N` | Потери в обратном направлении, % |
| `--delay-forward A:B` | Задержка в прямом направлении, диапазон ms |
| `--delay-back A:B` | Задержка в обратном направлении, диапазон ms |
| `--help` | Справка |
Типовой сценарий: `udp_proxy --listen 0.0.0.0:12345 --target 8.8.8.8:53 --loss-forward 5 --delay-forward 10:50` — вставка между клиентом и сервером, наблюдение реакции ETCP на потери/задержки.
## 3. Ключевые детали
- Использует `u_async` как событийный цикл (epoll/poll)
- Per-client flow tracking: каждый уникальный клиент (IP:port) получает выделенный backend-сокет, поиск по хешу через линейный связный список (`udp_flow_t`)
- Раздельные настройки потерь и задержек для forward (клиент→сервер) и backward (сервер→клиент) направлений
- Задержка — случайная в заданном диапазоне (ms), потери — случайные с заданной вероятностью (`rand() % 100 < loss`)
- Сборка: `make` в `tools/proxy/`, линкуется с `libuasync.a` и `libpthread`
- Скрипт `proxy.sh` — быстрый запуск с преднастроенными адресами для локального тестирования