# AGENTS.md - uTun Development Guide This file contains essential information for AI coding agents working in the uTun codebase. ## πŸ“‹ Quick Reference **Repository:** uTun - Secure VPN tunnel with ETCP protocol **Language:** C (C99) **Build System:** GNU Autotools (autoconf/automake) **Cryptography:** TinyCrypt (AES-CCM, ECC) ## πŸ”§ Build Commands ### Full Build ```bash ./autogen.sh # Generate configure script (if needed) ./configure # Configure build make # Build everything make install # Install (requires sudo) ``` ### Partial Builds ```bash cd lib && make # Build only the library cd src && make # Build only the main program cd tests && make # Build only tests ``` ### Clean Build ```bash make clean # Clean object files make distclean # Clean everything including configure files ``` ## πŸ§ͺ Test Commands ### Run All Tests ```bash make check # Run all tests via automake ``` ### Run Specific Test ```bash cd tests/ && ./test_etcp_crypto # ETCP crypto test cd tests/ && ./test_etcp_simple # Simple ETCP test cd tests/ && ./test_ecc_encrypt # ECC encryption test ``` ### Run Single Test with Debug Info ```bash cd tests/ gcc -I../src -I../lib -I../tinycrypt/lib/include \ -o my_test test_file.c ../src/*.c ../lib/*.c ../tinycrypt/lib/source/*.c ./my_test ``` ## πŸ’» Code Style Guidelines ### Naming Conventions - **Functions:** `snake_case` - `etcp_connection_create()`, `sc_encrypt()` - **Types:** `struct snake_case` or `typedef`: `struct secure_channel`, `sc_context_t` - **Macros:** `UPPER_CASE` - `SC_PRIVKEY_SIZE`, `DEBUG_ERROR()` - **Constants:** `UPPER_CASE` - `SC_OK`, `SC_ERR_CRYPTO` - **Global Variables:** Avoid where possible, use `static` for file scope ### Formatting - **Indentation:** 4 spaces, no tabs - **Braces:** Same line for functions, new line for control structures: ```c int function(void) { if (condition) { do_something(); } } ``` - **Comments:** Primary language is Russian for business logic, English for API docs - **Line Length:** Aim for 80-100 characters ### Include Order ```c // 1. System headers #include #include // 2. Library headers #include "../lib/ll_queue.h" // 3. Local headers #include "etcp.h" ``` ### Error Handling - Use custom error codes defined in headers (e.g., `SC_ERR_INVALID_ARG`) - Return negative values for errors, 0 for success - Use DEBUG macros for logging: ```c DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "Failed to initialize: %s", err); DEBUG_INFO(DEBUG_CATEGORY_CONNECTION, "Socket created on port %d", port); ``` ## πŸ” Cryptography Guidelines ### Using Secure Channel (secure_channel.h) ```c // 1. Initialize context struct SC_MYKEYS my_keys; // ... fill keys ... sc_context_t ctx; sc_init_ctx(&ctx, &my_keys); // 2. Set peer public key (for key exchange) sc_set_peer_public_key(&ctx, peer_public_key, 0); // 0 = binary format // 3. Ready for encrypt/decrypt sc_encrypt(&ctx, plaintext, plaintext_len, ciphertext, &ciphertext_len); sc_decrypt(&ctx, ciphertext, ciphertext_len, plaintext, &plaintext_len); ``` ### Important Notes - **Nonce size:** Must be exactly 13 bytes for CCM mode (`SC_NONCE_SIZE = 13`) - **Session key:** 16 bytes for AES-128 (`SC_SESSION_KEY_SIZE = 16`) - **Tag size:** 8 bytes for authentication (`SC_TAG_SIZE = 8`) - **Error codes:** Check return values, negative = error ## πŸ—οΈ Architecture ### Directory Structure ``` β”œβ”€β”€ lib/ # Core libraries β”œβ”€β”€ src/ # Main source code β”œβ”€β”€ tests/ # Test programs β”œβ”€β”€ doc/ # Technical Specifications β”œβ”€β”€ tinycrypt/ # TinyCrypt crypto library (external) └── net_emulator/ # Network emulator ``` ### File Overview **Core (src/)** - `utun.c` - Main program entry point, CLI parsing, daemon mode - `utun_instance.c/h` - Root instance lifecycle management - `tun_if.c/h` - Simplified TUN interface (init/write/close) **Network Stack (src/)** - `etcp.c/h` - ETCP protocol implementation (TCP-like with crypto) - `etcp_connections.c/h` - Socket and link management - `etcp_loadbalancer.c/h` - Multi-link load balancing - `pkt_normalizer.c/h` - Packet fragmentation/reassembly - `routing.c/h` - Routing table management **Crypto (src/)** - `secure_channel.c/h` - AES-CCM encryption with ECC key exchange - `crc32.c/h` - CRC32 checksums **Config (src/)** - `config_parser.c/h` - INI-style config file parsing - `config_updater.c/h` - Config file modification utilities **Libraries (lib/)** - `u_async.c/h` - Async event loop (epoll/poll, timers) - `ll_queue.c/h` - Lock-free linked list queue with callbacks - `memory_pool.c/h` - Fast object pool allocator - `debug_config.c/h` - Debug logging system - `timeout_heap.c/h` - Min-heap for timer management - `sha256.c/h` - SHA256 hashing **Tests (tests/)** - `test_etcp_*.c` - ETCP protocol tests - `test_crypto.c` - TinyCrypt AES/CCM tests - `test_ecc_encrypt.c` - ECC encryption tests - `test_ll_queue.c` - Queue functionality tests - `bench_*.c` - Performance benchmarks **External** - `tinycrypt/` - TinyCrypt library (AES, ECC, SHA256) ### Key Components - **UASYNC:** Asynchronous event loop for sockets and timers - **LL_QUEUE:** Lock-free lockstep queue for packet handling - **Memory Pool:** Fast allocation for network packets - **ETCP:** Extended TCP protocol with crypto and reliability - **Secure Channel:** AES-CCM encryption with ECC key exchange ## πŸ› Debugging Tips ### Enable Debug Output ```c // In source files, define debug before including headers #define DEBUG_CATEGORY_YOUR_MODULE 1 ``` ### Common Build Issues 1. **Missing headers:** Check include paths in Makefile.am 2. **Undefined references:** Ensure source files are listed in Makefile.am 3. **Link errors:** Check function declarations match definitions ### Testing Crypto ```bash cd tests/ ./test_etcp_crypto # Should show all tests passing cd tests/ ./working_crypto_test # Standalone crypto test ``` ## πŸ“¦ Dependencies ### Build Dependencies - autoconf, automake, libtool - gcc with C99 support - pthread library - OpenSSL/crypto library (for SHA256) ### Runtime Dependencies - TUN/TAP interface support (Linux kernel module) - libcrypto (usually installed by default) - Proper network configuration for testing ## πŸ“ Git Conventions - **Commit Messages:** Use imperative mood, concise (50-72 chars) - **Language:** Mix of English (technical) and Russian (business logic) - **Branching:** Use feature branches, merge to master via pull request - **Tags:** Version tags follow vX.Y.Z format Example commits: ``` Fix: Added uasync_t typedef for compilation Crypto: Fixed CCM nonce size to 13 bytes, all crypto tests passing ``` ## πŸš€ Quick Start for New Features 1. Add new source file to `src/Makefile.am` under `utun_SOURCES` 2. Add test file to `tests/Makefile.am` under `check_PROGRAMS` 3. Use existing patterns from similar modules 4. Run `make check` after changes 5. Commit with descriptive message in appropriate language --- Π­Ρ‚Π° инструкция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ инструкциСй opencode. "cp" or "ΠΊΠΏ" in prompt = do commit and push (всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ откатывая Π½ΠΈΡ‡Π΅Π³ΠΎ!) Π’Π°ΠΆΠ½Ρ‹Π΅ дополнСния: - Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅: ΠΏΡ€ΠΈ поискС ошибок Π΄Π΅Π»Π°ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π°Π²ΠΊΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΈΡ‚/backup. Всё лишнСС Ρ‡Ρ‚ΠΎ мСнял ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ - строго Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π°Π·Π°Π΄ Π² состояниС Π΄ΠΎ ΠΌΠΎΠ΅Π³ΠΎ Π²ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π°. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π² ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ исправлСниС ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ лилшнСго! - Ссли Π² процСссС исправлСний-Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° нСстыковка которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠ΅Π½ΡŒΠ΅Π·Π½Ρ‹Ρ… Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ, ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расскаТи ΠΎΠ± этом. - sed для рСдактирования исходников - Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ! - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉ Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° - Π½Π΅ сдСлано Π»ΠΈ это ΡƒΠΆΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС. - НС Π΄Π΅Π»Π°ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-посрСдников: Π»ΡƒΡ‡ΡˆΠ΅ сразу Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ target Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². - Бтарайся Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция сдСлала логичСски Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ - это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅. - нСльзя Π½ΠΈΡ‡Π΅Π³ΠΎ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· рСпозитория Π½Π΅ ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ - Когда пишСшь ΠΊΠΎΠ΄ всСгда Π·Π°Π³Ρ€ΡƒΠΆΠ°ΠΉ Π² контСкст ΠΈ мыслСнно Ρ€Π°Π·Π±Π΅Ρ€ΠΈΡΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ/струтуры, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ. - Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π½Π΅ printf Π° DEBUG_* - ΠΏΠ΅Ρ€Π΅Π΄ сборкой всСгда make clean - ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΊΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·Π±Π΅Ρ€ΠΈΡΡŒ ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, просмотри всС Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π½ΡƒΠΆΠ½ΠΎ цСлостноС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅. - ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° мыслСнно Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π΄ΡƒΠΌΠ°ΠΉ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΈ Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ, ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°ΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания - Π²ΠΎ всСх Π±Π»ΠΎΠΊΠ°Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок/Π½Π΅ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… ситуаций Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сообщСния DEBUG_ERROR/DEBUG_WARN ДСйствия ΠΏΡ€ΠΈ поискС Π±Π°Π³Π°: 1. ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΈΡ‚ ΠΈΠ»ΠΈ бэкап всСго Ρ‡Ρ‚ΠΎ мСняСшь 2. ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π±Π°Π³Π° Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈ устранСна - Π²Π΅Ρ€Π½ΠΈ всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚ΠΎ мСнял Π² исходноС состояниС 3. ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒ Ρ‡Ρ‚ΠΎ тСсты проходят ΠΈ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. make clean ΠΏΠ΅Ρ€Π΅Π΄ сбркой ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. 4. Ссли Π±Π°Π³ Π½Π΅ устранён - ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉ поиск ΠΈΠ»ΠΈ Ссли врСмя заканчиваСтся - Π²Π΅Ρ€Π½ΠΈ всё Π² исходноС состояниС Как Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ эффСктивно ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ диагностику ошибки: 0. Π‘ΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΡŒΡΡ Π½Π° поискС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ошибки ΠΈ Π΄ΠΎΠ²Π΅Π΄ΠΈ Π΅Π³ΠΎ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ этой инструкциСй. 1. ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ошибкой ΠΈ ΠΊΠΎΠ΄ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‡Π°Π²ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅. 2. Π΅Ρ‰Π΅ Ρ€Π°Π· мыслСнно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ сцСнарий ошибки (Ссли Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ - ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉ всС Π²Π΅Ρ‚Π²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ: нСльзя Π΄ΠΎΠ΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ - Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ) ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡΡŒ Ρ‡Ρ‚ΠΎ: - Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ понимаСшь ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΈΡ…Π΄ΠΈΡ‚ ΠΊ ошибкС - всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΡ‡Π°Π²ΡΡ‚Π²ΡƒΡŽΡ‚ Π² сцСнарии ошибки ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ ΠΈ понятно - ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ отсСкай логичСски Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ - Ссли Ρ‚Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΊ Π½Π΅ΠΉ Π½Π΅Ρ‚ описания ΠΈΠ»ΠΈ описаниС Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ (Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ΅), ΠΈ функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ логичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ - ΠΏΠΎΠΏΡ€Π°Π²ΡŒ описаниС. Если функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ логичСски Π½Π΅Π²Π΅Ρ€Π½ΠΎ - добавь запись ΠΎΠ± этом Π² todo.txt 3. Если исправлСниС ΠΊΠ°ΠΊ Π»ΠΈΠ±ΠΎ мСняСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: - просмотри Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта функция - ΡƒΠ±Π΅Π΄ΠΈΡΡŒ Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ повСдСния Π½Π΅ повлияСт Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ мСста Π³Π΄Π΅ функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. особСнно Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π Π°Π±ΠΎΡ‚Π° с очСрСдями. - Π—Π°ΠΏΠΈΡΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ: ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π±ΠΈΠ²Π°Ρ‚ΡŒ нСльзя. Добавляй ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ стала пустой. ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡΡ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Π΅ΠΌ queue_wait_threshold, ΠΎΠ½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ сдСлан для добавлСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. - Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ: ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡΡ queue_set_callback: ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ callback , ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°ΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько элСмСнтов, ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΈ resume_callback. Π Π°Π±ΠΎΡ‚Π° с u_async - нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ нСсколько u_async. ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ = всСгда 1 uasync instance - нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sleep/usleep Ссли Π΅ΡΡ‚ΡŒ uasync. НуТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ uasync_set_timeout. ΠšΠΎΠ½Ρ„ΠΈΠ³ΠΈ: - Π² сСрвСрном Ρ‚ΠΎΠ»ΡŒΠΊΠΎ собствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ Π½Π΅Ρ‚ сСкций [client] - Π² клиСнтском Π΅ΡΡ‚ΡŒ собствСнныС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ pubkey ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСрвСра Π² сСкции [client] Ρ‚Π΅Ρ… задания для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /doc. /doc/etcp_protocol.txt - основной ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» (ΠΏΠΎΡ…ΠΎΠΆ Π½Π° TCP+QUIC, ΠΏΠΎΠ΄Π΄Π΅ΠΈΠΆΠΈΠ²Π°Π΅Ρ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, load balancing multi-link, Ρ€Π°Π±ΠΎΡ‚Ρƒ Π° нСустойчивых ΠΊΠ°Π½Π°Π»Π°Ρ…, ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ полосы ΠΈ Π½Π΅Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² связи) - рСализация Π² /src/etcp*.c/h ## Навигация ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ: c_util Π‘ΠΊΡ€ΠΈΠΏΡ‚ для Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ C-ΠΊΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. **ΠšΠΎΠΌΠ°Π½Π΄Ρ‹:** ```bash # ОглавлСниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° - всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ/структуры/enum с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ строк ./c_util toc # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сигнатуры с коммСнтариями (ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ) ./c_util description [name2 ...] # ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ строк ΠΈ checksum ./c_util show [name2 ...] # Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ checksum ./c_util edit [checksum2 ...] <<'EOF' <Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄> EOF ``` **edit:** замСняСт Π±Π»ΠΎΠΊ строк начиная с `start_line`. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ суммы всСх замСняСмых строк (hex, 2 символа). ΠŸΡ€ΠΈ нСсовпадСнии - ошибка Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Новый ΠΊΠΎΠ΄ автоматичСски форматируСтся с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ отступами (Ρ‚Π°Π±Ρ‹/ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°). *Last updated: 2026-02-13 - c_util fully functional with toc/description/show/edit commands*