mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-02 17:15:43 +00:00
* feat(mobile): add embedded iOS runtime API Add a thin panic-safe C ABI crate for embedding no-TUN instances on iOS. Expose lifecycle, status, JSON-RPC, string ownership, and error handling. Build device and simulator XCFramework static libraries on macOS. Add exact named-instance deletion to the iOS and Android wrappers. Cover wrapper lifecycle and the port-forward patch flow on host targets. * fix(gateway): recover TCP port-forward listeners Release an unusable TCP port-forward listener after an accept failure. Retry binding until the forward is cancelled. Keep the old listener released while rebinding so mobile sockets can recover. Expose opt-in iOS diagnostics for listener and connection events. Trace configuration removal and adapter shutdown. Add tests for recovery, release-before-rebind, and cancellation. * feat(web): persist incremental managed config patches Add a revision-CAS PATCH contract for managed configs while keeping the existing Full PUT path for compatibility and recovery. Apply Full and Patch mutations with their revision in one SQLite transaction. Reject ownership conflicts and invalidate revisions on alternate web-owned writes. Document limits, failure semantics, rollout order, and verification. Cover delta updates, conflicts, idempotency, and transaction rollback. * feat(web): apply managed config patches to live sessions Carry Patch fences and touched instance IDs into live sessions. Reconcile only those instances when the applied revision matches the Patch base. Fall back to Full reconciliation for gaps and restarts. Invalidate the applied revision around every direct runtime mutation. Fence revision advancement with the runtime cache epoch so stale reconcile rounds cannot overwrite a newer invalidation. Require deletion responses to confirm each requested instance before advancing the revision. Raise the managed PUT and PATCH body limit to 32 MiB and return typed conflicts for publisher recovery. * fix(core): retry transient accepted TCP errors Keep TCP tunnel listeners alive when an accepted socket fails during upgrade with a retryable connection-state error. Share the retryable I/O classifier with the socket listener. Cover a rejected connection followed by success and propagation of permanent errors. * feat(core): add internal Peer Relay edge projection Derive the local advertised OSPF row from physical adjacency and transport-authenticated credential relay coverage. Keep full local adjacency only in the temporary SPF snapshot so direct destinations retain a fallback route. Leave Peer Relay disabled at the public configuration seam. A follow-up change can expose the preference without coupling route projection to credential reauthorization. feat(config): expose Peer Relay routing preference Add prefer_peer_relay to public protobuf, TOML, management patch, and hosted runtime surfaces. Read the preference from live peer context so runtime config updates take effect. Refresh authenticated peer metadata when the option is enabled. Cover dynamic enable and disable in a five-node, dual-admin credential topology, including forwarded relay coverage and local fallback.
71 lines
3.1 KiB
Bash
Executable File
71 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Build the easytier-ios static library slices for the Flutter iOS client.
|
|
#
|
|
# This script only runs on macOS: it needs the Apple SDK (aarch64-apple-ios*,
|
|
# x86_64-apple-ios targets) plus `lipo`. Run it from the EasyTier repository
|
|
# root or from this crate directory.
|
|
#
|
|
# rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios
|
|
# ./build-xcframework.sh
|
|
#
|
|
# Output (workspace target directory + ./xcframework/sim):
|
|
# target/aarch64-apple-ios/release/libeasytier_ios.a (device)
|
|
# xcframework/sim/libeasytier_ios.a (simulator, lipo merged)
|
|
|
|
set -euo pipefail
|
|
|
|
CRATE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# The crate lives in a workspace; build artifacts land in the workspace root
|
|
# target directory regardless of the current directory.
|
|
WORKSPACE_ROOT="$(cd "${CRATE_DIR}/../.." && pwd)"
|
|
TARGET_DIR="${WORKSPACE_ROOT}/target"
|
|
OUT_DIR="${CRATE_DIR}/xcframework"
|
|
|
|
if [[ "$(uname)" != "Darwin" ]]; then
|
|
echo "error: build-xcframework.sh must run on macOS (needs Apple SDK, lipo)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cd "${WORKSPACE_ROOT}"
|
|
|
|
# The Rust iOS targets emit a `___chkstk_darwin` stack-probe call but do not
|
|
# link the compiler-rt archive that provides it. Point the linker at the
|
|
# matching device or simulator archive shipped inside the Xcode toolchain.
|
|
CLANG_BIN="$(xcrun --find clang)" # .../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
|
|
TOOLCHAIN_USR="${CLANG_BIN%/bin/clang}" # .../XcodeDefault.xctoolchain/usr
|
|
CLANG_RT_DIR="$(cd "${TOOLCHAIN_USR}/lib/clang" && cd "$(ls | sort -V | tail -1)/lib/darwin" && pwd)"
|
|
CLANG_RT_RUSTFLAGS="${RUSTFLAGS:-} -C link-arg=-L${CLANG_RT_DIR}"
|
|
echo "==> using libclang_rt from ${CLANG_RT_DIR}"
|
|
|
|
# kcp-sys's bindgen rejects the `-sim` in the aarch64-apple-ios-sim target
|
|
# triple; give bindgen an explicit simulator target so the C bindings build.
|
|
SIM_SDK="$(xcrun --sdk iphonesimulator --show-sdk-path)"
|
|
|
|
echo "==> building aarch64-apple-ios (device)"
|
|
RUSTFLAGS="${CLANG_RT_RUSTFLAGS} -C link-arg=-lclang_rt.ios" \
|
|
cargo build -p easytier-ios --release --target aarch64-apple-ios
|
|
|
|
echo "==> building aarch64-apple-ios-sim (Apple Silicon simulator)"
|
|
BINDGEN_EXTRA_CLANG_ARGS="--target=arm64-apple-ios17.0-simulator -isysroot ${SIM_SDK}" \
|
|
RUSTFLAGS="${CLANG_RT_RUSTFLAGS} -C link-arg=-lclang_rt.iossim" \
|
|
cargo build -p easytier-ios --release --target aarch64-apple-ios-sim
|
|
|
|
echo "==> building x86_64-apple-ios (Intel simulator)"
|
|
BINDGEN_EXTRA_CLANG_ARGS="--target=x86_64-apple-ios17.0-simulator -isysroot ${SIM_SDK}" \
|
|
RUSTFLAGS="${CLANG_RT_RUSTFLAGS} -C link-arg=-lclang_rt.iossim" \
|
|
cargo build -p easytier-ios --release --target x86_64-apple-ios
|
|
|
|
rm -rf "${OUT_DIR}"
|
|
mkdir -p "${OUT_DIR}/sim"
|
|
|
|
echo "==> lipo: merge simulator slices"
|
|
lipo -create \
|
|
"${TARGET_DIR}/aarch64-apple-ios-sim/release/libeasytier_ios.a" \
|
|
"${TARGET_DIR}/x86_64-apple-ios/release/libeasytier_ios.a" \
|
|
-output "${OUT_DIR}/sim/libeasytier_ios.a"
|
|
|
|
echo "==> done:"
|
|
echo " device: ${TARGET_DIR}/aarch64-apple-ios/release/libeasytier_ios.a"
|
|
echo " simulator: ${OUT_DIR}/sim/libeasytier_ios.a"
|