Commit Graph

467 Commits

Author SHA1 Message Date
ospab a6640e1344 CI/CD: release version v0.1.64 2026-05-17 15:16:37 +03:00
ospab 8fe0589ea6 fix: handshake padding wire format (breaking fix)
The previous commit added random padding after Noise handshake payloads
but the receiver passed the entire raw buffer (including padding) to
snow::read_handshake(), which cannot handle trailing bytes.

New wire format:
  [session_id:4][noise_len:2][noise_payload:N][random_padding:32-128]

Changes:
- wrap_datagram_handshake: puts noise_len (u16 BE) at bytes [4..6]
  before the Noise payload, followed by 32-128 random padding bytes
- handle_inbound: reads noise_len from [4..6], passes only
  raw_vec[6..6+noise_len] to snow, ignoring trailing padding
- obfuscation: handshake mask extended from 4 to 6 bytes to also
  cover the noise_len field (prevents DPI from seeing constant u16)
- dispatcher: key-trial loop updated to deobfuscate 6-byte header

Both client and server now produce/consume the same padded format.
2026-05-17 15:16:02 +03:00
ospab bb7d471864 CI/CD: release version v0.1.63 2026-05-17 14:41:02 +03:00
ospab 77ec0e3a44 fix: DPI resistance, GUI proxy/tunnel, and code quality
DPI/TSPU resistance:
- Handshake packets now padded with 32-128 random bytes (prevents size
  fingerprinting — previously every handshake was exactly 52 bytes)
- Frame header reserved bytes randomized instead of always 0 (prevents
  known-plaintext oracle inside encrypted payload)
- Padding jitter cap increased from 96 to 256 bytes for better traffic
  pattern masking

GUI Windows app (tunnel/proxy not starting):
- CRITICAL: Added CREATE_NO_WINDOW flag to all reg.exe calls in sysproxy.rs.
  In Tauri GUI context (no console window), Command::new('reg') was silently
  failing because there was no attached console. This prevented the Windows
  system proxy from being enabled.
- Added ProxyOverride bypass list (localhost;127.*;10.*;192.168.*;<local>)
  to prevent proxy loop for local traffic
- Added comprehensive logging for all registry operations
- Set initial connection_state to 1 (connecting) instead of 0 — prevents
  UI polling from immediately flipping back to 'disconnected' before the
  handshake has a chance to begin

Code quality:
- Fixed log file paths: log_to_core_file() and log_to_file() now write next
  to the executable instead of CWD. In GUI context, CWD could be
  C:\Windows\System32, causing write failures or misplaced log files.
2026-05-17 14:40:13 +03:00
ospab 032f694821 feat: comprehensive diagnostic logging across all modules
protocol.rs:
- Gap recovery logs: skipped frames count, delivered count, remaining buffer
- Duplicate frame detection with nonce values
- Max reorder window exceeded with gap width
- NACK handling: retransmit success vs frame evicted from history
- Reorder buffer overflow with capacity stats
- Close frame receipt
- Zombie frame eviction count
- sent_history overflow (the root cause of speedtest death)

dispatcher.rs:
- New session authentication with peer IP, session count, replay cache size
- Client roaming detection (old addr -> new addr)
- Handshake rejection reasons: timestamp drift, replay cache full, max sessions
- Protocol errors and tick errors with session context

bridge.rs:
- UDP socket buffer diagnostics (requested vs actual)
- Handshake response size and RTT
- Inbound protocol errors with session index
- Outbound packing errors with stream_id

signal.rs:
- Specific shutdown signal identification (SIGTERM/SIGINT/Ctrl+C/Close/Break)

server lib.rs:
- Startup banner with access key count and ARQ config
- UDP buffer diagnostics
- Relay CONNECT/CLOSE/error always visible (not gated by debug)
- All println! -> eprintln! for proper stderr logging
- Hot-reload prefix fixed [ostp-server] -> [ostp]
2026-05-17 14:31:21 +03:00
ospab f8aa8906ff CI/CD: release version v0.1.62 2026-05-17 14:23:08 +03:00
ospab dc6635e248 fix: tunnel death after speedtest — gap recovery and ARQ tuning 2026-05-17 14:22:50 +03:00
ospab e36d743ad5 refactor: professionalize all scripts and CI workflow
build.ps1:
- Added mandatory cargo check pre-flight that blocks releases on errors
- Added --Check flag for check-only mode (no build, no release)
- Reverts version bump if check fails
- Professionalized all output (removed informal language)
- Cleaner output structure with consistent [ok], [warn], [error] tags

install.ps1 / install.sh:
- Professionalized all prompts and messages
- Removed informal phrasing
- Consistent formatting

test_linux.sh:
- Updated all log string matchers to match professionalized output:
  'Connection established' (was 'Bridge connection established')
  'Starting server' (was 'Starting in SERVER mode')
  'Starting client' (was 'Starting in CLIENT mode')
  RTT regex updated for new format

