DragonTCP Proxy v6 - Server Debug Build ================================= This build adds server-side diagnostic logging for the adaptive/chunk transport. The wire protocol and v6 client remain compatible. New server flags ---------------- --debug Session/connect/error logging plus periodic aggregate statistics. --debug-chunks Logs every COPEN, CPUSH, ACK, CPULL, DATA, WAIT, EOF, and CCLOSE event. This is extremely verbose with 32-byte chunks and can reduce throughput. Enabling --debug-chunks also enables normal debug logging. --debug-stats-interval DURATION Aggregate statistics frequency. Default: 5s. Set to 0 to disable periodic statistics. Recommended diagnostic command for fixed 32-byte chunks -------------------------------------------------------- sudo ./dragontcp-server-linux-amd64 --token 'YOUR_SECRET' --chunk-max 32 --chunk-buffered 2048 --chunk-poll-wait 50ms --chunk-session-timeout 5m --max-connections 20000 --tcp-buffer 0 --debug --debug-chunks --debug-stats-interval 5s Normal production command with useful low-overhead debug --------------------------------------------------------- sudo ./dragontcp-server-linux-amd64 --token 'YOUR_SECRET' --chunk-max 32 --chunk-buffered 2048 --chunk-poll-wait 50ms --chunk-session-timeout 5m --max-connections 20000 --tcp-buffer 0 --debug --debug-stats-interval 10s Disable all debug logging ------------------------- Simply omit --debug and --debug-chunks. Example debug output -------------------- [DEBUG] SESSION OPEN id=... target=example.com:443 max_chunk=32 active_sessions=1 [CHUNK] CPUSH id=... seq=0 bytes=32 -> ACK accepted=32 [CHUNK] CPULL id=... ack=-1 want=0 offset=0 limit=32 [CHUNK] DATA id=... seq=0 offset=0 bytes=32 total=32 [CHUNK] CPULL id=... want=8 -> WAIT [DEBUG] SESSION CLOSE id=... active_sessions=0 [DEBUG] STATS uptime=10s active_connections=8 active_sessions=2 sessions_opened=5 sessions_closed=3 bytes_up=... bytes_down=... push_records=... pull_requests=... data_records=... waits=... errors=0 Counters -------- active_connections - currently open DragonTCP TCP connections active_sessions - currently open chunk proxy sessions sessions_opened - total chunk sessions opened sessions_closed - total chunk sessions closed bytes_up - bytes accepted from client and written toward target bytes_down - bytes read from target into chunk buffering push_records - accepted upload CPUSH records pull_requests - CPULL requests received data_records - DATA responses generated waits - WAIT responses because downstream data was not ready yet errors - debug-counted server/protocol errors Important performance note -------------------------- At 32 bytes, --debug-chunks can generate thousands or millions of log lines for large transfers. Use it while diagnosing a failure, then switch to --debug only for normal use. Large-chunk update ================== This is the v6 debug/adaptive-chunk branch with FIXED poller concurrency. It intentionally does NOT include the later adaptive-poller controller. Chunk limits ------------ Previous hard limit: 8192 bytes New hard limit: 1048576 bytes (1 MiB) The framed protocol ceiling was increased to 2 MiB so a 1 MiB CPUSH/DATA record plus protocol metadata fits safely. New defaults: client --chunk-max 65536 server --chunk-max 65536 The adaptive client still begins at: --chunk-start 256 and can grow toward the configured maximum after successful records. Use up to 1 MiB adaptive chunks -------------------------------- Server: sudo ./dragontcp-server-linux-amd64 --token 'YOUR_SECRET' --chunk-max 1048576 --debug --debug-stats-interval 10s Android ARM64 client with fixed poller count of 8: ./dragontcp-client-android-arm64 --server-host YOUR_SERVER_IP --token 'YOUR_SECRET' --chunk-start 256 --chunk-min 32 --chunk-max 1048576 --chunk-pollers 8 --chunk-timeout 2s --chunk-adapt-log The number of pollers stays exactly at the value passed with --chunk-pollers. Only the chunk size adapts. Examples of useful ceilings --------------------------- --chunk-max 16384 # 16 KiB --chunk-max 32768 # 32 KiB --chunk-max 65536 # 64 KiB (new default maximum) --chunk-max 131072 # 128 KiB --chunk-max 262144 # 256 KiB --chunk-max 524288 # 512 KiB --chunk-max 1048576 # 1 MiB hard maximum Fixed-size mode also supports the same range: --chunk-size 262144 Memory note ----------- Larger server chunk maxima require larger per-session target-read buffers and can increase buffered memory substantially when many sessions are active. For thousands of simultaneous users, do not automatically use 1 MiB unless measurements show that it is useful. Values such as 16-64 KiB are a more reasonable starting point, while the adaptive client can still be configured to probe higher when your network supports it. Validation ---------- The updated source and binaries were rebuilt from this v6 debug branch. Validation included: * Go builds for Linux amd64, Linux ARM64, Linux ARMv7 client, and Android ARM64. * A protocol round-trip test with a full 1 MiB request and response frame. * An 8 MiB HTTP download through the proxy using fixed 262144-byte (256 KiB) chunk configuration; the downloaded SHA-256 matched the source exactly. DragonTCP branding update ========================= This package was renamed from HOX to DragonTCP. Binary names are now: dragontcp-server-linux-amd64 dragontcp-server-arm64 dragontcp-client-linux-amd64 dragontcp-client-android-arm64 dragontcp-client-arm64 dragontcp-client-armv7 The Go module and command directories were also renamed to DragonTCP. The existing UP/OK wire framing and chunk protocol were intentionally kept unchanged, so this branding change does not break compatibility with the previous protocol implementation.