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

@@ -0,0 +1,60 @@
cmake_minimum_required(VERSION 3.22)
project("utun_bridge")
set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../lib)
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../src)
set(CFG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../libutun_lite)
set(JNI_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../jni_bridge)
set(TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../..)
include(${CFG_DIR}/utun_sources.cmake)
utun_setup_sources("${LIB_DIR}" "${SRC_DIR}" "${CFG_DIR}" "${TOOLS_DIR}")
# Include Opus codec wrapper (was excluded before voice support)
# list(FILTER UTUN_SOURCES EXCLUDE REGEX "opus_codec\\.c$")
# Exclude tun_windows and tun_freebsd (Android is Linux-like)
list(FILTER UTUN_SOURCES EXCLUDE REGEX "tun_windows\\.c$")
list(FILTER UTUN_SOURCES EXCLUDE REGEX "tun_freebsd\\.c$")
# Add libopus sources (for voice recording)
file(GLOB_RECURSE _OPUS_SRC "${LIB_DIR}/libopus/src/*.c"
"${LIB_DIR}/libopus/celt/*.c" "${LIB_DIR}/libopus/silk/*.c"
"${LIB_DIR}/libopus/silk/float/*.c")
list(FILTER _OPUS_SRC EXCLUDE REGEX "/x86/")
list(APPEND UTUN_SOURCES ${_OPUS_SRC})
list(APPEND UTUN_INCLUDE_DIRS "${LIB_DIR}/libopus" "${LIB_DIR}/libopus/include"
"${LIB_DIR}/libopus/celt" "${LIB_DIR}/libopus/silk" "${LIB_DIR}/libopus/silk/float")
# Opus requires these to be defined (or HAVE_CONFIG_H + config.h with VAR_ARRAYS)
list(APPEND UTUN_DEFINES OPUS_BUILD VAR_ARRAYS USE_ALLOCA)
# Prebuilt OpenSSL (cross-compiled for Android)
set(OPENSSL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/openssl/${ANDROID_ABI})
add_library(openssl_crypto STATIC IMPORTED)
set_target_properties(openssl_crypto PROPERTIES
IMPORTED_LOCATION "${OPENSSL_DIR}/lib/libcrypto.a"
)
# OBJECT library: compile .c once, link into SHARED
add_library(utun_core OBJECT ${UTUN_SOURCES})
target_include_directories(utun_core PRIVATE
${UTUN_INCLUDE_DIRS} ${JNI_DIR} ${OPENSSL_DIR}/include
)
target_compile_definitions(utun_core PRIVATE ${UTUN_DEFINES} __ANDROID__)
set_target_properties(utun_core PROPERTIES C_STANDARD 99 C_STANDARD_REQUIRED ON)
# JNI bridge + link into shared library
add_library(utun SHARED
${JNI_DIR}/android_jni_bridge.c
${JNI_DIR}/android_udp_log.c
$<TARGET_OBJECTS:utun_core>
)
target_include_directories(utun PRIVATE
${UTUN_INCLUDE_DIRS} ${JNI_DIR} ${OPENSSL_DIR}/include
)
target_compile_definitions(utun PRIVATE ${UTUN_DEFINES} __ANDROID__)
set_target_properties(utun PROPERTIES C_STANDARD 99 C_STANDARD_REQUIRED ON)
find_library(log-lib log)
target_link_libraries(utun ${log-lib} openssl_crypto)