release.yml:
- Added cargo check pre-flight step before native compilation
2026-05-17 03:41:40 +03:00
ospab aa9a93fcbf CI/CD: release version v0.1.61 2026-05-17 03:35:57 +03:00
ospab 696d416eff fix: resolve KeyExchange import error and clean compiler warnings
- Removed stale KeyExchange re-export from crypto/mod.rs (kex.rs
  only exports HybridSharedSecret and HybridKex after stub refactor)
- Removed unused imports in ostp-server/lib.rs (AsyncWriteExt,
  tcp::OwnedWriteHalf)
- Suppressed dead_code warning on HelperMsg::Log variant (IPC spec)
- Verified: cargo check passes with zero errors and zero warnings
2026-05-17 03:35:39 +03:00
ospab 07511debbd CI/CD: release version v0.1.60 2026-05-17 03:32:12 +03:00
ospab 31f3fff187 fix: GUI, JNI SDK, and TUN handler audit fixes
ostp-gui:
- GUI-01: Config parsing now strips JSONC comments via json_comments
  crate, matching CLI behavior. Previously failed on any commented config.
- GUI-02: stop_tunnel now properly aborts the JoinHandle with a 2s
  timeout instead of silently dropping it.

ostp-jni (Android SDK):
- JNI-01: Replaced all .unwrap() calls in JNI functions with safe
  null_mut fallback. JNI functions must never panic.
- JNI-02: Added missing exclusions, multiplex, debug fields to
  Kotlin SDK Config.toNativeJson(). Without these, serde deserialization
  on the native side could fail or use wrong defaults.
- JNI-03: Replaced shutdown_background() with shutdown_timeout(3s)
  to allow proper task cleanup and port unbinding.
- JNI-04: Updated Kotlin log string matchers to match professionalized
  messages (Connection established, TUN tunnel established, etc.)

TUN handlers:
- TUN-01: Windows TUN cleanup guard now resets DNS via netsh. Previously
  the custom DNS server remained configured after disconnect, causing
  complete DNS resolution failure.
- Unified all remaining [ostp-client] log prefixes to [ostp] across
  wintun_handler.rs, linux_handler.rs, and proxy.rs.
2026-05-17 03:31:48 +03:00
ospab 8eb3fc72cb polish: professionalize all user-facing log output and UX
- Unified log prefix to [ostp] across all modules (was [OSTP Core],
  [ostp-server], [ostp-client], [client], [bridge])
- Removed informal/casual phrasing from all user-visible messages
- Startup messages are clean and concise (mode, server, status)
- Error messages are actionable without being alarming
- Essential server logs (client connect/disconnect) always visible
- Essential client logs (connection status, errors) always visible
- TUN tunnel messages consistent across Windows and Linux
- Removed noisy eprintln from UDP reader hot path
- Status format: [ostp] Status: Connected (rtt=12.3ms)
2026-05-17 03:26:15 +03:00
ospab 7424ccc0ff fix: resolve critical ARQ bugs causing Speedtest tunnel drops + docs overhaul
Critical fixes (6):
- protocol.rs: in_flight_count() now counts only retransmittable Data frames,
  not Ack/Nack control frames — eliminates false backpressure under load
- protocol.rs: NACK is now rate-limited to once per 30ms — prevents
  retransmission storm during normal UDP jitter
- protocol.rs: zombie frames exceeding max_retries+4 are evicted each tick —
  prevents unbounded memory growth and stale retransmits
- protocol.rs: Closing state now processes final in-flight packets instead
  of silently dropping them — prevents data loss at session teardown
- server/lib.rs: stream_tx changed from bounded(10000) to unbounded_channel —
  prevents TCP-reader collapse during Speedtest with 50+ streams
- bridge.rs: liveness timeout raised from 30s to 60s — prevents false
  reconnect during heavy Speedtest load

Medium fixes (8):
- protocol.rs: ACK range truncation preserves cumulative range (index 0)
- bridge.rs: Ping now uses send_datagram() for correct TURN wrapping
- dispatcher.rs: replay_cache hard-capped at 100k entries (DoS protection)
- dispatcher.rs: old addr cleaned from addr_to_session on roaming
- server/lib.rs: TCP connect_target() now has 10s timeout
- config.rs: TURN section parsed during hot-reload
- proxy.rs: HTTP header parsing uses 512-byte chunks instead of 1-byte reads
- proxy.rs: stream_id wrap-around skips active IDs to prevent collision
- runner.rs: is_essential_log matches actual log strings from bridge.rs

Other:
- kex.rs: clearly marked as dead PQ stub (not used by protocol)
- README.md + README.ru.md: complete rewrite with architecture diagram
- docs/en/specification.md: updated ARQ section with all new semantics
2026-05-17 03:20:50 +03:00
ospab a9ba941782 CI/CD: release version v0.1.59 2026-05-17 02:56:17 +03:00
ospab 5bd653e9d2 fix: immediately ACK duplicate packets instead of silently dropping them to unblock client retries when ACKs are lost 2026-05-17 02:56:16 +03:00
ospab b670ba9e48 CI/CD: release version v0.1.58 2026-05-17 02:40:54 +03:00
ospab 5c33f08a9b fix: resolve fatal connection halt caused by unrecoverable dropped untracked Ack/Nack frames. Control frames are now saved in sent_history without auto-retransmission to allow targeted Nack recovery. 2026-05-17 02:40:52 +03:00
ospab 9c05f130ac CI/CD: release version v0.1.57 2026-05-17 02:20:01 +03:00
ospab f0a93b4161 perf: heavily tune UDP socket buffers via socket2 to support 10Gbps+ micro-burst resilience 2026-05-17 02:19:59 +03:00
ospab ecba33e6d8 CI/CD: release version v0.1.56 2026-05-17 02:16:14 +03:00
ospab 9c685c8e43 feat: ensure connection and disconnection logs are always visible on the server even without debug mode 2026-05-17 02:16:12 +03:00
ospab 684b50f779 CI/CD: release version v0.1.55 2026-05-17 02:01:42 +03:00
ospab b1dfb335c9 fix: resolve severe server-side head-of-line blocking under high connection concurrency by delegating TCP connection establishments and stream writing to asynchronous spawned tasks 2026-05-17 02:01:40 +03:00
ospab 6a474c8f00 CI/CD: release version v0.1.54 2026-05-17 01:35:25 +03:00
ospab 4cc1f0079c fix: resolve packet drop & connection timeouts under high speed tests by reducing proxy event queue size and expanding sent history / reorder buffers 2026-05-17 01:35:24 +03:00
ospab a46b6eb0b6 CI/CD: release version v0.1.53 2026-05-17 01:30:01 +03:00
ospab bfa858ff93 fix: prevent premature Windows client shutdown due to empty/closed console event streams 2026-05-17 01:30:00 +03:00
ospab ff207112d8 chore: sync Cargo.lock 2026-05-17 01:20:28 +03:00
ospab 039e23d34e CI/CD: release version v0.1.52 2026-05-17 00:21:17 +03:00
ospab e96d440e2d feat: add turn section to default client init template 2026-05-17 00:21:15 +03:00
ospab 2ab8353078 CI/CD: release version v0.1.51 2026-05-16 23:58:10 +03:00
ospab 5c71c6cc9e feat: introduce ciphertext-derived dynamic obfuscation to fully mask the nonce on the wire 2026-05-16 23:58:07 +03:00
ospab 52db766e87 CI/CD: release version v0.1.50 2026-05-16 23:41:08 +03:00
ospab ec35769b9f fix: implement non-blocking unbounded channels and clean stream reset on reconnect 2026-05-16 23:41:04 +03:00
ospab 0c762d6873 CI/CD: release version v0.1.49 2026-05-16 20:55:53 +03:00
ospab e28a698e9b fix: resolve connection instability under load and refine logging 2026-05-16 20:55:11 +03:00
ospab a7280ad38f CI/CD: release version v0.1.48 2026-05-16 19:30:42 +03:00
ospab 5c7a55f9e0 fix: restore server-only guard for link printing in init block 2026-05-16 19:30:15 +03:00
ospab 694e420397 CI/CD: release version v0.1.47 2026-05-16 19:25:57 +03:00
ospab 9982b8b94b fix: correct crate name to json_comments 2026-05-16 19:25:27 +03:00
ospab 5695028736 CI/CD: release version v0.1.46 2026-05-16 19:24:08 +03:00
ospab f419bfa4ee feat: switch to JSON with comments (JSONC) for config; docs: update READMEs 2026-05-16 19:23:17 +03:00
ospab acc5e87878 docs: remove remaining emojis and fix language links 2026-05-16 19:19:33 +03:00
ospab 7e44f57c00 docs: simplify READMEs and add cross-language links 2026-05-16 19:17:04 +03:00
ospab 514bae94cd fix: resolve build errors and remove GUI from main release; docs: improve READMEs 2026-05-16 19:15:04 +03:00
ospab acf81527b6 docs: simplify README and fix keep-alive/config validation 2026-05-16 19:05:09 +03:00
ospab dcb3c1c5e4 CI/CD: release version v0.1.45 2026-05-16 18:21:16 +03:00
ospab 4970b661db chore: implement keep-alive, config comments, validation and CI/CD improvements 2026-05-16 18:20:53 +03:00
ospab 5d092340be CI/CD: release version v0.1.44 2026-05-16 18:13:40 +03:00