evgeny
f5bae735f9
Record successful two-PIN pairing and branch regression validation
2026-11-03 01:43:00 +01:00
evgeny
20571b7a95
Test losses in both PIN phases and reject premature keys; update CLI guidance
2026-11-03 01:37:58 +01:00
evgeny
b04a57308f
Document reciprocal PIN protocol and explicit pairing recovery menu
2026-11-03 01:35:52 +01:00
evgeny
c9b1a8d0cb
Translate pairing menu and reciprocal PIN instructions on desktop
2026-11-03 01:35:20 +01:00
evgeny
e36e16f139
Test explicit self pairing menu, resume, and both PIN input steps
2026-11-03 01:35:19 +01:00
evgeny
f2a2983986
Explain both pairing PIN steps in English and Russian on Android
2026-11-03 01:34:42 +01:00
evgeny
18f1c6aaf0
Support explicit pairing menu and return PIN on Android
2026-11-03 01:34:42 +01:00
evgeny
10bafe3ca3
Open device pairing explicitly from self context menu and show both PIN steps
2026-11-03 01:31:58 +01:00
evgeny
bc2ac140a8
Require reciprocal PIN confirmation before device key transfer
2026-11-03 01:31:47 +01:00
evgeny
eb2e676d0a
Document explicit device linking flow and outstanding host test issues
2026-11-03 00:47:04 +01:00
evgeny
891e580b7c
Verify deleted-device exclusion in owner view and capture pairing guidance
2026-11-03 00:45:57 +01:00
evgeny
eb6ec1f2ca
Include confirmation dialog type in member interaction tests
2026-11-03 00:44:49 +01:00
evgeny
d8b63dfad8
Include device-group operation state required by the Android member UI
2026-11-03 00:43:20 +01:00
evgeny
029ed59fbf
Verify eligible device actions, confirmation gating and incoming PIN guidance
2026-11-03 00:43:01 +01:00
evgeny
add270d35b
Translate device linking explanations and explicit start action
2026-11-03 00:42:41 +01:00
evgeny
6d75232d8b
Explain incoming device linking and preserve self disconnect in properties
2026-11-03 00:39:06 +01:00
evgeny
18ae58a3d2
Move device linking into an eligible member context action with confirmation
2026-11-03 00:36:24 +01:00
evgeny
10e7eeee3f
Check formatting help placement and document flexible code fences
2026-11-03 00:29:18 +01:00
evgeny
1d323a1db6
Explain whitespace around code fences in both help translations
2026-11-03 00:29:18 +01:00
evgeny
de30c76429
Allow whitespace around standalone code fences and language labels
2026-11-03 00:29:00 +01:00
evgeny
f147f346d5
Add message formatting help beside Join with a fenced code example
2026-11-03 00:28:09 +01:00
evgeny
be7421e6e2
Verify visible copy confirmation, expiry and repeated clicks
2026-11-03 00:25:23 +01:00
evgeny
2cc3451721
Translate code Copy confirmation into Russian
2026-11-03 00:24:46 +01:00
evgeny
fff5834a01
Show temporary Copied feedback after copying a code block
2026-11-03 00:24:46 +01:00
evgeny
c91a217c0c
Keep context menu selection and member details on the same target
2026-11-03 00:22:52 +01:00
evgeny
913e4dfbd4
Reproduce member selection jumping back while its context menu is open
2026-11-03 00:22:29 +01:00
evgeny
f29554f92b
Check the exact scroll threshold and only notify successful sends
2026-11-03 00:20:04 +01:00
evgeny
804a684ef7
Use the test logger for history scroll diagnostics
2026-11-03 00:19:06 +01:00
evgeny
be4798a595
Test group and PM bottom following with long messages and historical sends
2026-11-03 00:18:32 +01:00
evgeny
0da3c3a677
Follow new messages near the bottom and always follow accepted sends
2026-11-03 00:16:33 +01:00
evgeny
39a9fe01a3
Expose accepted sends and define history follow policy
2026-11-03 00:16:21 +01:00
evgeny
3c40294d08
Verify header language names for explicit and detected code blocks
2026-11-03 00:12:39 +01:00
evgeny
c1daeb4982
Show resolved code language on the left of each block header
2026-11-03 00:12:23 +01:00
evgeny
54b1a4fbe5
Check Copy hover cursor and document block copying
2026-11-02 23:54:01 +01:00
evgeny
f8e6e9e5d4
Configure Copy hover detection through the existing view callback pattern
2026-11-02 23:54:00 +01:00
evgeny
8a2f9418e8
Use a complete dark palette for code Copy interaction checks
2026-11-02 23:53:00 +01:00
evgeny
997dab2514
Keep code Copy inactive after dragging back onto its button
2026-11-02 23:52:28 +01:00
evgeny
f0bb9c05bf
Verify code Copy buttons across themes and reject drags or changed messages
2026-11-02 23:51:14 +01:00
evgeny
61aafac32d
Draw Copy controls for code blocks and copy complete block on click
2026-11-02 23:50:42 +01:00
evgeny
f7e82c04a7
Reserve code block headers and share Copy button geometry
2026-11-02 23:50:22 +01:00
evgeny
ffcb02354f
Check embedded translations using each catalog context
2026-11-02 23:35:24 +01:00
evgeny
780e7220c3
Include model roles and row actions required by subgroup details
2026-11-02 23:34:22 +01:00
evgeny
49b7ac9099
Include translations for subgroup name editing
2026-11-02 23:34:07 +01:00
evgeny
f2529fd624
Include subgroup rename command used by the member context menu
2026-11-02 23:34:06 +01:00
evgeny
80c645c982
Show subgroup members without a detail title or rename button
2026-11-02 23:20:18 +01:00
evgeny
5c92241488
Document language detection rules and GitHub corpus results
2026-11-02 23:10:39 +01:00
evgeny
bf663d5799
Recognize Java method fragments without package declarations
2026-11-02 23:09:33 +01:00
evgeny
34b71c040e
Ignore multiline literals when detecting code language
2026-11-02 23:08:37 +01:00
evgeny
6ea6bf20a8
Avoid guessing JavaScript from shared let and arrow syntax
2026-11-02 23:07:48 +01:00
evgeny
970cdd5441
Add reproducible pinned GitHub corpus for language detection
2026-11-02 23:06:43 +01:00
evgeny
51d24ca315
Verify automatic highlighting and explicit language precedence
2026-11-02 23:06:24 +01:00
evgeny
99b4bea3f7
Distinguish Rust paths and embedded markup in language detection
2026-11-02 23:03:30 +01:00
evgeny
032b084a15
Apply language detection to unlabelled code and add corpus runner
2026-11-02 23:00:45 +01:00
evgeny
a7d964658c
Add bounded heuristic code language detector
2026-11-02 23:00:10 +01:00
evgeny
39a2895074
Process window startup requests before testing geometry saves
2026-11-02 22:49:15 +01:00
evgeny
53f8efa920
Record settings window geometry test failure
2026-11-02 22:46:59 +01:00
evgeny
747519ab99
Link message formatting before inheriting GUI test dependencies
2026-11-02 22:46:11 +01:00
evgeny
931b9822c3
Update italic markup examples and regression cases
2026-11-02 22:42:13 +01:00
evgeny
66b8da36b8
Use double underscores for italic chat markup
2026-11-02 22:42:13 +01:00
evgeny
b17c6fff96
Document desktop message formatting and syntax highlighting dependencies
2026-11-02 22:37:55 +01:00
evgeny
c19750a800
Handle Windows line endings and verify empty code blocks
2026-11-02 22:36:10 +01:00
evgeny
77186c4392
Verify formatted message drag-copy and automatic Windows dependency installation
2026-11-02 22:33:27 +01:00
evgeny
347c744f27
Test message markup, syntax state and formatted text layout
2026-11-02 22:31:49 +01:00
evgeny
fc45b39948
Install missing Windows GUI dependencies before configuring the build
2026-11-02 22:30:48 +01:00
evgeny
31b42d0c22
Render formatted chat text with matching selection and clipboard
2026-11-02 22:29:50 +01:00
evgeny
3a6844fc9d
Add desktop message markup parser and syntax highlighting preparation
2026-11-02 22:29:02 +01:00
evgeny
5a8a50e74c
Fix desktop message selection highlight paragraph offset
2026-11-02 22:18:41 +01:00
evgeny
7062905d48
Add simultaneous calls to device groups
2026-11-02 21:53:20 +01:00
evgeny
24cb0eb463
Refine device group controls and aggregate status indicators
2026-11-02 21:02:14 +01:00
evgeny
03fea5eb74
Refine device pairing flow and invalidate outdated node snapshots
2026-11-02 19:52:18 +01:00
evgeny
d7006aecb5
Add signed device groups and compact NODEINFO packing
2026-11-02 18:47:58 +01:00
evgeny
ef34f81c90
Document device group implementation requirements
2026-11-02 16:17:03 +01:00
evgeny
26f8491abc
Add missing desktop voice compressor controls
2026-11-02 16:17:03 +01:00
evgeny
1c0f40f247
Accept zero compressor gain and clarify Android storage limits
2026-11-02 16:17:03 +01:00
evgeny
2260719ff7
Add signed Android release build scripts
2026-11-02 15:03:46 +01:00
evgeny
3166ee7a41
Remove unused log file field from Android settings
2026-11-02 15:03:45 +01:00
evgeny
2b5b5aad88
Fix group JOIN retry delays after rejection and transport failure
2026-11-02 00:33:55 +01:00
evgeny
ba6306f396
Give independent stream test an explicit BGP group owner
2026-11-01 23:24:14 +01:00
evgeny
2414207e80
Document online requirement for opening stream subscriptions
2026-11-01 23:23:44 +01:00
evgeny
d87fb7c555
Clarify BGP availability and source watcher documentation
2026-11-01 23:23:25 +01:00
evgeny
9b416fad82
Test BGP stream availability, recovery and offline viewer cleanup
2026-11-01 23:22:48 +01:00
evgeny
5b5a5e94e3
Remove offline Android streams without draining playback
2026-11-01 23:21:39 +01:00
evgeny
83f6a79985
Report offline stream sources in Android playback
2026-11-01 23:21:39 +01:00
evgeny
bf63f79fdf
Show offline stream closure in the desktop player
2026-11-01 23:10:27 +01:00
evgeny
46a5cf14ce
Close stream receivers when their source goes offline in BGP
2026-11-01 23:10:00 +01:00
evgeny
2f94da7bbf
Test Android stream audio switching and cleanup ownership
2026-11-01 23:06:32 +01:00
evgeny
2b268f314f
Switch Android playback clocks when stream audio changes
2026-11-01 23:05:57 +01:00
evgeny
4e28c518bd
Verify remote no-audio readiness independently of the audio buffer
2026-11-01 22:52:18 +01:00
evgeny
827f3dc619
Declare source audio state in live playback and drain fixtures
2026-11-01 22:48:36 +01:00
evgeny
cbe4cb1e33
Use video playback clocks when the source disables audio
2026-11-01 22:48:19 +01:00
evgeny
0bd046adca
Reserve telemetry width for playback catch-up speed
2026-11-01 22:29:29 +01:00
evgeny
b414fc9538
Verify the bottom player bar and logarithmic volume output
2026-11-01 22:23:49 +01:00
evgeny
5a8807bf89
Keep multiview captions and controls below video and use logarithmic volume
2026-11-01 22:23:09 +01:00
evgeny
213a1010c2
Move live player controls below video with a triangular volume scale
2026-11-01 22:22:44 +01:00
evgeny
c91782848f
Use the red crossed microphone for the no-audio source selection
2026-11-01 22:11:35 +01:00
evgeny
515645dac5
Cross out the red microphone icon when stream audio is off
2026-11-01 22:10:25 +01:00
evgeny
a2d700d5a6
Show the same microphone icon in red when stream audio is off
2026-11-01 22:09:39 +01:00
evgeny
44b7efb1ce
Show microphone mute icons on the stream audio button
2026-11-01 22:05:41 +01:00
evgeny
fabc76ef82
Keep microphone and no-audio options available during publication
2026-11-01 22:05:10 +01:00
evgeny
3eff460457
Allow desktop stream audio to be enabled and disabled live
2026-11-01 22:04:23 +01:00
evgeny
1a113f953b
Verify video continues after microphone samples stop
2026-11-01 21:56:31 +01:00
evgeny
f7096bba7d
Continue streaming without audio after a 300 ms microphone timeout
2026-11-01 21:54:47 +01:00
evgeny
83183f9885
Test live microphone changes and video-only startup
2026-11-01 21:42:45 +01:00
evgeny
1a413608ca
Start desktop streams without audio when capture is unavailable
2026-11-01 21:39:26 +01:00
evgeny
1719f8e108
Save shared stream microphone through the main window
2026-11-01 21:38:36 +01:00
evgeny
fbc030dc5b
Share radio microphone controls with desktop publication
2026-11-01 21:38:01 +01:00
evgeny
b2bd2c284c
Use shared microphone selection for live desktop streams
2026-11-01 21:37:37 +01:00
evgeny
4338f1f9c8
Skip Windows drive roots when creating attachment directories
2026-11-01 21:30:23 +01:00
evgeny
8e204ef887
Log precise directory creation errors when preparing attachments
2026-11-01 21:02:47 +01:00
evgeny
8074b73e95
Verify blocked Bluetooth device close through the actual WinRT cleanup path
2026-11-01 20:49:44 +01:00
evgeny
27d51e93b7
Update diagnostic filters, codec regression and BLE debugging instructions
2026-11-01 20:41:02 +01:00
evgeny
8336487596
Move desktop video and publisher diagnostics out of temporary debug category
2026-11-01 20:40:13 +01:00
evgeny
811f5b7659
Keep packet reception and FFmpeg diagnostics in their module categories
2026-11-01 20:40:13 +01:00
evgeny
b0fe663109
Move ETCP packet and carrier diagnostics from debug to etcp trace
2026-11-01 20:39:35 +01:00
evgeny
8ca7c3cc15
Trace BLE cleanup phases and distinguish closing from completed teardown
2026-11-01 20:39:07 +01:00
evgeny
0308d4a702
Add independent diagnostics for stalled BLE WinRT cleanup calls
2026-11-01 20:37:44 +01:00
evgeny
d7e5672261
Record capture shutdown verification and pending Windows device check
2026-11-01 20:31:12 +01:00
evgeny
fff072d0a8
Identify capture process failures and record forced exits accurately
2026-11-01 20:30:22 +01:00
evgeny
95425aacab
Defer capture rollback and bind errors to the failed configuration
2026-11-01 20:27:17 +01:00
evgeny
96e4c72027
Align stream preview documentation with isolated CPU capture
2026-11-01 20:25:57 +01:00
evgeny
05e1b1e037
Verify rollback continuity and enumerate test windows through capture IPC
2026-11-01 20:25:14 +01:00
evgeny
093d8f15e4
Check asynchronous missing-camera errors in publisher tests
2026-11-01 20:20:23 +01:00
evgeny
006d45024b
Make capture cleanup idempotent and identify frame release stalls
2026-11-01 20:20:00 +01:00
evgeny
caf4ab406c
Document isolated stream capture shutdown and diagnostics
2026-11-01 20:18:34 +01:00
evgeny
8c2289b188
Preserve call camera geometry before stream orientation transforms
2026-11-01 20:17:15 +01:00
evgeny
14bdd2a58f
Pass only immutable source identifiers into the publisher
2026-11-01 20:15:42 +01:00
evgeny
61663e261d
Keep capture lifecycle diagnostics in the video category
2026-11-01 20:15:03 +01:00
evgeny
cf356ee647
Refresh capture devices through IPC and diagnose unexpected backend stops
2026-11-01 20:14:07 +01:00
evgeny
8faaa34e24
Complete capture API migration and cancel prelaunch stop requests
2026-11-01 20:13:07 +01:00
evgeny
939f33773b
Verify capture timeout diagnostics and large-frame ownership
2026-11-01 20:11:12 +01:00
evgeny
b34825cda0
Exercise hung capture stop and destruction without blocking publisher GUI
2026-11-01 20:10:31 +01:00
evgeny
4ab0be1882
Test stream UI with process-owned sources and CPU previews
2026-11-01 20:08:58 +01:00
evgeny
a02465217b
Keep capture completion observable and retain session ownership through stop
2026-11-01 20:08:01 +01:00
evgeny
eed07cb358
Feed publisher CPU frames and decouple FIN from capture teardown
2026-11-01 20:06:56 +01:00
evgeny
5256dfa8c5
Use shared capture worker for calls and build screen backends there
2026-11-01 20:04:50 +01:00
evgeny
e299a9b30b
Isolate screen capture lifecycle and report worker close stages
2026-11-01 20:04:13 +01:00
evgeny
48998b440f
Extract shared video capture process contracts
2026-11-01 20:02:12 +01:00
evgeny
e384d4cf3d
Add desktop network traffic graphs and unify microphone icons
2026-11-01 14:45:01 +01:00
evgeny
3dff681ff0
Unify channel action icons and add a drawn settings gear
2026-11-01 10:54:41 +01:00
evgeny
a77a41f068
Refine composer icons with consistent vector outlines
2026-11-01 10:29:16 +01:00
evgeny
46b3296a36
Match composer microphone and attachment icons to Android
2026-11-01 10:10:49 +01:00
evgeny
c889928e52
Show FFmpeg driver errors when hardware encoding fails
2026-11-01 08:24:43 +01:00
evgeny
d8db018166
Focus the message input when the chat window is activated
2026-11-01 05:49:06 +01:00
evgeny
4e3c1182db
Offer JPEG and PNG clipboard attachments with automatic selection
2026-10-31 22:30:57 +01:00
evgeny
4d30fa6bcc
Support pasting clipboard images as PNG attachments
2026-10-31 22:13:11 +01:00
evgeny
c8012d35f1
Limit ETCP TCP link MTU to 1500 bytes
2026-10-31 21:35:10 +01:00
evgeny
57168e4a16
Update startup regression for skipped automatic TCP listeners
2026-10-31 20:12:08 +01:00
evgeny
c8388ba8ba
Cover IPv6 bind failure and offline startup in socket regressions
2026-10-31 20:08:26 +01:00
evgeny
84e26dcf00
Test automatic socket failures and recovery without startup rollback
2026-10-31 20:07:16 +01:00
evgeny
60af36902c
Skip unavailable automatic sockets and retain working transports
2026-10-31 20:06:17 +01:00
evgeny
4f2ad13e39
Preserve socket bind errors through resource cleanup
2026-10-31 20:05:46 +01:00
evgeny
5b531ddae7
Improve Android proximity settings and channel scanner layout
2026-10-31 18:29:09 +01:00
evgeny
2c89490794
Cover maximized media restoration and destruction during playback
2026-10-31 18:03:26 +01:00
evgeny
4764a7dd23
Restore the normal media rectangle explicitly when leaving fullscreen
2026-10-31 18:02:16 +01:00
evgeny
8ab294fb30
Fit media frames inside monitors and close video before widget teardown
2026-10-31 18:01:41 +01:00
evgeny
703f4a4a60
Keep complete diagnostics for media monitor restoration failures
2026-10-31 18:00:16 +01:00
evgeny
68065d4a79
Document viewer geometry ownership and gate the offscreen monitor fixture
2026-10-31 17:58:34 +01:00
evgeny
6a1b7c5363
Verify media geometry survives restarts on each physical monitor
2026-10-31 17:57:56 +01:00
evgeny
db1c2f0da7
Test cached media geometry and stable video windows across file loads
2026-10-31 17:56:34 +01:00
evgeny
c0d5aac41c
Use explicit wide bounds when restoring media coordinates
2026-10-31 17:55:06 +01:00
evgeny
2a0374e2ae
Persist shared chat media geometry and the physical monitor per profile
2026-10-31 17:53:16 +01:00
evgeny
1d9570e38b
Keep video playback geometry and use the actual fullscreen state
2026-10-31 17:51:48 +01:00
evgeny
74d95bc9c4
Preserve shared PTT ownership on panel cleanup and avoid repeated reset logs
2026-10-31 17:32:25 +01:00
evgeny
165f5e6c63
Test the shared lock indicator and unlocking PTT across input sources
2026-10-31 17:32:13 +01:00
evgeny
d25d097287
Let the hotkey toggle the common PTT latch without a second latch state
2026-10-31 17:31:24 +01:00
evgeny
3d0f3213f8
Display and release the shared PTT latch from the radio button
2026-10-31 17:30:54 +01:00
evgeny
febaf3d350
Store the shared button and keyboard PTT latch in the radio engine
2026-10-31 17:30:38 +01:00
evgeny
4b23fa2b63
Verify hotkey double-press preference survives reopening settings
2026-10-31 17:22:02 +01:00
evgeny
80935eb2a5
Exercise global PTT polling and checkbox independence under X11
2026-10-31 17:21:03 +01:00
evgeny
99f4121a31
Translate the single PTT hotkey and double-press option
2026-10-31 17:20:25 +01:00
evgeny
83f16d8dcd
Cover single portal assignment and optional hotkey locking
2026-10-31 17:19:56 +01:00
evgeny
d1a62c51ef
Persist optional double-press locking for the radio hotkey
2026-10-31 17:19:23 +01:00
evgeny
11e9946549
Show one radio shortcut and a hotkey double-press checkbox
2026-10-31 17:19:11 +01:00
evgeny
497ecd5d15
Register one Wayland PTT shortcut and reset latches on session changes
2026-10-31 17:17:31 +01:00
evgeny
239c4f7a7a
Use one global PTT shortcut with double-press latching
2026-10-31 17:17:04 +01:00
evgeny
a708e9494a
Add single PTT hotkey hold and double-press state
2026-10-31 17:16:30 +01:00
evgeny
170ccf5db6
Fix Windows camera error encoding and add camera context
2026-10-31 16:08:44 +01:00
evgeny
a7da1e3286
Preserve Windows camera error text with UTF-8 code page
2026-10-31 15:35:46 +01:00
evgeny
db414a0042
Record successful Windows BLE GATT profile radio probe
2026-10-31 14:38:09 +01:00
evgeny
51a0e3f9f2
Use one GATT advertisement and read full BLE node profiles
2026-10-31 14:35:37 +01:00
evgeny
5d265dbd28
Cancel queued Android BLE sends after link closure
2026-10-31 12:20:47 +01:00
evgeny
f3813b1a56
Show available receive buffer headroom in call audio graphs
2026-10-31 10:48:06 +01:00
evgeny
ee0c92b9d8
Fix delayed router epoch confirmation and collapse duplicate BLE links
2026-10-31 10:22:22 +01:00
evgeny
0915c8ad2e
Stabilize call batching and sole BLE retransmission timing
2026-10-31 09:12:18 +01:00
evgeny
92a58fe285
Speed up Windows installer compression
2026-10-31 01:03:03 +01:00
evgeny
2d92a003fc
Keep connection property changes from refreshing BLE discovery
2026-10-31 00:53:11 +01:00
evgeny
2c2fd09323
Seed cached BlueZ service identities without refreshing discovery age
2026-10-31 00:51:54 +01:00
evgeny
17c22eb562
Verify one BlueZ advertisement and independent visibility and admission
2026-10-31 00:40:59 +01:00
evgeny
d00a642c49
Define BLE v5 visibility, admission and bounded publication contracts
2026-10-31 00:37:11 +01:00
evgeny
5deb6de7ee
Verify canonical UUID conversion across WinRT GUID byte order
2026-10-31 00:36:16 +01:00
evgeny
67a76b4119
Test and probe Windows single-provider discovery lifecycle
2026-10-31 00:35:56 +01:00
evgeny
de600c56e9
Bind BlueZ discovery and characteristic selection to node service UUIDs
2026-10-31 00:35:23 +01:00
evgeny
8a5a423da9
Use a single connectable node service advertisement on Windows
2026-10-31 00:33:44 +01:00
evgeny
0b66ec27d2
Discover and select Android BLE peers by their service UUID
2026-10-31 00:32:26 +01:00
evgeny
1e4fca0b25
Encode BLE node identity in versioned GATT service UUIDs
2026-10-31 00:31:23 +01:00
evgeny
56a24c589f
Document confirmed Windows beacon and GATT addressing mismatch
2026-10-31 00:27:42 +01:00
evgeny
ea98964a89
Log BLE endpoint connectability before Android GATT attempts
2026-10-31 00:23:37 +01:00
evgeny
c200fd0cf2
Record verified invitation fixes for rotated addresses and reused MTU
2026-10-31 00:00:53 +01:00
evgeny
79064380cb
Document verified BLE bootstrap protocol and frame contracts
2026-10-31 00:00:36 +01:00
evgeny
6bb9a9c14d
Verify challenge retries keep the original opening deadline
2026-10-31 00:00:15 +01:00
evgeny
01af2df02b
Accept full GATT RX when reused ACL has unknown TX MTU
2026-10-30 23:58:52 +01:00
evgeny
3124c82bd4
Add reproducible hardware invitation delivery probe
2026-10-30 23:57:29 +01:00
evgeny
563203056d
Cover private address rotation and unrelated connected peers
2026-10-30 23:54:27 +01:00
evgeny
6c947ac057
Reuse connected BlueZ peer across private address rotation
2026-10-30 23:53:59 +01:00
evgeny
e25a8464f2
Bound challenge replacement and test large profiles and cancellation
2026-10-30 23:46:00 +01:00
evgeny
56367d4aef
Adapt JOIN scheduler fixture to explicit authenticated routes
2026-10-30 23:42:05 +01:00
evgeny
616ca3ba99
Exercise authenticated BLE JOIN against tampering and replay
2026-10-30 23:41:18 +01:00
evgeny
a5d7833e16
Test invitation bootstrap without IP and independent INVITE frame limits
2026-10-30 23:40:56 +01:00
evgeny
e88de767ac
Release pending bootstrap routes on channel deletion and expiry
2026-10-30 23:40:21 +01:00
evgeny
8dfb9d373f
Close cancelled bootstrap sessions and permit fresh bounded retries
2026-10-30 23:37:34 +01:00
evgeny
ad8e05c823
Build BLE join carrier in Android native client
2026-10-30 23:36:19 +01:00
evgeny
38c1287b45
Connect BLE bootstrap lifecycle to the shared chat JOIN carrier
2026-10-30 23:36:19 +01:00
evgeny
a290234f8a
Implement bounded authenticated JOIN transport over BLE INVITE
2026-10-30 23:35:28 +01:00
evgeny
135bfe8132
Bound large INVITE frames separately from BLE DATA
2026-10-30 23:34:04 +01:00
evgeny
6344ff2ecb
Share JOIN state machine across ETCP and authenticated carriers
2026-10-30 23:33:57 +01:00
evgeny
8a0cc6f5e1
Add scoped authenticated carrier interface for chat joins
2026-10-30 23:32:47 +01:00
evgeny
44c796a72f
Define authenticated BLE join bootstrap architecture
2026-10-30 23:32:26 +01:00
evgeny
f40f2cba71
Record BLE join bootstrap deadlock after delivered invitation
2026-10-30 23:23:31 +01:00
evgeny
a50af06639
Record BLE invitation diagnosis and remaining initial ACL timeout
2026-10-30 23:19:53 +01:00
evgeny
ce89fd1e2c
Clarify BLE delivery failures and document connection reuse
2026-10-30 23:18:25 +01:00
evgeny
920ea7ae2c
Report failed BLE invitation delivery without success wording
2026-10-30 23:18:13 +01:00
evgeny
13094ae7d6
Reuse connected BlueZ GATT before requesting another bearer
2026-10-30 23:16:15 +01:00
evgeny
eafa1297dd
Fix WinRT test operation interface conversion
2026-10-30 23:06:55 +01:00
evgeny
ca2bebcbd3
Document incoming BLE tuning and refine cancellation test
2026-10-30 23:05:52 +01:00
evgeny
2902602d7f
Tune incoming Windows BLE connections for throughput
2026-10-30 23:05:36 +01:00
evgeny
3b9f503ef3
Record completed link admission checks and the separate invitation listener issue
2026-10-30 22:53:57 +01:00
evgeny
89829ca9b6
Describe admission policy as a property of the Bluetooth link
2026-10-30 22:50:45 +01:00
evgeny
eda5d99530
Test link-local rejection and unrestricted sockets on shared connections
2026-10-30 22:50:23 +01:00
evgeny
16b1003710
Finish removing connection-level policy arguments
2026-10-30 22:50:12 +01:00
evgeny
5eb0701a41
Keep connection construction independent from link admission policy
2026-10-30 22:50:12 +01:00
evgeny
8d6aef37da
Keep connection construction independent from link admission policy
2026-10-30 22:50:11 +01:00
evgeny
510dbc2e15
Keep connection construction independent from link admission policy
2026-10-30 22:50:11 +01:00
evgeny
e09a3f9052
Keep connection construction independent from link admission policy
2026-10-30 22:50:11 +01:00
evgeny
2c1ba2b1c0
Keep connection construction independent from link admission policy
2026-10-30 22:50:10 +01:00
evgeny
a5299749fb
Keep connection construction independent from link admission policy
2026-10-30 22:50:10 +01:00
evgeny
dcc7e2f8d7
Make authenticated known-key admission strictly local to each link
2026-10-30 22:49:59 +01:00
evgeny
fd05e13525
Remove peer admission policy from shared ETCP connections
2026-10-30 22:49:59 +01:00
evgeny
847fedeac7
Verify encrypted UTUN socket handshakes on BLE-origin shared connections
2026-10-30 22:47:39 +01:00
evgeny
9e01b910ce
Document socket policy isolation and prepare native handshake regression
2026-10-30 22:47:14 +01:00
evgeny
80e85bbec6
Keep UTUN socket admission independent from shared BLE connection defaults
2026-10-30 22:46:46 +01:00
evgeny
20e0f6581a
Reject restricted paths on existing connections without closing other transports
2026-10-30 22:43:35 +01:00
evgeny
6a7940450e
Clarify constructor admission requirements and keep helper below includes
2026-10-30 22:42:50 +01:00
evgeny
6d9ef7383c
Recheck peer admission during session handshake and document BLE policy
2026-10-30 22:42:02 +01:00
evgeny
8d92144a5a
Test known-key admission, revoked members and unknown invitation-only peers
2026-10-30 22:41:13 +01:00
evgeny
ed98ce169e
Apply known-peer policy to desktop BLE while keeping explicit hardware probes
2026-10-30 22:40:16 +01:00
evgeny
612b263891
Keep unknown BLE keys in invitation-only mode before ETCP admission
2026-10-30 22:39:59 +01:00
evgeny
3af6ff4961
Specify explicit admission policy in existing ETCP constructors
2026-10-30 22:39:38 +01:00
evgeny
78613d62b5
Specify explicit admission policy in existing ETCP constructors
2026-10-30 22:39:38 +01:00
evgeny
0ff1dc4f66
Specify explicit admission policy in existing ETCP constructors
2026-10-30 22:39:37 +01:00
evgeny
091a1dc053
Specify explicit admission policy in existing ETCP constructors
2026-10-30 22:39:37 +01:00
evgeny
113949083b
Specify explicit admission policy in existing ETCP constructors
2026-10-30 22:39:37 +01:00
evgeny
42bb813ee5
Specify explicit admission policy in existing ETCP constructors
2026-10-30 22:39:37 +01:00
evgeny
0850a52180
Check known peer keys after authenticated transport handshake before UP
2026-10-30 22:39:09 +01:00
evgeny
90f70f2b72
Preserve per-link admission policy for shared ETCP connections
2026-10-30 22:38:52 +01:00
evgeny
afa834a02d
Require known peer admission as an ETCP connection creation policy
2026-10-30 22:38:51 +01:00
evgeny
14e61c68ce
Keep known-peer admission policy in the topology module
2026-10-30 22:38:36 +01:00
evgeny
2d054591d5
Validate peer keys against full active group member records
2026-10-30 22:38:36 +01:00
evgeny
8f28adeb0f
Record missing BLE incoming group-member admission checks
2026-10-30 22:32:52 +01:00
evgeny
541325c17a
Explain BLE advertisement visibility in Android settings
2026-10-30 22:27:51 +01:00
evgeny
55a6abfac5
Explain Bluetooth group connections and unrestricted invitations
2026-10-30 22:26:43 +01:00
evgeny
85be60d716
Enable the three Android BLE connection flags by default
2026-10-30 22:26:43 +01:00
evgeny
bb99796140
Verify monitoring enable, disable and endpoint validation contracts
2026-10-30 22:23:15 +01:00
evgeny
168f3e9d97
Add a default-off monitoring switch and conditional endpoint fields
2026-10-30 22:23:15 +01:00
evgeny
f6009d3070
Persist optional Android monitoring endpoints into native configuration
2026-10-30 22:23:15 +01:00
evgeny
baf58a7971
Record missing Android monitoring configuration wiring
2026-10-30 22:18:42 +01:00
evgeny
6db34b558a
Remove the unused Android node listen port preference
2026-10-30 22:18:42 +01:00
evgeny
5bb0df82b6
Clarify Android developer settings labels and warning
2026-10-30 22:18:42 +01:00
evgeny
8f1ede0344
Show the selected Android settings section in the header
2026-10-30 22:12:20 +01:00
evgeny
d4a2dac903
Reuse the chat portable radio icon in Android settings
2026-10-30 22:11:55 +01:00
evgeny
bd453311ac
Use labeled icons for Android settings section tabs
2026-10-30 22:09:05 +01:00
evgeny
9f59e0968e
Update call UI checks and document the unified diagnostics window
2026-10-30 21:51:50 +01:00
evgeny
b08161b055
Unify call graphs and metrics behind the Diagnostics action
2026-10-30 21:51:32 +01:00
evgeny
ad21c49d8f
Place call graph canvas alongside a resizable diagnostic text pane
2026-10-30 21:51:10 +01:00
evgeny
aa9c3beece
Clarify transport summary counters and initial diagnostic baseline
2026-10-30 21:50:11 +01:00
evgeny
2de735f3ff
Include route retransmissions and window without creating diagnostic channels
2026-10-30 21:49:15 +01:00
evgeny
da1b4839ea
Verify diagnostic cadence, filtering and full buffer log delivery
2026-10-30 21:48:43 +01:00
evgeny
97934de381
Test independent log intervals and document diagnostic units
2026-10-30 21:48:17 +01:00
evgeny
5bc6350cc0
Report call route queues and ACK progress at 200ms cadence
2026-10-30 21:47:55 +01:00
evgeny
110b71d17f
Share the diagnostic cadence and clamp concurrent pull timestamp skew
2026-10-30 21:47:55 +01:00
evgeny
15d44165da
Log audio buffer health every 200ms outside playback locks
2026-10-30 21:47:15 +01:00
evgeny
ff992bcd40
Expose bounded audio log snapshots without consuming playback events
2026-10-30 21:46:53 +01:00
evgeny
d05aed35f9
Collect exact playback intervals independently from graph history
2026-10-30 21:46:53 +01:00
evgeny
2cd3f966b2
Document fresh CCC preparation and finalize reconnect regression
2026-10-30 21:43:26 +01:00
evgeny
752a3a7d95
Prepare WinRT subscriptions afresh and test BlueZ session replacement
2026-10-30 21:41:38 +01:00
evgeny
68444ef192
Fix BLE subscription reset and incoming session replacement on reconnect
2026-10-30 21:41:13 +01:00
evgeny
88436cde0e
Package audio history headers and record outdated call fixtures
2026-10-30 21:31:50 +01:00
evgeny
476ab1b840
Preserve recorded traffic rates as the history window advances
2026-10-30 21:30:52 +01:00
evgeny
8e6efd2b00
Keep graph extrema readable and validate accepted packet counters
2026-10-30 21:27:46 +01:00
evgeny
015e8b75d7
Localize Android audio history graph labels and units
2026-10-30 21:25:11 +01:00
evgeny
ca7d64ac2b
Add stacked live audio graphs to the Android call screen
2026-10-30 21:25:11 +01:00
evgeny
141148611f
Expose shared audio and transmission history to Android
2026-10-30 21:25:11 +01:00
evgeny
355604a862
Document graph measurement boundaries and improve label contrast
2026-10-30 21:23:54 +01:00
evgeny
b760cef460
Test audio graph lifecycle, throughput path changes and accepted send accounting
2026-10-30 21:22:12 +01:00
evgeny
ef0af0dd5e
Localize desktop audio graph labels and measurement units
2026-10-30 21:18:30 +01:00
evgeny
2406ff0f11
Open audio graphs from the desktop call controls
2026-10-30 21:18:19 +01:00
evgeny
d1897bd6e6
Add stacked desktop audio history, queue, throughput and histogram plots
2026-10-30 21:18:01 +01:00
evgeny
9d88f63062
Calculate path-aware ETCP throughput over a sliding one second window
2026-10-30 21:15:21 +01:00
evgeny
490515b7c2
Capture call path traffic alongside aggregate transmission queues
2026-10-30 21:14:05 +01:00
evgeny
65f0c62a23
Expose selected Router path traffic counters without borrowing live connections
2026-10-30 21:13:57 +01:00
evgeny
055dd3ada0
Count accepted ETCP wire bytes per connection including control and retries
2026-10-30 21:13:57 +01:00
evgeny
9c8088ac8d
Record aggregate Router and transport histories and verify weighted audio statistics
2026-10-30 21:12:20 +01:00
evgeny
1f974e8244
Expose shared call history snapshots to frontends and queue sampling
2026-10-30 21:11:51 +01:00
evgeny
1b566ddbe5
Collect call audio buffer history independently of visible diagnostics
2026-10-30 21:11:18 +01:00
evgeny
09199cc46b
Add bounded shared audio history and time weighted histogram snapshots
2026-10-30 21:11:05 +01:00
evgeny
e43f95ea83
Keep startup defaults and reset reserve snapshots consistent
2026-10-30 20:05:23 +01:00
evgeny
a7bb72a0b7
Replenish playout reserve smoothly and account for packet cadence in delay control
2026-10-30 20:03:49 +01:00
evgeny
0c20766cfe
Gate startup on published PCM and test recovery beyond the initial reserve
2026-10-30 19:57:25 +01:00
evgeny
b092e09b43
Adapt call batching to queue pressure and verify protected audio startup
2026-10-30 19:54:58 +01:00
evgeny
1960377e5c
Prime desktop speech PCM before enabling device consumption
2026-10-30 19:52:56 +01:00
evgeny
a3a54af0fe
Define protected call startup reserve and explicit queued renderer readiness
2026-10-30 19:52:40 +01:00
evgeny
dff64e2871
Account for the completed audio batch in the video barrier fixture
2026-10-30 19:31:29 +01:00
evgeny
efd80949cd
Document adaptive full batches and Router readiness ownership
2026-10-30 19:30:12 +01:00
evgeny
215f744bbe
Verify adaptive batch targets and reject partial sends on a free transport
2026-10-30 19:29:06 +01:00
evgeny
6ae080d417
Require the adaptive frame count before requesting or using a Router slot
2026-10-30 19:28:22 +01:00
evgeny
ee5c258b3c
Preserve adaptive audio batch target without partial-packet deadlines
2026-10-30 19:28:21 +01:00
evgeny
e598568652
Trigger actual lower queue drain in producer readiness test
2026-10-30 19:26:24 +01:00
evgeny
ffa1208cb6
Make producer window test independent of min-RTT probing
2026-10-30 19:25:11 +01:00
evgeny
20b3116e7c
Cover lazy Router producers and audio batching under backpressure
2026-10-30 19:24:24 +01:00
evgeny
74eb935589
Remove obsolete audio batch delay controller
2026-10-30 19:21:46 +01:00
evgeny
e3764991d4
Build call audio batches only when Router grants a send slot
2026-10-30 19:21:29 +01:00
evgeny
273eabbc6e
Add cancellable Router send requests at transport readiness
2026-10-30 19:20:17 +01:00
evgeny
2d4b2f10a6
Keep BLE candidate monitoring separate from IP probes
2026-10-30 19:15:17 +01:00
evgeny
ca04b098f8
Keep all call streams alive during router recovery and verify RTT ambiguity handling
2026-10-30 18:53:53 +01:00
evgeny
34cbdc3cde
Test conservative router recovery and recover lost receive-resume acknowledgements
2026-10-30 18:52:25 +01:00
evgeny
8f5882081f
Separate router DATA recovery timers and add adaptive retransmission backoff
2026-10-30 18:49:47 +01:00
evgeny
d1886be6f4
Request maximum BLE advertising power and display radio power status
2026-10-30 18:15:37 +01:00
evgeny
8a02704f8b
Document BLE startup sequencing and honor publication deadline
2026-10-30 17:55:26 +01:00
evgeny
e81fe7030a
Cover initial BLE publication and preserve radio diagnostics
2026-10-30 17:54:14 +01:00
evgeny
77979c4058
Start Windows BLE publisher before GATT and sequence updates
2026-10-30 17:52:42 +01:00
evgeny
4eefe43053
Pass desktop BLE identity to transport before startup
2026-10-30 17:50:32 +01:00
evgeny
df23626c47
Remove system stall investigation from task list
2026-10-30 17:39:09 +01:00
evgeny
3eb9c46985
Add configurable Opus burst batches for radio transmission
2026-10-30 17:38:43 +01:00
evgeny
049c8ef155
Improve BLE call batching, startup buffering and diagnostics
2026-10-30 16:44:52 +01:00
evgeny
0afccfb624
Probe Windows BLE publisher startup before GATT advertising
2026-10-30 12:55:11 +01:00
evgeny
77edf2bcf7
Show BLE receive counts below Android device nicknames
2026-10-30 12:48:18 +01:00
evgeny
6e53490cdd
Add Android text for BLE broadcast receive counts
2026-10-30 12:48:18 +01:00
evgeny
7cd78e9210
Verify BLE neighbor counters without changing invitation fixtures
2026-10-30 12:47:51 +01:00
evgeny
184b02b342
Show per-device BLE receive counts in desktop rows
2026-10-30 12:46:27 +01:00
evgeny
49cbb7e148
Keep BLE counters tied to neighbor table entries
2026-10-30 12:45:56 +01:00
evgeny
d86599995c
Count received BLE advertisements over each neighbor lifetime
2026-10-30 12:45:18 +01:00
evgeny
0907395779
Document Windows 1809 advertising probe stop acknowledgement
2026-10-30 12:39:42 +01:00
evgeny
8aa4330c72
Handle requested GATT stop in Windows advertising probe
2026-10-30 12:39:17 +01:00
evgeny
ace0ce3e85
Test and document Windows BLE radio status diagnostics
2026-10-30 12:18:19 +01:00
evgeny
3e1d1ddbfd
Add Windows BLE advertising resource diagnostics
2026-10-30 12:17:19 +01:00
evgeny
4083865c6f
Add the legacy BLE example as a reference
2026-10-30 12:12:53 +01:00
evgeny
e6c35bc858
Compact Android Bluetooth devices into two-line rows
2026-10-30 12:07:30 +01:00
evgeny
22d8d872c4
Translate Android Bluetooth device list status messages
2026-10-30 11:54:11 +01:00
evgeny
1cbf63e053
Add the Android nearby Bluetooth device list
2026-10-30 11:54:11 +01:00
evgeny
050b2f6d05
Batch Windows installer staging and license queries
2026-10-30 11:44:06 +01:00
evgeny
f87f70489a
Show Bluetooth addresses in the desktop device list
2026-10-30 11:26:29 +01:00
evgeny
eeb2373599
Keep BLE discovery summaries at ten-second intervals
2026-10-30 11:21:04 +01:00
evgeny
2a19c08d62
Report WinRT scan filters and prolonged publisher waiting
2026-10-30 11:11:40 +01:00
evgeny
cd62ea0b6e
Log BLE discovery decisions and cumulative receive counters
2026-10-30 11:09:54 +01:00
evgeny
f7f3636032
Expose precise BLE identity rejection reasons
2026-10-30 11:08:29 +01:00
evgeny
359c6bc843
Reuse PE cache during packaging and test installer completeness
2026-10-30 11:00:08 +01:00
evgeny
0bee366d6b
Share cached PE imports and architecture with Windows packaging
2026-10-30 10:59:04 +01:00
evgeny
8617405464
Merge origin/master preserving BLE wire v4 and Windows 1809 support
2026-10-30 10:55:16 +01:00
evgeny
1e6a766347
Cache Windows ChatGUI runtime imports and deployment
2026-10-30 10:52:51 +01:00
evgeny
7d0c394091
Document Windows 1809 BLE cache lookup and diagnostics
2026-10-30 10:31:25 +01:00
evgeny
64770b579d
Support WinRT BLE discovery and connection on Windows 1809
2026-10-30 10:30:22 +01:00
evgeny
e1e3c9cfde
Document unconfirmed BLE acknowledgements and measured latency limits
2026-10-30 04:54:47 +01:00
evgeny
51795a558c
Log invalid BLE probe payload and pacing arguments
2026-10-30 04:48:37 +01:00
evgeny
51d2231ac7
Keep BLE probe packet cadence on absolute deadlines
2026-10-30 04:42:24 +01:00
evgeny
fc020f4f05
Measure BLE ETCP echo latency with paced small packets
2026-10-30 04:39:05 +01:00
evgeny
09e045a45d
Use unconfirmed BLE ACK writes and notifications on Android
2026-10-30 04:39:05 +01:00
evgeny
452ab50f9e
Switch WinRT ACK delivery and advertise BLE wire version four
2026-10-30 04:35:42 +01:00
evgeny
d0df49446c
Send BlueZ flow acknowledgements without ATT responses
2026-10-30 04:35:12 +01:00
evgeny
e0076d5d10
Repeat cumulative BLE acknowledgements after unreliable delivery
2026-10-30 04:34:54 +01:00
evgeny
008bafc18a
Cover lost cumulative BLE acknowledgements with full duplex windows
2026-10-30 04:34:10 +01:00
evgeny
f4bcc6eae9
Log BLE packet sequences and acknowledgements in debug category
2026-10-30 04:31:55 +01:00
evgeny
97b18caa1f
Revert "Log the exact reason and lifetime of rejected call invites"
...
This reverts commit 55637c296f80f016f0a29f54aaa7aaf742b92443.
2026-10-30 04:31:55 +01:00
evgeny
6a2e552194
Log the exact reason and lifetime of rejected call invites
2026-10-30 04:31:55 +01:00
evgeny
93672ae95e
Fix desktop BLE mock signature for wire channels
2026-10-29 22:53:35 +01:00
evgeny
ae1d149545
Merge branch 'master' of http://git.syqiq.tech/jeka/utun2
2026-10-29 22:43:06 +01:00
evgeny
33a3774938
Require BLE probe publication and document WinRT diagnostics
2026-10-29 22:42:36 +01:00
evgeny
dd80f589fa
Record successful BLE ACK loads in both connection roles
2026-10-29 22:39:54 +01:00
evgeny
4a7f3253f6
Test WinRT BLE exception isolation and pending shutdown
2026-10-29 22:39:15 +01:00
evgeny
dc70174af9
Preserve WinRT BLE event context and diagnose API failures
2026-10-29 22:38:08 +01:00
evgeny
552f7b31b0
Record ACK scheduling regression and successful desktop load
2026-10-29 22:36:14 +01:00
evgeny
b1a272fa23
Clarify BLE ACK spacing after local completion
2026-10-29 22:33:17 +01:00
evgeny
d5505c054f
Reserve the ACK interval after completion for payload traffic
2026-10-29 22:31:17 +01:00
evgeny
c52afe4f41
Give DATA a slot between slow cumulative BLE ACKs
2026-10-29 22:29:46 +01:00
evgeny
b7e0b1f12c
Reproduce DATA starvation behind slow BLE ACK completion
2026-10-29 22:29:32 +01:00
evgeny
c83b30aa0b
Document BLE v3 ACK framing and bounded remote credit
2026-10-29 22:26:34 +01:00
evgeny
6338a2aae1
Open both fake GATT endpoints before delivering HELLO
2026-10-29 22:22:35 +01:00
evgeny
358c3093dd
Refresh WinRT subscriptions before the first incoming value
2026-10-29 22:21:51 +01:00
evgeny
fabf0c1663
Reject BLE values before all mandatory subscriptions
2026-10-29 22:21:12 +01:00
evgeny
4016e6b73c
Include BLE credit events in the existing wire trace
2026-10-29 22:19:43 +01:00
evgeny
c43726c17d
Verify BLE ACK timeout independently of local completion
2026-10-29 22:17:57 +01:00
evgeny
b31b772e66
Delay remote ACK delivery independently in the BLE fixture
2026-10-29 22:16:46 +01:00
evgeny
46f2137f06
Keep BLE fault injection correct with prefixed fragments
2026-10-29 22:16:08 +01:00
evgeny
d33b67d87c
Test BLE remote credit, ACK timing, duplex and ID wrap
2026-10-29 22:15:32 +01:00
evgeny
85977d97e0
Verify mandatory ACK subscriptions and addressed BlueZ ACKs
2026-10-29 22:13:46 +01:00
evgeny
d4182c22cd
Connect the ACK characteristic to Android GATT and JNI
2026-10-29 22:13:46 +01:00
evgeny
e7adcbe139
Support the BLE ACK characteristic in WinRT
2026-10-29 22:11:46 +01:00
evgeny
dd1769ee4c
Adapt BLE identity and ETCP fixtures to the ACK profile
2026-10-29 22:10:40 +01:00
evgeny
cecdbbe1d7
Add the mandatory ACK characteristic to BlueZ
2026-10-29 22:10:24 +01:00
evgeny
4e38536a55
Bound BLE DATA flight with cumulative 16-bit ACKs
2026-10-29 22:09:12 +01:00
evgeny
be0dff7b2c
Define the BLE ACK wire channel and fixed flight budget
2026-10-29 22:08:29 +01:00
evgeny
e194535b25
Record RTO validation and remaining BLE throughput work
2026-10-29 21:39:31 +01:00
evgeny
635e1726e6
Document BLE readiness fixes and remaining HCI queue delay
2026-10-29 21:37:40 +01:00
evgeny
55bb052406
Model accepted sends in the ETCP lifecycle fixture
2026-10-29 21:34:02 +01:00
evgeny
0f2794cd51
Format the RTT growth regression cases consistently
2026-10-29 21:25:46 +01:00
evgeny
a9bec81328
Let ETCP retransmission timeouts cover measured RTT above one second
2026-10-29 21:18:52 +01:00
evgeny
5b2e11337c
Use the native BLE discovery version in Android scan filters
2026-10-29 20:47:48 +01:00
evgeny
285a242d2a
Version BLE discovery for unacknowledged DATA compatibility
2026-10-29 20:39:20 +01:00
evgeny
b5fb6b0f4d
Ignore cached BlueZ advertisements when discovering live BLE peers
2026-10-29 20:29:55 +01:00
evgeny
8081f94ebe
Record BLE negotiation evidence and retry pre-transfer radio connections
2026-10-29 20:29:09 +01:00
evgeny
05d78c9960
Add a controlled Android scan pause to the manual BLE probe
2026-10-29 20:14:51 +01:00
evgeny
8ab25c1389
Request high BLE priority for incoming Android links on the shared ACL
2026-10-29 19:58:40 +01:00
evgeny
7dab663b93
Preserve incoming disconnect handling and exercise resolved-service notification
2026-10-29 19:50:44 +01:00
evgeny
51621e6240
Wait for resolved BlueZ services before opening cached GATT characteristics
2026-10-29 19:45:27 +01:00
evgeny
083495986e
Document HCI queue delays and explain incompatible GATT properties
2026-10-29 19:10:13 +01:00
evgeny
b5b522b732
Log ETCP control submission failures and WinRT error codes
2026-10-29 19:00:53 +01:00
evgeny
c5711b5974
Preserve Android BLE failure status and callback diagnostics
2026-10-29 19:00:11 +01:00
evgeny
de6e2ada0c
Report BLE frame gaps and preserve BlueZ I/O errors
2026-10-29 18:56:50 +01:00
evgeny
8811276ca8
Trace BLE frame delivery and authenticated packet dispatch
2026-10-29 18:46:00 +01:00
evgeny
33b4f0acc8
Record BLE throughput results and harden the hardware probe
2026-10-29 18:38:11 +01:00
evgeny
3def3f5af2
Use unacknowledged BLE DATA and request faster connections
2026-10-29 18:28:05 +01:00
evgeny
9382abb6e6
Fix Windows system library dependencies for uasync
2026-10-29 17:46:18 +01:00
evgeny
5152b17114
Fix BLE link display and remove obsolete tool projects
2026-10-29 17:10:39 +01:00
evgeny
f84622966e
Add BLE ETCP links and GATT invitations for desktop and Android
...
Attach packet drivers to initially empty ETCP connections. Share BLE neighbor
tracking and group fallback between desktop and Android in cgathui_common.
Deliver join links through a dedicated Write/Indicate characteristic with
independent fragmentation queues, application acknowledgements, deduplication
and bounded retries. Merge LAN/BLE discovery and add a separate Bluetooth
invitation reception setting to both clients.
Validation: 230 core tests, BLE transport/BlueZ/UI tests, ASAN/UBSAN,
Linux GUI and Android builds, and Windows backend cross-compilation.
Physical Android/Linux invitation exchange passed with either GATT initiator.
The Android-initiated run also verified all 32 ETCP packets of 1500 bytes;
the desktop-initiated load run reached 7/32 within its 45-second time limit.
2026-10-29 16:41:04 +01:00
evgeny
ef6a5673bd
Preserve member connection state when its refresh fails
2026-10-29 14:02:25 +01:00
evgeny
05ea602a3a
Distinguish failed member-link snapshots from confirmed disconnection
2026-10-29 14:02:25 +01:00
evgeny
a4c7899ffb
Keep native member query failures distinct from valid empty snapshots
2026-10-29 14:02:25 +01:00
evgeny
0878947e13
Describe Android view-model snapshots and application-owned configuration
2026-10-29 14:00:16 +01:00
evgeny
2460e810d6
Document asynchronous BLE detach and report probe cleanup failures
2026-10-29 13:59:14 +01:00
evgeny
0f03aa8b5c
Align Android architecture with serialized lifecycle and Bluetooth ownership
2026-10-29 13:56:57 +01:00
evgeny
f1f113a5f2
Describe readiness recovery when a rejected restart retains the core
2026-10-29 13:56:57 +01:00
evgeny
0800fd61a7
Retry failed BLE SDK releases and propagate radio command rejection
2026-10-29 13:54:52 +01:00
evgeny
5410c4c6c6
Retain BLE cleanup ownership until each Android release succeeds
2026-10-29 13:53:22 +01:00
evgeny
6c7f5b7032
Apply Bluetooth flag changes atomically without replacing concurrent selections
2026-10-29 13:53:22 +01:00
evgeny
8dc10bb54f
Keep Bluetooth settings writes alive and contain Android launch failures
2026-10-29 13:51:59 +01:00
evgeny
ae4f524448
Observe confirmed Bluetooth preferences from the application owner
2026-10-29 13:51:58 +01:00
evgeny
1651d1b870
Document native ownership and reject media creation during core cleanup
2026-10-29 13:50:21 +01:00
evgeny
4a5a8cf057
Keep malformed events and deleted database state out of Android UI
2026-10-29 13:49:57 +01:00
evgeny
c5879042fb
Validate complete channel event frames before publishing state
2026-10-29 13:49:00 +01:00
evgeny
d636a03928
Test restart readiness recovery and explicit UTF-8 database cleanup
2026-10-29 13:39:58 +01:00
evgeny
132e222415
Resume retained core owners and observe unexpected service loss
2026-10-29 13:35:42 +01:00
evgeny
791ff42547
Keep database reset atomic and owned beyond the activity lifecycle
2026-10-29 13:35:42 +01:00
evgeny
665137314a
Serialize native lifecycle mutations and renew readiness across restart
2026-10-29 13:35:42 +01:00
evgeny
0568d263e0
Reject fresh radio and publisher owners during core cleanup
2026-10-29 13:35:42 +01:00
evgeny
044ff034a6
Await radio and shared audio release before native core teardown
2026-10-29 13:35:42 +01:00
evgeny
ea67b491f9
Show private conversation start failures and test stale confirmation isolation
2026-10-29 13:35:41 +01:00
evgeny
321a2c3ed7
Match private conversation confirmations before opening the requested peer
2026-10-29 13:35:41 +01:00
evgeny
69ae8b57cb
Bind private conversation start requests to the worker conversation ID
2026-10-29 13:35:41 +01:00
evgeny
c1ad35e152
Persist channel mute consistently and own panel preference changes
2026-10-29 13:35:41 +01:00
evgeny
fb696d0d56
Report rejected core actions and log nickname write outcomes
2026-10-29 13:35:41 +01:00
evgeny
3aecc095ff
Return queue rejection for invite and private conversation requests
2026-10-29 13:35:41 +01:00
evgeny
da540627fc
Keep accepted commands bound to their instance while restart readiness closes
2026-10-29 13:35:41 +01:00
evgeny
f15ca995b7
Close frontend readiness while a restart is pending and retain failed core state
2026-10-29 13:35:41 +01:00
evgeny
f50310afed
Verify config callback thread attachment and reject truncated database paths
2026-10-29 13:35:41 +01:00
evgeny
20f506fc3c
Contain JNI config failures and validate audio result buffers
2026-10-29 13:35:41 +01:00
evgeny
af776deed6
Keep member snapshots atomic and verify escaped socket names
2026-10-29 13:35:41 +01:00
evgeny
89a4630477
Build complete network JSON snapshots and verify SQL failure recovery
2026-10-29 13:35:41 +01:00
evgeny
05ab3b8054
Return complete channel snapshots and distinguish database errors from empty history
2026-10-29 13:35:41 +01:00
evgeny
57227b331d
Exercise event callback replacement and exceptions on a real JVM
2026-10-29 13:35:41 +01:00
evgeny
2f4cded218
Preserve event callback lifetime and contain JNI delivery exceptions
2026-10-29 13:35:41 +01:00
evgeny
17f79b16cd
Run checked JVM string tests with the Android verification tasks
2026-10-29 13:35:41 +01:00
evgeny
c0a4beeec4
Verify JNI UTF-8 strings against a real JVM with checked JNI
2026-10-29 13:35:41 +01:00
evgeny
86f0ac7625
Route remaining JNI producers through the core task owner
2026-10-29 13:35:41 +01:00
evgeny
95f0e89567
Read JNI database and live network snapshots in the core worker
2026-10-29 13:35:41 +01:00
evgeny
8614ba5428
Use ordinary UTF-8 across JNI strings and test cancelled media ownership
2026-10-29 13:35:41 +01:00
evgeny
72ee8f2586
Release detached voice and PM file payloads when queued work is cancelled
2026-10-29 13:35:41 +01:00
evgeny
57bfadb04c
Retain media request ownership until execution or worker cancellation
2026-10-29 13:35:41 +01:00
evgeny
38ab885609
Expose attachment cancellation as a typed task discard callback
2026-10-29 13:35:41 +01:00
evgeny
f731ac340d
Serialize bridge command publication and report rejected lifecycle requests
2026-10-29 13:35:41 +01:00
evgeny
8374c60b0e
Publish message requests through the worker lifetime owner
2026-10-29 13:35:41 +01:00
evgeny
5a4ddca190
Protect lifecycle producers and leave fatal signals to the platform
2026-10-29 13:35:41 +01:00
evgeny
929df3b6cb
Exercise worker request cancellation against real lifecycle teardown
2026-10-29 13:35:41 +01:00
evgeny
8c0c17270e
Own frontend tasks through worker teardown and marshal synchronous reads
2026-10-29 13:35:41 +01:00
evgeny
d20e112933
Isolate activity cleanup and document startup event ownership
2026-10-29 13:35:41 +01:00
evgeny
b8ccd515dd
Load startup preferences asynchronously and contain service launch errors
2026-10-29 13:35:41 +01:00
evgeny
013ff93406
Load audio and network settings on IO and document persistent change ownership
2026-10-29 13:35:41 +01:00
evgeny
30648086b4
Contain remaining settings loader failures and remove retired UI scopes
2026-10-29 13:35:41 +01:00
evgeny
828b36f290
Keep failed settings teardown retryable and preserve UI until database stop succeeds
2026-10-29 13:35:41 +01:00
evgeny
c5c4d0e588
Load confirmed settings after pending changes and guard invalid audio preferences
2026-10-29 13:35:41 +01:00
evgeny
48564e8ab3
Respect microphone permission callback ownership and test settings disposal
2026-10-29 13:35:19 +01:00
evgeny
b086750cf3
Persist audio settings before runtime updates and release hidden microphone tests
2026-10-29 13:35:19 +01:00
evgeny
eb837206c3
Own radio settings changes and preserve observed state after IO failures
2026-10-29 13:35:19 +01:00
evgeny
61bdf4a6df
Retain observed settings through read failures and retry without default resets
2026-10-29 13:35:19 +01:00
evgeny
e8aeaaf365
Apply developer settings only after accepted persistence completes
2026-10-29 13:35:19 +01:00
evgeny
a9495de90f
Keep settings persistence alive after navigation and guard initial preference loading
2026-10-29 13:35:19 +01:00
evgeny
87166db832
Test settings persistence ownership, ordering and failure isolation
2026-10-29 13:35:19 +01:00
evgeny
a95245e272
Own ordered settings changes independently of the Compose screen
2026-10-29 13:35:19 +01:00
evgeny
299518e866
Preserve confirmed settings and manual socket choices after failures
2026-10-29 13:35:19 +01:00
evgeny
de907c697b
Match temporary IPv6 flags using canonical address bytes
2026-10-29 13:35:19 +01:00
evgeny
268e8794ab
Document process lifetime voice ownership and core shutdown prerequisites
2026-10-29 13:35:19 +01:00
evgeny
d0d63c1d4b
Keep voice cleanup independent of caller cancellation and stop playback promptly
2026-10-29 13:35:19 +01:00
evgeny
48a20cda8c
Reject new capture while an IO teardown holds its lifecycle lock
2026-10-29 13:35:19 +01:00
evgeny
c7356d2a5b
Wait for asynchronous voice cleanup acknowledgement in lifecycle regression test
2026-10-29 13:35:19 +01:00
evgeny
5ee87c535b
Avoid capture-lock acquisition while rolling back a playback worker launch
2026-10-29 13:35:19 +01:00
evgeny
3f2cc2abb3
Verify call preparation waits for voice cleanup and document process barriers
2026-10-29 13:35:19 +01:00
evgeny
41ea2afaaa
Verify explicit native cancellation failure and document independent audio ownership
2026-10-29 13:35:19 +01:00
evgeny
a9099a5ea7
Separate playback controls from blocked capture cleanup and gate stopping cores
2026-10-29 13:35:19 +01:00
evgeny
b25766ae5a
Test retained voice resources, decoder failures and nonblocking disposal
2026-10-29 13:35:19 +01:00
evgeny
bb08b20e58
Wait for voice recording and playback release before call signalling
2026-10-29 13:35:19 +01:00
evgeny
a85d2cc8c7
Retain voice resources after ViewModel disposal and block premature core teardown
2026-10-29 13:35:19 +01:00
evgeny
85af6f5b87
Deliver app events once and isolate failures in independent consumers
2026-10-29 13:35:19 +01:00
evgeny
6916575380
Contain headless foreground, notification and teardown failures
2026-10-29 13:34:26 +01:00
evgeny
d7fb8568b2
Retry core shutdown until pending frontend resources are released
2026-10-29 13:34:26 +01:00
evgeny
1529dfd04b
Document camera finalization ownership and isolate late SDK diagnostics
2026-10-29 13:34:26 +01:00
evgeny
8dd8dc96d7
Verify recorded tracks and handle camera permission and SDK cleanup failures
2026-10-29 13:34:26 +01:00
evgeny
9ac6e4a2f4
Compile track inspection and its SDK boundary in video lifecycle tests
2026-10-29 13:34:26 +01:00
evgeny
fca68080bc
Own recorded video track inspection until extractor release succeeds
2026-10-29 13:34:26 +01:00
evgeny
8a1c77793d
Keep camera caches until finalization and contain recording control failures
2026-10-29 13:34:26 +01:00
evgeny
871acd9383
Test camera writer completion, failed close, binding cleanup and cache transfer
2026-10-29 13:34:26 +01:00
evgeny
09386ee392
Retain camera recording and cache ownership until writer completion
2026-10-29 13:34:26 +01:00
evgeny
3ae8d12434
Keep submission IDs unique across ViewModels and document native cache transfer
2026-10-29 13:34:26 +01:00
evgeny
ab6a10026e
Verify PM voice receipts and document composer and cache ownership
2026-10-29 13:34:26 +01:00
evgeny
3f0c89a6a3
Verify real PM media commit failures, exact receipts and source cleanup
2026-10-29 13:34:26 +01:00
evgeny
6eb865242b
Test video submission validation and retriever cleanup acknowledgements
2026-10-29 13:34:26 +01:00
evgeny
3df64b6744
Use voice commit receipts for both conversation types and document ownership
2026-10-29 13:34:26 +01:00
evgeny
dad127d770
Wait for committed PM media and retain native ownership of accepted cache files
2026-10-29 13:34:26 +01:00
evgeny
2dbc45e63d
Transfer Android ordinary attachment caches to the shared media worker
2026-10-29 13:34:26 +01:00
evgeny
ce80fbcd10
Expose committed PM file results through Android JNI
2026-10-29 13:34:26 +01:00
evgeny
d6eed3e9c9
Specify receipt policy in native DM media callers
2026-10-29 13:34:26 +01:00
evgeny
31e461dca2
Carry voice PM receipts and document shared media completion semantics
2026-10-29 13:34:26 +01:00
evgeny
e943879c50
Carry Android photo and video request IDs through PM preparation
2026-10-29 13:34:26 +01:00
evgeny
4fd5ebf57a
Acknowledge PM media submissions after local commit or preparation failure
2026-10-29 13:34:26 +01:00
evgeny
dae19c06d7
Preserve composer commit receipts and finish message batches after rotation
2026-10-29 13:34:26 +01:00
evgeny
47e997df15
Own composed message batches and receipts beyond Activity lifetime
2026-10-29 13:34:26 +01:00
evgeny
a0c8d5490c
Test atomic JSON snapshots, failure diagnostics and subsequent recovery
2026-10-29 13:34:26 +01:00
evgeny
3eb7f8b0e6
Preserve UI snapshots after parse failure and ignore superseded queries
2026-10-29 13:34:26 +01:00
evgeny
7d67213847
Handle unavailable channel snapshots in Android media consumers
2026-10-29 13:34:26 +01:00
evgeny
4fbb825b9b
Reject partial Android repository snapshots and distinguish query failures
2026-10-29 13:34:26 +01:00
evgeny
e942190b9f
Allow call teardown to defer optional pause when reporter owns the output
2026-10-29 13:34:26 +01:00
evgeny
1097c24d91
Document call signalling barriers and isolate routing diagnostic failures
2026-10-29 13:34:26 +01:00
evgeny
5dffdee8ff
Document nonblocking audio cleanup and keep lifecycle tests on main
2026-10-29 13:34:25 +01:00
evgeny
ff1f7a4bb8
Keep call audio main thread responsive while device workers are blocked
2026-10-29 13:34:25 +01:00
evgeny
314b77242f
Test call route persistence and busy outcome failure isolation
2026-10-29 13:34:25 +01:00
evgeny
236dbd3e84
Contain call notification and route persistence failures
2026-10-29 13:34:25 +01:00
evgeny
7e328b3908
Test rejected call signalling and deferred hangup recovery
2026-10-29 13:34:25 +01:00
evgeny
38e2cc4336
Retain failed call end commands until the worker accepts them
2026-10-29 13:34:25 +01:00
evgeny
1600f5710c
Return explicit queue results for call signalling commands
2026-10-29 13:34:25 +01:00
evgeny
eccf5f451c
Use explicit DM test headers and clarify proximity lifecycle text
2026-10-29 13:34:25 +01:00
evgeny
f5405cdb3d
Verify Android DM commit results and document sensor cleanup retry
2026-10-29 13:34:25 +01:00
evgeny
96166cd3a7
Keep PM drafts until the core confirms persistence
2026-10-29 13:34:25 +01:00
evgeny
d5a1e4b962
Request DM persistence acknowledgement and send canonical UTF-8
2026-10-29 13:34:25 +01:00
evgeny
c5d8307697
Retain proximity registrations after partial SDK failures
2026-10-29 13:34:25 +01:00
evgeny
aa9ca53468
Clarify member update acknowledgement and suppress duplicate downloads
2026-10-29 13:34:25 +01:00
evgeny
e0e97f1c7a
Guard media previews and cancel interrupted voice recording gestures
2026-10-29 13:34:25 +01:00
evgeny
236aeae828
Bound video thumbnails and share retriever cleanup ownership
2026-10-29 13:34:25 +01:00
evgeny
d3e83c3c1a
Guard member editor actions and display unsigned node identifiers
2026-10-29 13:34:25 +01:00
evgeny
2c2d4f3d9d
Validate restored attachment recipients and document conversation UI
2026-10-29 13:34:25 +01:00
evgeny
98d4f903a0
Report channel file export failures and preserve attachment choices
2026-10-29 13:34:25 +01:00
evgeny
666210c3fb
Preserve selected attachment targets and contain composer errors
2026-10-29 13:34:25 +01:00
evgeny
89cf180984
Document local video playback and metadata release contracts
2026-10-29 13:34:25 +01:00
evgeny
e18ecda41e
Fix video fixture ownership and identify playback resource diagnostics
2026-10-29 13:34:25 +01:00
evgeny
8678ace89b
Test local video SDK failures, stale callbacks and release barriers
2026-10-29 13:34:25 +01:00
evgeny
5694f97f12
Add controllable SDK boundaries for local video lifecycle tests
2026-10-29 13:34:25 +01:00
evgeny
7ec46278af
Keep video gesture callbacks current and forbid reads during cleanup
2026-10-29 13:34:25 +01:00
evgeny
fdecfe1b78
Drive video controls from SDK outcomes and preserve paused playback
2026-10-29 13:34:25 +01:00
evgeny
d9661d0f59
Own local video playback resources through confirmed SDK release
2026-10-29 13:34:25 +01:00
evgeny
401edd37b8
Document call view ownership and preserve probe interrupts
2026-10-29 13:34:25 +01:00
evgeny
623344369f
Guard call permission results and release video targets idempotently
2026-10-29 13:34:25 +01:00
evgeny
c8ecf89424
Handle PM document export failures and stale channel dialogs
2026-10-29 13:34:25 +01:00
evgeny
096c1ee2a8
Report probe worker failures and attempt independent SDK cleanup
2026-10-29 13:34:25 +01:00
evgeny
6f5850b9ca
Reject empty codec probe runs and preserve decoder cleanup
2026-10-29 13:34:25 +01:00
evgeny
9383a68f17
Release failed member snapshot requests and validate deletion frames
2026-10-29 13:34:25 +01:00
evgeny
36af8d077f
Handle stream capture permission failures and document preview release
2026-10-29 13:34:25 +01:00
evgeny
45d1b50cb4
Release preview UI leases even without texture destroy callbacks
2026-10-29 13:34:25 +01:00
evgeny
b3f5c49c4d
Keep stream catalogue labels current and preserve viewer errors
2026-10-29 13:34:25 +01:00
evgeny
6f0bc4307f
Document QR task ownership and application license assets
2026-10-29 13:34:25 +01:00
evgeny
f7a80d0a3a
Exercise QR cleanup during pending tasks and SDK failures
2026-10-29 13:34:25 +01:00
evgeny
36328814e6
Compile real QR scanner ownership in video host tests
2026-10-29 13:34:25 +01:00
evgeny
41208833b6
Model asynchronous ML Kit tasks and scanner failures in host tests
2026-10-29 13:34:25 +01:00
evgeny
68997853b2
Add CameraX boundaries for QR resource lifecycle tests
2026-10-29 13:34:25 +01:00
evgeny
857338a386
Retain QR scanner resources through asynchronous task completion
2026-10-29 13:34:25 +01:00
evgeny
dc09332b2e
Share immersive window restoration across stream viewers
2026-10-29 13:34:25 +01:00
evgeny
efe421b162
Restore viewer window state and handle photo decoding errors
2026-10-29 13:34:25 +01:00
evgeny
bd4bd47e00
Recover join dialog after clipboard and connection errors
2026-10-29 13:34:25 +01:00
evgeny
87b7c6f36c
Clarify setup and invitation dialog contracts
2026-10-29 13:34:25 +01:00
evgeny
a4a4707c4a
Describe NAT snapshots and stream buffer indicator limits
2026-10-29 13:34:25 +01:00
evgeny
a442cea1b2
Handle emoji playback failures and clarify image gesture contracts
2026-10-29 13:34:25 +01:00
evgeny
104d70d465
Handle audio device menu launch errors and document UI ownership
2026-10-29 13:34:25 +01:00
evgeny
257df6c520
Describe publisher navigation and video viewport geometry
2026-10-29 13:34:25 +01:00
evgeny
83ba4a03a6
Clarify call banner and status icon presentation contracts
2026-10-29 13:34:25 +01:00
evgeny
a7b3d0fc51
Document Telecom cleanup and confirmed route ownership
2026-10-29 13:34:25 +01:00
evgeny
eaed746934
Verify radio restoration waits for both service and Telecom release
2026-10-29 13:34:25 +01:00
evgeny
e81138e3d1
Await Telecom cleanup before restoring the previous radio session
2026-10-29 13:34:25 +01:00
evgeny
870f1b5914
Clarify Android build modules and handle rejected boot service requests
2026-10-29 13:34:25 +01:00
evgeny
1954c36367
Clarify Telecom ownership and distinguish requested from confirmed cleanup
2026-10-29 13:34:25 +01:00
evgeny
37c72cc2fb
Report the retained service ID after the combined teardown check
2026-10-29 13:34:25 +01:00
evgeny
9f1b09aefe
Verify Telecom cleanup blocks media and new foreground ownership
2026-10-29 13:34:25 +01:00
evgeny
b71f992a45
Retain the media teardown barrier while Telecom cleanup is pending
2026-10-29 13:34:25 +01:00
evgeny
e7a03f33fb
Cover endpoint callback order and malformed Telecom service requests
2026-10-29 13:34:25 +01:00
evgeny
90e33f568b
Validate Telecom request identity and contain extras decoding errors
2026-10-29 13:34:25 +01:00
evgeny
482e1658b0
Preserve the latest route choice while endpoint confirmation is pending
2026-10-29 13:34:25 +01:00
evgeny
8d3cee4a56
Exercise real Telecom ownership, callbacks and endpoint routing
2026-10-29 13:34:25 +01:00
evgeny
8a9e421ea7
Ignore ended Telecom callbacks and contain route listener failures
2026-10-29 13:34:25 +01:00
evgeny
f031e510b8
Model Telecom state, endpoint outcomes and ConnectionService requests
2026-10-29 13:34:25 +01:00
evgeny
3babc636b4
Compile real Telecom integration against explicit host boundaries
2026-10-29 13:34:25 +01:00
evgeny
06058fad8e
Add URI and main executor boundaries for Telecom host tests
2026-10-29 13:34:25 +01:00
evgeny
7d4a0e05fd
Allow explicit Telecom cleanup retry after a rejected timer
2026-10-29 13:34:25 +01:00
evgeny
01a84c6851
Retain retiring Telecom connections and reject duplicate registrations
2026-10-29 13:34:25 +01:00
evgeny
c136ff60c2
Document acknowledged publisher shutdown and lifecycle fault coverage
2026-10-29 13:34:25 +01:00
evgeny
e5d3a1d584
Cover partial capture startup and callbacks from retired camera owners
2026-10-29 13:34:25 +01:00
evgeny
4af2402e20
Exercise capture ownership across Camera2, Surface, microphone and Opus failures
2026-10-29 13:34:25 +01:00
evgeny
6194538963
Preserve the earliest publisher cleanup retry across repeated shutdowns
2026-10-29 13:34:25 +01:00
evgeny
41a4a2e37e
Compile real publisher capture with controlled microphone and native boundaries
2026-10-29 13:34:25 +01:00
evgeny
7a2fc0112c
Model capture codec callbacks and Camera2 sessions for host fault tests
2026-10-29 13:34:24 +01:00
evgeny
59d1839d8d
Exercise publisher lifecycle failures, retained capture and stale notifications
2026-10-29 13:34:24 +01:00
evgeny
f1ffd21cda
Report missing publisher system services and use current app language
2026-10-29 13:34:24 +01:00
evgeny
9166268102
Compile publisher service and controller in the lifecycle test harness
2026-10-29 13:34:24 +01:00
evgeny
1beb19a7f8
Expose publisher service boundaries to the existing lifecycle harness
2026-10-29 13:34:24 +01:00
evgeny
e49ccfeb64
Guard publisher handshake, error callbacks and native teardown
2026-10-29 13:34:24 +01:00
evgeny
2abdb229fd
Keep publisher service owners until capture and foreground cleanup are acknowledged
2026-10-29 13:34:24 +01:00
evgeny
68d21fbffa
Acknowledge stream capture shutdown only after every owner is released
2026-10-29 13:34:24 +01:00
evgeny
5e9f7e01e0
Preserve capture camera and session ownership through late callbacks
2026-10-29 13:34:24 +01:00
evgeny
fd1e3a7f77
Adopt passive stream capture ownership before starting SDK resources
2026-10-29 13:34:24 +01:00
evgeny
100d208a9a
Document stream resource barriers and retained routing registrations
2026-10-29 13:34:24 +01:00
evgeny
a1c624a819
Preserve the next KEY after a GAP within one native stream batch
2026-10-29 13:34:24 +01:00
evgeny
0330f30c53
Verify orphan routing listener cleanup and independent route release
2026-10-29 13:34:24 +01:00
evgeny
2516545f9d
Retain failed media routing listener removals for acknowledged retry
2026-10-29 13:34:24 +01:00
evgeny
ee20c8b9b7
Guard viewer startup and cover the native teardown barrier
2026-10-29 13:34:24 +01:00
evgeny
495d399691
Block native teardown until viewer and shared mixer cleanup is confirmed
2026-10-29 13:34:24 +01:00
evgeny
16c7d817cc
Keep mixer shutdown inside the guarded cleanup path
2026-10-29 13:34:24 +01:00
evgeny
304b48a289
Verify stream viewer cleanup barriers with native and SDK faults
2026-10-29 13:34:24 +01:00
evgeny
e072624c8d
Keep the host audio threshold API compatible with Android signatures
2026-10-29 13:34:24 +01:00
evgeny
68651795bf
Compile real stream viewer and mixer for host lifecycle tests
2026-10-29 13:34:24 +01:00
evgeny
5dffa9917f
Add controlled native stream and Android audio test boundaries
2026-10-29 13:34:24 +01:00
evgeny
43a749d8ab
Use retained Surface leases for stream viewer texture cleanup
2026-10-29 13:34:24 +01:00
evgeny
35fe0ecda1
Exercise stream decoder and audio device failure ownership
2026-10-29 13:34:24 +01:00
evgeny
5b80d5769d
Compile the real stream video worker against controlled SDK boundaries
2026-10-29 13:34:24 +01:00
evgeny
26348b35e8
Retain stream audio owners through partial startup and failed release
2026-10-29 13:34:24 +01:00
evgeny
f28f95a501
Keep viewer resources and Surface callbacks until cleanup succeeds
2026-10-29 13:34:24 +01:00
evgeny
2f353bf35e
Retain stream decoder ownership until worker and SDK cleanup finish
2026-10-29 13:34:24 +01:00
evgeny
aa27892c12
Reject regressed stream PTS before submitting it to the decoder
2026-10-29 13:34:24 +01:00
evgeny
5e6313377b
Publish verified encoder modes only after successful probe cleanup
2026-10-29 13:34:24 +01:00
evgeny
96f8e6db5b
Document acknowledged video shutdown and passive resource adoption
2026-10-29 13:34:24 +01:00
evgeny
e9fa7ebb45
Exercise camera teardown despite RX or captured-image cleanup errors
2026-10-29 13:34:24 +01:00
evgeny
ea121ac4e7
Model failed-session acknowledgement and verify live preview fallback
2026-10-29 13:34:24 +01:00
evgeny
2068774d58
Clean camera resources independently of RX and image release failures
2026-10-29 13:34:24 +01:00
evgeny
e6e3006128
Test Camera2 configuration failure and preview output retention
2026-10-29 13:34:24 +01:00
evgeny
4d559dc08b
Handle failed Camera2 sessions without waiting for an absent callback
2026-10-29 13:34:24 +01:00
evgeny
53340db0e3
Verify independent image and codec cleanup under SDK failures
2026-10-29 13:34:24 +01:00
evgeny
43992bb6b3
Expose codec resource ownership to host fault tests
2026-10-29 13:34:24 +01:00
evgeny
d9959e5176
Keep codec cleanup diagnostics independent of released SDK handles
2026-10-29 13:34:24 +01:00
evgeny
b519536237
Retain codec and input image owners across failed cleanup
2026-10-29 13:34:24 +01:00
evgeny
bf3d4f14e8
Keep pending video cleanup distinct from service shutdown failure
2026-10-29 13:34:24 +01:00
evgeny
87e90b9462
Cover late camera callbacks, rejected cleanup and video port recovery
2026-10-29 13:34:24 +01:00
evgeny
776cec590e
Retry each pending encoder once per cleanup pass with the shared backoff
2026-10-29 13:34:24 +01:00
evgeny
682ed68d2f
Exercise explicit video startup after host tests adopt resource ownership
2026-10-29 13:34:24 +01:00
evgeny
2320aa4f71
Retain the video engine in the call service before starting its workers
2026-10-29 13:34:24 +01:00
evgeny
fba07e893f
Separate passive video ownership from explicit worker startup
2026-10-29 13:34:24 +01:00
evgeny
5e9dad2e9e
Handle camera error callbacks promised alongside synchronous open failures
2026-10-29 13:34:24 +01:00
evgeny
a6f41c0256
Confirm camera codec and native video cleanup before acknowledging shutdown
2026-10-29 13:34:24 +01:00
evgeny
53383ec754
Reproduce premature video shutdown acknowledgments and lost camera cleanup owners
2026-10-29 13:34:24 +01:00
evgeny
43f61f6f0b
Model pending video shutdown separately from an exception in service tests
2026-10-29 13:34:24 +01:00
evgeny
1ddd2a4a0b
Let call service retain video ownership while asynchronous shutdown is pending
2026-10-29 13:34:24 +01:00
evgeny
12db99531f
Compile the real call video engine alongside its receive worker in host tests
2026-10-29 13:34:24 +01:00
evgeny
63f393c615
Provide video engine capability, encoder and native port test boundaries
2026-10-29 13:34:24 +01:00
evgeny
3a4e1c6a7c
Model Camera2 device session and image reader ownership for lifecycle faults
2026-10-29 13:34:24 +01:00
evgeny
5ad36ba57b
Support direct preview buffer sizing and YUV capture format in host fixtures
2026-10-29 13:34:24 +01:00
evgeny
92a301ae54
Provide camera context and fault-controlled orientation sensor boundaries
2026-10-29 13:34:24 +01:00
evgeny
278efd574e
Run camera handler tasks on real host worker threads with controlled main timers
2026-10-29 13:34:24 +01:00
evgeny
d88d77c14d
Specify call snapshot units and the limited config getter interface
2026-10-29 13:34:24 +01:00
evgeny
1596088ca0
Describe camera capability candidates and canonical UDP logger targets
2026-10-29 13:34:24 +01:00
evgeny
8e4d28c1fc
Document camera preset restoration, orientation and manual bitrate bounds
2026-10-29 13:34:24 +01:00
evgeny
97f1eaa048
Clarify stream grid and PCM timeline contracts without per-record allocations
2026-10-29 13:34:24 +01:00
evgeny
ffa5dece4f
Validate stream snapshot counts and verify native metadata mappings
2026-10-29 13:34:24 +01:00
evgeny
a1dcf28bf9
Reject malformed stream batches before mutating the playback queue
2026-10-29 13:34:24 +01:00
evgeny
5fb6e72c43
Describe stream source snapshots, codec framing and playback telemetry contracts
2026-10-29 13:34:24 +01:00
evgeny
cc7648bb33
Validate length-prefixed NAL headers consistently with Annex B input
2026-10-29 13:34:24 +01:00
evgeny
92ce2d84e9
Describe preview lease transfer, callback cancellation and physical cleanup retries
2026-10-29 13:34:24 +01:00
evgeny
0a777baabb
Adopt a fresh preview lease when a previous command lease was cancelled
2026-10-29 13:34:24 +01:00
evgeny
44a137e23b
Verify preview ownership, callback rollback and independent physical release retries
2026-10-29 13:34:24 +01:00
evgeny
4d15c6d42a
Keep preview cleanup retryable after scheduling rejection and compile real leases in host tests
2026-10-29 13:34:24 +01:00
evgeny
83ea839d0c
Recognize shared preview sources and model texture cleanup failures
2026-10-29 13:34:24 +01:00
evgeny
4a40fb9d52
Give preview owners independent leases and retain failed physical cleanup
2026-10-29 13:34:24 +01:00
evgeny
4ba21b3082
Remove the trailing blank line from the audited video JNI declarations
2026-10-29 13:34:24 +01:00
evgeny
b2b34df2ec
Document video receive cleanup acknowledgments and host fault coverage
2026-10-29 13:34:24 +01:00
evgeny
8040431a4a
Specify call video bitrate, cadence and orientation helper contracts
2026-10-29 13:34:24 +01:00
evgeny
98cd5bf81c
Describe call video JNI buffers, return values and playout handle ownership
2026-10-29 13:34:24 +01:00
evgeny
000273d451
Keep the earliest pending video cleanup retry instead of postponing it twice
2026-10-29 13:34:24 +01:00
evgeny
d8fd73d917
Exercise video RX cleanup failures, surface leases and generation draining
2026-10-29 13:34:24 +01:00
evgeny
71e1e5c747
Run real call video receive tests with controlled native and codec boundaries
2026-10-29 13:34:24 +01:00
evgeny
7f89b7c734
Provide controlled MediaCodec input output and cleanup failures
2026-10-29 13:34:24 +01:00
evgeny
8951af6b63
Model video surfaces and deterministic cleanup retry timers on the JVM
2026-10-29 13:34:24 +01:00
evgeny
af2209ec96
Prepare host video tests and initialize receive ownership before starting its worker
2026-10-29 13:34:24 +01:00
evgeny
eff6f8965a
Retain video receive resources through failed decoder and surface cleanup
2026-10-29 13:34:24 +01:00
evgeny
448fa39a0c
Separate call video format values from the native runtime boundary
2026-10-29 13:34:24 +01:00
evgeny
99ab91d2f5
Clarify router cleanup as a native audio teardown prerequisite
2026-10-29 13:34:24 +01:00
evgeny
bc6ca78ce8
Document retained router resources and shared session close acknowledgments
2026-10-29 13:34:23 +01:00
evgeny
774dc10d84
Preserve configured Telecom ownership when startup retries router cleanup
2026-10-29 13:34:23 +01:00
evgeny
e660f8f762
Cover partial communication selection and SCO cleanup effects
2026-10-29 13:34:23 +01:00
evgeny
8cdb4190b6
Log rejected media operations while session cleanup remains pending
2026-10-29 13:34:23 +01:00
evgeny
a6f8156564
Track possible SCO effects before starting the Android request
2026-10-29 13:34:23 +01:00
evgeny
48ab63a9d3
Test router cleanup barriers in call and shared media owners
2026-10-29 13:34:23 +01:00
evgeny
b3e1356d16
Exercise retained router cleanup, stale proxies and SCO failure recovery
2026-10-29 13:34:23 +01:00
evgeny
3ef245fc0a
Verify pending router cleanup through repeatable stop calls
2026-10-29 13:34:23 +01:00
evgeny
f7ebf81061
Ignore repeated Bluetooth callbacks for proxies already released
2026-10-29 13:34:23 +01:00
evgeny
3d2e98b02e
Keep media audio session close retryable until router cleanup succeeds
2026-10-29 13:34:23 +01:00
evgeny
1970f895da
Retain router resources and retry incomplete audio route cleanup
2026-10-29 13:34:23 +01:00
evgeny
1da06164e2
Document retryable call audio shutdown and device ownership
2026-10-29 13:34:23 +01:00
evgeny
94b5d44fe7
Check call audio main ownership and the late Telecom handoff
2026-10-29 13:34:23 +01:00
evgeny
326bfd124e
Guard call audio ownership on main and avoid touching released devices
2026-10-29 13:34:23 +01:00
evgeny
0340a59b15
Dispatch host mainExecutor callbacks through the main looper
2026-10-29 13:34:23 +01:00
evgeny
f385d3dc5e
Cover call audio teardown and partial device startup failures
2026-10-29 13:34:23 +01:00
evgeny
83a671b72f
Compile the real call audio engine in host regression tests
2026-10-29 13:34:23 +01:00
evgeny
ecd4e12274
Provide call DSP and Telecom boundaries for real audio worker tests
2026-10-29 13:34:23 +01:00
evgeny
7304647baa
Model call audio hardware failures and blocking capture on the JVM
2026-10-29 13:34:23 +01:00
evgeny
e857b9de75
Retain call audio owners until worker and device cleanup succeeds
2026-10-29 13:34:23 +01:00
evgeny
a1c77268b8
Document retained call service cleanup, retry policy and native core teardown barriers
2026-10-29 13:34:23 +01:00
evgeny
6ac6dd1f6f
Describe call teardown acknowledgments and the boundary of asynchronous video cleanup
2026-10-29 13:34:23 +01:00
evgeny
02763bd4a1
Reject missing service components instead of waiting forever for Android startup
2026-10-29 13:34:23 +01:00
evgeny
4dd84c601b
Cover null foreground service results in call and overlay startup
2026-10-29 13:34:23 +01:00
evgeny
d2c6734bfb
Model Android service requests that return no matching component
2026-10-29 13:34:23 +01:00
evgeny
17dc0b26b4
Preserve the service call identity until its final lifecycle notification
2026-10-29 13:34:23 +01:00
evgeny
42c6e2a62b
Keep service loss associated with the call after local resources are released
2026-10-29 13:34:23 +01:00
evgeny
9b0ca7ca2b
Document call service resource acknowledgments and contain conflict callback errors
2026-10-29 13:34:23 +01:00
evgeny
aefca81444
Keep cancelled media preparation inside the native teardown barrier
2026-10-29 13:34:23 +01:00
evgeny
ca7b23909b
Use retained resource ownership instead of Deferred cancellation as the cleanup barrier
2026-10-29 13:34:23 +01:00
evgeny
a5d8131d8d
Verify call cleanup completion, core barriers, retry lifetime and stale callbacks
2026-10-29 13:34:23 +01:00
evgeny
3e7ac47d18
Close the independent call service cleanup block at the correct scope
2026-10-29 13:34:23 +01:00
evgeny
826055d08b
Keep failed video shutdown joins and rejected cleanup requests retryable
2026-10-29 13:34:23 +01:00
evgeny
878f71e211
Wait for call service cleanup before restoring media and stopping the native core
2026-10-29 13:34:23 +01:00
evgeny
cf793ce6bb
Confirm call cleanup before releasing ownership and retry every retained resource independently
2026-10-29 13:34:23 +01:00
evgeny
8eb2363177
Retain call service startup owners before IPC effects and isolate callback failures
2026-10-29 13:34:23 +01:00
evgeny
4f9bfbbcf3
Reference the host service lifecycle result through its Android boundary
2026-10-29 13:34:23 +01:00
evgeny
ff05e34d22
Compile call integration models and contain missing notification service errors
2026-10-29 13:34:23 +01:00
evgeny
9c70858828
Exercise call service startup, partial IPC effects and independent cleanup failures
2026-10-29 13:34:23 +01:00
evgeny
dd9aac79a2
Handle absent notification managers and nullable call channels explicitly
2026-10-29 13:34:23 +01:00
evgeny
15a2a7bb70
Control audio and video cleanup effects around the real call service controller
2026-10-29 13:34:23 +01:00
evgeny
be3a2d2325
Add isolated host checks for the real call service and controller
2026-10-29 13:34:23 +01:00
evgeny
bc7063966d
Expose call signaling and saved route boundaries to service integration tests
2026-10-29 13:34:23 +01:00
evgeny
1600452147
Model call power events and supported foreground API levels
2026-10-29 13:34:23 +01:00
evgeny
68b922bf80
Expose call foreground intents, receivers and service type contracts
2026-10-29 13:34:23 +01:00
evgeny
0a48cccd9a
Model ongoing call notifications and independent foreground stop failures
2026-10-29 13:34:23 +01:00
evgeny
a65385bbb1
Keep radio outcomes separate from the live stream foreground notification
2026-10-29 13:34:23 +01:00
evgeny
a90416f50c
Preserve stream notifications and synchronize host checks with audio cleanup
2026-10-29 13:34:23 +01:00
evgeny
0d9dabcd23
Cover touch permission checks with the overlay error boundary
2026-10-29 13:34:23 +01:00
evgeny
4de7d7ec9d
Document overlay service handshake, window cleanup and gesture error ownership
2026-10-29 13:34:23 +01:00
evgeny
1559e0681b
Verify overlay latch release, drag lock and position ownership contracts
2026-10-29 13:34:23 +01:00
evgeny
5553d968b6
Deliver cancelled service creation and account for self-context stop requests
2026-10-29 13:34:23 +01:00
evgeny
abef146325
Stop unused overlay foreground capture after touch and permission failures
2026-10-29 13:34:23 +01:00
evgeny
36368640f1
Exercise overlay PTT through native capture and permission-loss stop races
2026-10-29 13:34:23 +01:00
evgeny
982315bacc
Cancel overlay PTT on gesture faults and ignore callbacks from retired windows
2026-10-29 13:34:23 +01:00
evgeny
b3d70ea92e
Retain overlay windows through partial IPC failures and guarded service startup
2026-10-29 13:34:23 +01:00
evgeny
fa14305349
Avoid a host settings getter collision with the application API
2026-10-29 13:34:23 +01:00
evgeny
08f3b892a5
Separate overlay notification ownership and recover rejected service actions
2026-10-29 13:34:23 +01:00
evgeny
d6c178a39b
Keep host window lookup separate from the service-owned window field
2026-10-29 13:34:23 +01:00
evgeny
18cb661c91
Reproduce overlay partial IPC effects, stale gestures and foreground lifecycle failures
2026-10-29 13:34:23 +01:00
evgeny
2f43407ae4
Require an available notification manager at overlay IPC boundaries
2026-10-29 13:34:23 +01:00
evgeny
19050cd4f2
Use the real overlay service with radio lifecycle components in host tests
2026-10-29 13:34:23 +01:00
evgeny
ff16eec78d
Expose overlay notification and state resource identifiers to JVM tests
2026-10-29 13:34:23 +01:00
evgeny
263d1348ec
Model overlay permissions and persistent settings for service tests
2026-10-29 13:34:23 +01:00
evgeny
ce756ed6a9
Expose foreground type and deferred layout contracts in overlay fixtures
2026-10-29 13:34:23 +01:00
evgeny
19fd2d3042
Provide overlay drawing boundaries without Android rendering
2026-10-29 13:34:23 +01:00
evgeny
d1dc3bb8f7
Model overlay window IPC and foreground service lifetime for Android host tests
2026-10-29 13:34:23 +01:00
evgeny
6d5b2bd176
Record distinct radio core availability and busy outcomes
2026-10-29 13:34:23 +01:00
evgeny
6ee4aa99eb
Report unavailable core accurately and include malformed radio event fields
2026-10-29 13:34:23 +01:00
evgeny
16a9bee8f3
Distinguish unavailable radio signaling from an occupied call slot
2026-10-29 13:34:23 +01:00
evgeny
8100ea728e
Document Android radio invitation ownership, UI phases and fault checks
2026-10-29 13:34:23 +01:00
evgeny
6ec8950a85
Clarify asynchronous radio signaling and wire identity contracts
2026-10-29 13:34:23 +01:00
evgeny
cda411a57e
Document radio invitation state and cover continuation and stale pending events
2026-10-29 13:34:23 +01:00
evgeny
45992a3dd3
Allow the missing-notification-service fault in radio cleanup assertions
2026-10-29 13:34:23 +01:00
evgeny
8a7f732428
Validate radio call identities and preserve terminal activation states
2026-10-29 13:34:23 +01:00
evgeny
b24bee7a89
Own pending radio starts and diagnose every signaling queue refusal
2026-10-29 13:34:23 +01:00
evgeny
16f52c0136
Exercise radio call signaling refusals, identity, activation and notification lifetime
2026-10-29 13:34:23 +01:00
evgeny
93b174ecde
Keep radio outcome presentation failures inside the controller lifecycle
2026-10-29 13:34:23 +01:00
evgeny
8b982efa05
Compile the real radio call controller in host lifecycle tests
2026-10-29 13:34:23 +01:00
evgeny
a5718c4ca9
Model native radio call requests and controller dependencies in host fixtures
2026-10-29 13:34:23 +01:00
evgeny
5823d6f907
Bind capture startup to the generation of its update request
2026-10-29 13:34:23 +01:00
evgeny
7810137eb0
Handle playback cancellation and document complete radio failure recovery
2026-10-29 13:34:23 +01:00
evgeny
b1a888ffb6
Distinguish stop-unblocked writes from active playback failures
2026-10-29 13:34:23 +01:00
evgeny
a5fea0c503
Preserve replacement PTT requests during obsolete capture rollback
2026-10-29 13:34:23 +01:00
evgeny
17caeb0a9c
Cover capture startup failures that overlap a replacement group
2026-10-29 13:34:23 +01:00
evgeny
6677b3abfe
Document radio worker ownership and format failure boundaries
2026-10-29 13:34:23 +01:00
evgeny
613ea315b0
Synchronize radio discontinuity regression with the first capture frame
2026-10-29 13:34:23 +01:00
evgeny
ed8d208454
Recover radio worker failures on the owning I/O executor
2026-10-29 13:34:23 +01:00
evgeny
a04cfe4441
Keep radio capture owned through startup faults and deferred native cleanup
2026-10-29 13:34:23 +01:00
evgeny
1ddd75e134
Isolate complete short-write frames from playback already in flight
2026-10-29 13:34:23 +01:00
evgeny
9baa72759f
Reproduce radio worker failures and stale session cleanup races
2026-10-29 13:34:23 +01:00
evgeny
5d74bcd865
Model radio worker I/O faults and partial native capture effects
2026-10-29 13:34:23 +01:00
evgeny
128af68a89
Invalidate radio settings before reconfiguration and log failed attempts
2026-10-29 13:34:23 +01:00
evgeny
67615cc330
Reproduce stale settings acknowledgements after failed radio reconfiguration
2026-10-29 13:34:23 +01:00
evgeny
bb8518ab67
Document radio startup completion and independent cleanup contracts
2026-10-29 13:34:23 +01:00
evgeny
2fd8a35230
Verify failed radio restore and trace resource join completion
2026-10-29 13:34:23 +01:00
evgeny
b6ec030128
Bind radio screen callbacks to the originating startup generation
2026-10-29 13:34:23 +01:00
evgeny
7084454e84
Verify radio output lease dependencies and interrupted cleanup
2026-10-29 13:34:23 +01:00
evgeny
7699ebfcf6
Own radio acknowledgement timers and close unschedulable background capture
2026-10-29 13:34:23 +01:00
evgeny
0ba189863e
Complete radio startup callbacks after failures and reject stale readiness
2026-10-29 13:34:23 +01:00
evgeny
e197f72722
Release radio resources independently and retain failed cleanup owners
2026-10-29 13:34:23 +01:00
evgeny
530dd81a71
Isolate old radio cleanup failures between negative control scenarios
2026-10-29 13:34:23 +01:00
evgeny
c1fe2a3cd0
Reproduce radio lifecycle cleanup and startup callback failures
2026-10-29 13:34:23 +01:00
evgeny
45bc97c25b
Model radio startup and main queue delivery failures
2026-10-29 13:34:23 +01:00
evgeny
982ed0ca7d
Model recoverable receiver and radio output lifecycle failures
2026-10-29 13:34:23 +01:00
evgeny
7780922353
Document radio PTT release fallback and native command coverage
2026-10-29 13:34:22 +01:00
evgeny
46edb1beb5
End radio PTT immediately when its release timer is rejected
2026-10-29 13:34:22 +01:00
evgeny
722ca3e6f7
Drain radio callbacks before terminating the host executor
2026-10-29 13:34:22 +01:00
evgeny
ef95ff54b9
Reproduce stuck radio PTT and verify native release ordering
2026-10-29 13:34:22 +01:00
evgeny
a162cc6eca
Compile the real radio engine in Android host tests
2026-10-29 13:34:22 +01:00
evgeny
f494c20430
Keep radio overlay and toast boundaries outside host audio logic
2026-10-29 13:34:22 +01:00
evgeny
6df258cf13
Provide microphone permission resources for radio host tests
2026-10-29 13:34:22 +01:00
evgeny
81b9469302
Observe native radio capture and PTT commands in host tests
2026-10-29 13:34:22 +01:00
evgeny
4ff2f56aa8
Provide radio screen state and monotonic nanoseconds to host tests
2026-10-29 13:34:22 +01:00
evgeny
841d4ecdde
Model radio screen receiver registration in host tests
2026-10-29 13:34:22 +01:00
evgeny
51611cbf5a
Model radio playback without Android audio hardware
2026-10-29 13:34:22 +01:00
evgeny
9d6018cdbb
Describe radio manual holds and independent speaker indication
2026-10-29 13:34:22 +01:00
evgeny
95894273f1
Document radio PTT ownership and talk event state contracts
2026-10-29 13:34:22 +01:00
evgeny
43b14ece78
Unify UDP and STCP packet link API with bounded backpressure
2026-10-29 12:53:57 +01:00
evgeny
3203947698
Add desktop log rotation on startup and size limit
2026-10-29 11:23:36 +01:00
evgeny
ba1c4cf160
Add cross-platform BLE transport and Bluetooth settings
...
Integrate shared C transport with desktop and Android frontends, add radio probes and detailed Windows diagnostics, and fix GUI build dependencies and early configuration startup errors.
2026-10-29 10:51:19 +01:00
evgeny
221f58c9d2
Draw storage avatars as clear cylinders with curved bands
2026-10-28 17:58:40 +01:00
evgeny
54fdd167c2
Use server and storage role icons instead of member avatars
2026-10-28 17:49:24 +01:00
evgeny
c96a63091c
Replace supernode lightning with a server icon renderer
2026-10-28 17:48:54 +01:00
evgeny
2b05140e74
Verify actual route labels and local to peer NAT pairs in member details
2026-10-28 17:21:37 +01:00
evgeny
faa75a7e1d
Show actual member routes and both endpoints' NAT types in desktop details
2026-10-28 17:20:46 +01:00
evgeny
26edd84bb9
Enable MJPEG thumbnail encoding and refresh bundled FFmpeg during Windows builds
2026-10-28 15:56:18 +01:00
evgeny
19cece789e
Remove local test databases from version control and ignore their directories
2026-10-28 15:38:52 +01:00
evgeny
9cabb698e2
Exercise cached media preparation in real history widgets across scrolling and reopening
2026-10-28 15:09:35 +01:00
evgeny
ba44c31f42
Add focused cache and prepared media rendering checks to desktop tests
2026-10-28 15:06:43 +01:00
evgeny
ed19adc1ba
Cover persistent preview reuse, PNG alpha, first video frame, rotation and creation based expiry
2026-10-28 15:06:06 +01:00
evgeny
806632b67d
Link the persistent preview cache and keep image preparation free of temporary files
2026-10-28 15:04:03 +01:00
evgeny
73b1fc7080
Render cached image and video previews without filesystem access or scaled pixmap allocation
2026-10-28 15:02:28 +01:00
evgeny
60d2ba0fac
Prepare visible image and video previews through the shared background cache
2026-10-28 15:01:29 +01:00
evgeny
468af7abbe
Add persistent media preview cache with fixed creation timestamps and seven day expiry
2026-10-28 14:57:54 +01:00
evgeny
fc5ad51ec3
Clarify ringing phase precedes accepting the call
2026-10-28 14:43:27 +01:00
evgeny
6a82192b02
Document ringback and notification playback ownership contracts
2026-10-28 14:43:27 +01:00
evgeny
776345997f
Keep notification players strongly owned throughout playback
2026-10-28 14:43:27 +01:00
evgeny
b318627022
Require confirmed media release in existing alert lifecycle tests
2026-10-28 14:43:27 +01:00
evgeny
0b10a38f41
Retain failed media releases and retry without replacing ringback owners
2026-10-28 14:43:27 +01:00
evgeny
383da15d95
Allow absent callbacks after partial ringback listener setup
2026-10-28 14:43:27 +01:00
evgeny
2a4ccd8ca8
Reproduce lost ringback and notification players after release failures
2026-10-28 14:43:27 +01:00
evgeny
512a87502b
Document ringtone resource ownership and cleanup retry contracts
2026-10-28 14:43:27 +01:00
evgeny
27b99435c0
Clarify alert stop diagnostics when sound cleanup remains pending
2026-10-28 14:43:27 +01:00
evgeny
e45ddd2a7f
Require confirmed cleanup in existing ringtone lifecycle tests
2026-10-28 14:43:27 +01:00
evgeny
94b9786d91
Retain ringtone resources and retry cleanup before replacement
2026-10-28 14:43:27 +01:00
evgeny
6abedd8177
Reproduce lost ringtone and focus owners after cleanup failures
2026-10-28 14:43:27 +01:00
evgeny
cc9e4f4d85
Model rejected vibration scheduling and partial cancellation
2026-10-28 14:43:27 +01:00
evgeny
7ed1a63b36
Model recoverable alert playback and focus cleanup failures
2026-10-28 14:43:27 +01:00
evgeny
edc6b32fa7
Cover orphan notification cleanup through language refresh
2026-10-28 14:43:27 +01:00
evgeny
d67991d08a
Avoid repeated alert cancellation after successful lifecycle cleanup
2026-10-28 14:43:27 +01:00
evgeny
61e013e762
Check lifecycle refresh does not repeat completed alert cleanup
2026-10-28 14:43:27 +01:00
evgeny
774284b699
Verify repeated cleanup across incoming alert lifecycle failures
2026-10-28 14:43:27 +01:00
evgeny
66e99066f9
Retain incoming alert resources until cleanup succeeds
2026-10-28 14:43:27 +01:00
evgeny
793c2b251b
Reproduce lost incoming alert resources after cleanup exceptions
2026-10-28 14:43:27 +01:00
evgeny
f4cfe5ba30
Model partial wake lock and notification cleanup failures
2026-10-28 14:43:27 +01:00
evgeny
3a6ef25ca6
Document requested locales and notification language refresh contracts
2026-10-28 14:43:27 +01:00
evgeny
7b8e0a95bb
Document language host tests and their runtime boundaries
2026-10-28 14:43:27 +01:00
evgeny
3dfedc8822
Read back locale requests after partial framework failures
2026-10-28 14:43:27 +01:00
evgeny
a541484df1
Expose language read and selection failures in the settings UI
2026-10-28 14:43:27 +01:00
evgeny
caccb4e56f
Add localized language selection and catalog error messages
2026-10-28 14:43:27 +01:00
evgeny
8537ac1e6d
Include language lifecycle coverage in Android unit test runs
2026-10-28 14:43:27 +01:00
evgeny
4bffffb0ad
Keep language tests compatible with an expanded XML catalog
2026-10-28 14:43:27 +01:00
evgeny
6133257c24
Validate language catalogs and framework failure contracts on the host
2026-10-28 14:43:27 +01:00
evgeny
8720cee7af
Keep the headless service fixture separate from Android sources
2026-10-28 14:43:27 +01:00
evgeny
fd183a43fe
Retry notification language refreshes on every configuration signal
2026-10-28 14:43:27 +01:00
evgeny
5360ee9ff1
Reproduce skipped notification language retries and callback failures
2026-10-28 14:43:27 +01:00
evgeny
9369429600
Observe independent notification refresh attempts in language tests
2026-10-28 14:43:27 +01:00
evgeny
909761b0c5
Provide application and main thread boundaries for language tests
2026-10-28 14:43:27 +01:00
evgeny
638a2a2d6b
Model locale resources and AppCompat failures for language tests
2026-10-28 14:43:27 +01:00
evgeny
aae145b82a
Prepare isolated host tests for application language behavior
2026-10-28 14:43:27 +01:00
evgeny
5e0ed8b077
Document battery exemption query and settings request contracts
2026-10-28 14:43:27 +01:00
evgeny
8551234cfb
Show unknown battery exemption state with an explicit retry action
2026-10-28 14:43:27 +01:00
evgeny
0b31f27177
Preserve unknown battery exemption status on Android service errors
2026-10-28 14:43:27 +01:00
evgeny
04b76be1c8
Compile the battery permission adapter in Android host tests
2026-10-28 14:43:27 +01:00
evgeny
ff08f05e9a
Model power exemption queries and system activity launch failures
2026-10-28 14:43:27 +01:00
evgeny
4b221ef0d1
Verify growing call preview and emphasized metric values
2026-10-28 14:35:46 +01:00
evgeny
859f33b5e9
Expand call preview to the available window area and emphasize diagnostic values
2026-10-28 14:34:12 +01:00
evgeny
b03d101c87
Check call diagnostics, avatar visibility and bottom action alignment
2026-10-28 14:20:36 +01:00
evgeny
309754244a
Localize call diagnostics and keep video parameters in logs
2026-10-28 14:20:36 +01:00
evgeny
b82e9cc98e
Pin call actions to the bottom and add a separate diagnostics toggle
2026-10-28 14:19:14 +01:00
evgeny
264a13705f
Finalize shared frame rate selection and deterministic call control verification
2026-10-28 14:10:53 +01:00
evgeny
bb0fa13c8b
Show audio output captions and validate the desktop call settings menus
2026-10-28 14:08:21 +01:00
evgeny
2540909fda
Replace desktop call settings with compact capture control menus
2026-10-28 14:06:40 +01:00
evgeny
f76aacfba1
Share resolution dependent frame rate menus for capture settings
2026-10-28 14:04:31 +01:00
evgeny
f9c150b7d4
Share capture control menus and Android style glyphs between desktop windows
2026-10-28 14:02:39 +01:00
evgeny
7be5c8bd0b
Verify rendered control sizes and muted stream startup
2026-10-28 13:57:05 +01:00
evgeny
287b54b283
Allow and remember stream audio toggling before publication starts
2026-10-28 13:55:45 +01:00
evgeny
c932528217
Apply initial stream mute before opening capture devices
2026-10-28 13:55:15 +01:00
evgeny
26953fc1a4
Render broadcast controls at their actual icon size with Android style values and rotation
2026-10-28 13:55:14 +01:00
evgeny
01dd40fdd1
Double broadcast control icons and tighten button spacing
2026-10-28 13:47:09 +01:00
evgeny
07b8c2b338
Keep broadcast menu style alive through menu teardown and add English labels
2026-10-28 13:44:02 +01:00
evgeny
21ab92d2b4
Update broadcast control tests and Russian menu labels
2026-10-28 13:42:58 +01:00
evgeny
35875a2c43
Move desktop broadcast settings into compact top menus with separate resolution and FPS
2026-10-28 13:41:09 +01:00
evgeny
7d3f0852f7
Place video settings in the centered desktop call control row
2026-10-28 13:25:24 +01:00
evgeny
f1da7e1837
Center desktop call actions and use a gear button for video settings
2026-10-28 13:17:19 +01:00
evgeny
75336387c5
Translate desktop video settings and camera toggles
2026-10-28 13:09:42 +01:00
evgeny
858e27ec8c
Replace desktop call video checkbox with a round camera button
2026-10-28 13:09:42 +01:00
evgeny
270eb0c3b0
android: add photo and video capture orientation controls
2026-10-28 12:58:21 +01:00
evgeny
19a3cc8934
Merge remote-tracking branch 'origin/master'
2026-10-28 12:43:38 +01:00
evgeny
f9ccca85bb
Insert generated config fields before blank section separators
2026-10-28 12:41:10 +01:00
evgeny
41930a35c4
Audit configuration sample against current parser and service behavior
2026-10-28 12:36:21 +01:00
evgeny
2c82ceaad7
Handle nullable multicast lock creation before acquiring ownership
2026-10-28 12:28:28 +01:00
evgeny
3c5a9410ec
Clarify retained LAN delivery state after core shutdown
2026-10-28 12:28:28 +01:00
evgeny
25dda68ecf
Document LAN invitation framing and server link preview contracts
2026-10-28 12:28:28 +01:00
evgeny
237ba93e1a
Report invitation presentation errors without exposing link secrets
2026-10-28 12:28:28 +01:00
evgeny
6f9ddc88e2
Add localized invitation copy errors and delivery recipient labels
2026-10-28 12:28:28 +01:00
evgeny
f910d235fd
Validate LAN events and retain multicast lock ownership on errors
2026-10-28 12:28:28 +01:00
evgeny
0be56a133b
Reproduce LAN invitation state and multicast ownership failures
2026-10-28 12:28:28 +01:00
evgeny
0b8caaa810
Model LAN invitation JNI calls and multicast lock failures
2026-10-28 12:28:28 +01:00
evgeny
e32e4be28b
Document JNI log encoding and failure containment contracts
2026-10-28 12:28:28 +01:00
evgeny
c137ad89d1
Clarify JNI log scenario coverage and callback descriptor checks
2026-10-28 12:28:28 +01:00
evgeny
1c705e64ca
Verify repeated JNI delivery and log subscription changes
2026-10-28 12:28:28 +01:00
evgeny
269d09815b
Document JNI host checks and their platform requirements
2026-10-28 12:28:28 +01:00
evgeny
0931eeedad
Run JNI log fault scenarios with Android unit tests
2026-10-28 12:28:28 +01:00
evgeny
a77fc553e7
Contain JNI logging failures and preserve UTF-8 payloads
2026-10-28 12:28:28 +01:00
evgeny
c656e3a96b
Reproduce Android JNI log callback failures on the host
2026-10-28 12:28:28 +01:00
evgeny
8268c5112c
Describe Android log retention and diagnostic output contracts
2026-10-28 12:28:28 +01:00
evgeny
401e65c132
Read Android log snapshots without losing queued updates
2026-10-28 12:28:28 +01:00
evgeny
69cb7664f3
Update chatserver sample for generated addition key
2026-10-28 12:26:35 +01:00
evgeny
38d24e7bbf
Document opt-in Android network logging
2026-10-28 12:08:07 +01:00
evgeny
0c2b96ee95
Add a logreceiver checkbox to Android debug settings
2026-10-28 12:08:07 +01:00
evgeny
0a36dc5ac6
Make Android UDP log forwarding opt-in with a persisted target
2026-10-28 12:08:07 +01:00
evgeny
917a2a2b28
Serialize stream capture preferences with other saved media profiles
2026-10-28 12:08:07 +01:00
evgeny
7ed8f90068
Keep call controls visible while a video menu is open
2026-10-28 12:08:07 +01:00
evgeny
c0acb6b268
Remember separate photo and video recording preferences
2026-10-28 12:08:07 +01:00
evgeny
c9f8f17858
Restore video call modes and remember the selected bitrate range
2026-10-28 12:08:07 +01:00
evgeny
76f81bc14e
Store independent capture profiles in the application settings queue
2026-10-28 12:08:07 +01:00
evgeny
9f1c1cf9e4
Add titled one-tap menus to stream capture and audio controls
2026-10-28 12:08:07 +01:00
evgeny
211f8f4c5d
Keep the video bitrate slider aligned with its saved range
2026-10-28 12:08:07 +01:00
evgeny
c368b77a00
Unify video call controls and support one-tap option menus
2026-10-28 12:08:07 +01:00
evgeny
ead884e6d3
Prefer the main rear camera in photo mode
2026-10-28 12:08:07 +01:00
evgeny
067a6bd801
Switch camera menus in one tap and toggle the current menu
2026-10-28 12:08:07 +01:00
evgeny
217a4bb27b
Add descriptive headers to camera option menus
2026-10-28 12:08:07 +01:00
evgeny
93da173987
Default camera JPEG quality to 85 and remove lowest presets
2026-10-28 12:08:07 +01:00
evgeny
a53668ade8
Show captured JPEG file size and enlarge camera metadata text
2026-10-28 12:08:07 +01:00
evgeny
07c9cf223c
Hide camera discard and send actions until there is captured media
2026-10-28 12:08:07 +01:00
evgeny
f351f289af
Center camera actions and replace inactive shutter with a half-width gap
2026-10-28 12:08:07 +01:00
evgeny
22c8f9a69c
Place compact photo and video details beside camera controls
2026-10-28 12:08:07 +01:00
evgeny
1359247e3f
Describe recording codec checks and JPEG quality preview
2026-10-28 12:08:07 +01:00
evgeny
c7b301b3a1
Document updated Android build stack and keep capture diagnostics compact
2026-10-28 12:08:07 +01:00
evgeny
03059e3001
Choose recording codec, resolution and bitrate independently and set JPEG quality
2026-10-28 12:08:07 +01:00
evgeny
afa6af5012
Share compact bitrate labels between streaming and recording controls
2026-10-28 12:08:06 +01:00
evgeny
aaf0617a1f
Upgrade Android build tools and CameraX while retaining API 26 minimum
2026-10-28 12:08:06 +01:00
evgeny
b84561dba5
Use shared capture icons and menus for camera and resolution selection
2026-10-28 12:08:06 +01:00
evgeny
379e7731df
Align Android camera timer to the right of the control panel
2026-10-28 12:08:06 +01:00
evgeny
4aa5513f25
Keep Android camera settings and controls outside the preview
2026-10-28 12:08:06 +01:00
evgeny
10a4554c81
Localize desktop image validation errors
2026-10-28 12:08:06 +01:00
evgeny
c84c328c90
Align camera navigation and developer references with shared capture screen
2026-10-28 12:08:06 +01:00
evgeny
4f5e46e9a9
Keep cache sources alive while accepted legacy image copies are pending
2026-10-28 12:08:06 +01:00
evgeny
2ac483f10f
Document image attachment metadata and shared Android camera ownership
2026-10-28 12:08:06 +01:00
evgeny
199eaa0429
Verify desktop image previews decode asynchronously and paint without file I/O
2026-10-28 12:08:06 +01:00
evgeny
154c76068c
Check encrypted image dimensions across the Android bridge
2026-10-28 12:08:06 +01:00
evgeny
b3e7db7b26
Cover encrypted group images and fixed private generation in desktop submission tests
2026-10-28 12:08:06 +01:00
evgeny
206abcae10
Test typed desktop images in channels and PM and reject corrupted attachments
2026-10-28 12:08:06 +01:00
evgeny
3c74fc89fe
Handle camera cache failures and remove unused photo submission wrapper
2026-10-28 12:08:06 +01:00
evgeny
684062c115
Test image metadata, private attachment publication and Android cache ownership
2026-10-28 12:08:06 +01:00
evgeny
c6fdf52582
Decode desktop image previews in bounded background jobs
2026-10-28 12:08:06 +01:00
evgeny
08e9b62e16
Render image previews from prepared model data and preserve aspect ratios
2026-10-28 12:08:06 +01:00
evgeny
04d9d1f2b9
Connect shared camera and photo viewer to Android channel and PM navigation
2026-10-28 12:08:06 +01:00
evgeny
6e30fd474e
Unify Android photo and video capture with explicit cache ownership
2026-10-28 12:08:06 +01:00
evgeny
8ff6694c5a
Show bounded image previews and open zoomable photos in Android private chats
2026-10-28 12:08:06 +01:00
evgeny
d1bb143928
Add localized image and camera error states
2026-10-28 12:08:06 +01:00
evgeny
4228f37cf5
Recognize image contents and preserve image dimensions in Android conversations
2026-10-28 12:08:06 +01:00
evgeny
233a3f78d1
Pass image MIME and private conversation generation through Android JNI
2026-10-28 12:08:06 +01:00
evgeny
e4af3907c2
Prepare Android JPEG and PNG attachments for fixed channel or PM targets
2026-10-28 12:08:06 +01:00
evgeny
23fecc2c11
Send and display JPEG and PNG in desktop private conversations
2026-10-28 12:08:06 +01:00
evgeny
e3b09bd0b7
Support JPEG and PNG attachment metadata and preparation
2026-10-28 12:08:06 +01:00
evgeny
78ea57d183
Clarify conversation rendering and preserve quote Unicode
2026-10-28 11:36:13 +01:00
evgeny
0b285ec19b
Move the logs shortcut beside the CPU indicator
2026-10-28 11:36:13 +01:00
evgeny
8b3b6fb5af
Reject malformed feedback events before updating UI state
2026-10-28 11:36:13 +01:00
evgeny
317f362a7a
Reproduce malformed feedback event handling in the UI
2026-10-28 11:36:13 +01:00
evgeny
a1ce486e89
Document feedback snapshots and poll UI submission contracts
2026-10-28 11:36:13 +01:00
evgeny
37515df8c1
Validate poll drafts and reject malformed feedback snapshots
2026-10-28 11:36:13 +01:00
evgeny
89efd10450
Reproduce invalid poll draft and inactive custom answer handling
2026-10-28 11:36:13 +01:00
evgeny
f6b5e5b42c
Route group avatar snapshots separately from feedback changes
2026-10-28 11:36:13 +01:00
evgeny
d969b277e1
Assign a registered event ID to Android group avatar snapshots
2026-10-28 11:36:13 +01:00
evgeny
e91987d241
Reproduce Android avatar and feedback event ID collision
2026-10-28 11:36:13 +01:00
evgeny
69bc182ee9
Clarify capture timeline and microphone permission contracts
2026-10-28 11:36:13 +01:00
evgeny
c0c282ca3a
Make voice recording ownership and playback failures explicit
2026-10-28 11:36:13 +01:00
evgeny
0219624c7d
Reproduce voice capture rollback and playback cleanup failures
2026-10-28 11:36:13 +01:00
evgeny
537814e7fd
Model microphone permission for voice recorder host tests
2026-10-28 11:36:13 +01:00
evgeny
c31bdf74d8
Add host audio output controls for voice recorder failures
2026-10-28 11:36:13 +01:00
evgeny
5db51e64de
Retry file resource cleanup when the core stops
2026-10-28 11:36:13 +01:00
evgeny
a8c9bc6049
Document file browser lifecycle and export error handling
2026-10-28 11:36:13 +01:00
evgeny
0aa63c98ee
Document Android file framing and error status contracts
2026-10-28 11:36:13 +01:00
evgeny
5290a2868d
Preserve file wake lock ownership and isolate cleanup errors
2026-10-28 11:36:13 +01:00
evgeny
4f06b4bca9
Reproduce file cleanup failures and verify native cancellation
2026-10-28 11:36:13 +01:00
evgeny
f60390c99c
Model native file failures and wake lock ownership on host
2026-10-28 11:36:13 +01:00
evgeny
529237dfc8
Add host document providers for file failure tests
2026-10-28 11:36:13 +01:00
evgeny
84e4667f5c
Describe avatar gallery and EXIF decoding behavior
2026-10-28 11:36:13 +01:00
evgeny
81f36d15c8
Clarify avatar editor ownership and UI publication state
2026-10-28 11:36:13 +01:00
evgeny
977992e834
Document Android avatar storage and publication contracts
2026-10-28 11:36:13 +01:00
evgeny
6f8baf82c7
Clarify Android playback recovery and diagnostics contracts
2026-10-28 11:36:13 +01:00
evgeny
00f8d8aeb0
Document Android call audio I/O and clock contracts
2026-10-28 11:36:13 +01:00
evgeny
7e502f9dd3
Verify headless server link commands and self-add rejection
2026-10-28 11:17:28 +01:00
evgeny
52dadf8b23
Document server link generation and channel addition commands
2026-10-28 11:13:34 +01:00
evgeny
f1ff394f83
Document server authorization contract and cover cancellation lifecycle
2026-10-28 11:10:27 +01:00
evgeny
bc296af99f
Test server link presentation and authorization errors in clients
2026-10-28 11:07:58 +01:00
evgeny
3daacc07b7
Select any joined channel when opening an Android server link
2026-10-28 11:06:24 +01:00
evgeny
f2d6561509
Route Android server links through channel selection and ordinary JOIN request
2026-10-28 11:05:23 +01:00
evgeny
a9cc6785a9
Expose authorized server addition to Android JNI
2026-10-28 11:04:56 +01:00
evgeny
f606c65858
Choose a local channel when opening a server link
2026-10-28 11:03:18 +01:00
evgeny
031b8b086b
Accept server links in channel invitation dialog
2026-10-28 11:03:00 +01:00
evgeny
667cd1b302
Expose server link kind and authorization failures in Qt
2026-10-28 11:02:59 +01:00
evgeny
3c2c8978df
Test authorized server JOIN over UDP and persistent addition keys
2026-10-28 11:01:35 +01:00
evgeny
3bc3e86529
Expose server links and channel addition through headless control
2026-10-28 10:59:16 +01:00
evgeny
7374b59c03
Authorize server join requests and run ordinary channel JOIN
2026-10-28 10:58:25 +01:00
evgeny
759a576a8d
Build server links from shared codec and published endpoints
2026-10-28 10:56:09 +01:00
evgeny
0b6a882480
Persist generated server addition credentials in configuration
2026-10-28 10:55:50 +01:00
evgeny
bd50140d26
Add explicit server and channel link kinds to shared codec
2026-10-28 10:55:25 +01:00
evgeny
b773656dad
Fix Windows entry point definitions in desktop GUI tests
2026-10-28 01:51:09 +01:00
evgeny
1ad00c12ad
Fix attachment sending, media manifests and storage defaults
2026-10-28 01:47:17 +01:00
evgeny
b86dcdd926
Fix member detail test bridge stubs after member editing API changes
2026-10-28 01:20:18 +01:00
evgeny
0ce248eb4a
Configure recording compressor and provide a valid shutdown test identity
2026-10-28 00:59:00 +01:00
evgeny
65f39b6bae
Test compressed recording rejection and ordered MainWindow shutdown
2026-10-28 00:59:00 +01:00
evgeny
fee528194b
Handle the tracked voice view during destruction and isolate test startup work
2026-10-28 00:59:00 +01:00
evgeny
f624fd6a75
Clarify SQLite snapshot lifetime during desktop teardown
2026-10-28 00:59:00 +01:00
evgeny
15ca1047ce
Cover desktop queue, attachment, DM, SQLite and media regressions
2026-10-28 00:59:00 +01:00
evgeny
9ee64d9a9f
Extend desktop command regression suite and verify SQLite stopping handoff
2026-10-28 00:59:00 +01:00
evgeny
72f4258410
Replace stale desktop architecture documentation and honor the temporary directory
2026-10-28 00:59:00 +01:00
evgeny
b4553db769
Reset selected GUI state during teardown and keep CHAT read watermarks separate from PM sequences
2026-10-28 00:59:00 +01:00
evgeny
d5f5cf407a
Finish desktop header ownership, state and model role contracts
2026-10-28 00:59:00 +01:00
evgeny
17772163cd
Complete MainWindow and MessageList contracts for commands and snapshots
2026-10-28 00:59:00 +01:00
evgeny
7556695cc5
Guard desktop modal owners and remove obsolete message helpers
2026-10-28 00:59:00 +01:00
evgeny
8b2b68d383
Own feedback requests and fence poll dialogs to their channel and lifetime
2026-10-28 00:59:00 +01:00
evgeny
d0bf402824
Document checked desktop snapshots and require matching media click gestures
2026-10-28 00:59:00 +01:00
evgeny
0942bf3d24
Use the running profile database directory for desktop media paths
2026-10-28 00:59:00 +01:00
evgeny
b87050900c
Deduplicate channel voice playback and resolve encrypted media snapshots
2026-10-28 00:59:00 +01:00
evgeny
6adfe5cf13
Centralize owned attachment downloads and key auto-play by channel and row
2026-10-28 00:59:00 +01:00
evgeny
0d6fd63e8f
Return attachment metadata as checked SQLite snapshots
2026-10-28 00:59:00 +01:00
evgeny
034df2939c
Reject incomplete DB reads and clock voice progress from PCM outside paint
2026-10-28 00:59:00 +01:00
evgeny
1235f770eb
Fence deferred message actions, release voice views and flush state before shutdown
2026-10-28 00:59:00 +01:00
evgeny
adefef675c
Detach GUI SQLite readers before worker teardown
2026-10-28 00:59:00 +01:00
evgeny
ce133a6acf
Remove obsolete desktop DB sync and GUI writes and enforce read-only queries
2026-10-28 00:59:00 +01:00
evgeny
f87ee63a1d
Preserve failed composer drafts and cancel PM submissions with a result
2026-10-28 00:59:00 +01:00
evgeny
9d48821af2
Own message list requests and acknowledge PM text persistence
2026-10-28 00:59:00 +01:00
evgeny
4c1512cb78
Release unsubmitted media resources and own desktop channel and PM requests
2026-10-28 00:59:00 +01:00
evgeny
707938d503
Bind remaining desktop commands atomically and cancel owned attachments
2026-10-28 00:59:00 +01:00
evgeny
d9abb1f025
Exercise both native owners throughout concurrent radio rebinding
2026-10-28 00:59:00 +01:00
evgeny
6063d3eb2c
Include the chat service API in the radio command fixture
2026-10-28 00:59:00 +01:00
evgeny
27388c1137
Link the radio command GUI test to Windows COM support
2026-10-28 00:59:00 +01:00
evgeny
bc78e0889a
Route MainWindow radio invitations through owned commands and test them
2026-10-28 00:59:00 +01:00
evgeny
0f36248d1e
Own and bind desktop radio call commands inside the bridge
2026-10-28 00:59:00 +01:00
evgeny
87b971569e
Check command ownership independently of the uasync timer pool
2026-10-28 00:59:00 +01:00
evgeny
85172f3ac0
Include miniaudio types for the settings test audio backend
2026-10-28 00:59:00 +01:00
evgeny
096c613666
Own MainWindow UI state requests through the settings bridge
2026-10-28 00:59:00 +01:00
evgeny
95e59df5c7
Complete call window header contracts and align test data rows
2026-10-28 00:59:00 +01:00
evgeny
fd4f092c9a
Decline incoming calls when closing their window and verify teardown
2026-10-28 00:59:00 +01:00
evgeny
9ef188b0d3
Link call command tests against the camera and codec modules
2026-10-28 00:59:00 +01:00
evgeny
de60f8fb15
Translate call command queue errors
2026-10-28 00:59:00 +01:00
evgeny
e23a7e27eb
Test call command ownership, allocation failures and core rebinding
2026-10-28 00:58:59 +01:00
evgeny
f3d18a57b5
Use owned call start and audio failure hangup from the main window
2026-10-28 00:58:59 +01:00
evgeny
299c1b86f8
Send call window actions through the owned bridge API
2026-10-28 00:58:59 +01:00
evgeny
4b4f48963e
Own desktop call commands and bind them atomically to the core
2026-10-28 00:58:59 +01:00
evgeny
138f6071b0
Guard capture-only image queue and test publication without Multimedia
2026-10-28 00:58:59 +01:00
evgeny
fe7cd73646
Document asynchronous desktop stream publication and settings
2026-10-28 00:58:59 +01:00
evgeny
cb95cf7d27
Document desktop file and live player window contracts
2026-10-28 00:58:59 +01:00
evgeny
cfa53af3a3
Translate video playback seek and read errors
2026-10-28 00:58:59 +01:00
evgeny
71f5cc9c94
Preserve early seek position and document playback lifecycle
2026-10-28 00:58:59 +01:00
evgeny
e371cc4dd9
Cover audio tail pause, replay, seeking and queued EOF callbacks
2026-10-28 00:58:59 +01:00
evgeny
ab37a06dad
Follow PCM node completion and keep seeking and replay consistent
2026-10-28 00:58:59 +01:00
evgeny
7fe90be7b2
Expose PCM drain state and cursor while file playback waits at EOF
2026-10-28 00:58:59 +01:00
evgeny
d8109770a0
Finish file playback only after video presentation and PCM drain
2026-10-28 00:58:59 +01:00
evgeny
4118149dbc
Reproduce file playback completion before queued media is presented
2026-10-28 00:58:59 +01:00
evgeny
7b3fe48657
Verify caption updates preserve continuous H264 and Opus playback
2026-10-28 00:58:59 +01:00
evgeny
5286388ada
Refresh multiview names without recreating stream tiles
2026-10-28 00:58:59 +01:00
evgeny
3ff5ca7009
Update live player captions independently of playback state
2026-10-28 00:58:59 +01:00
evgeny
9d2ddcc496
Reproduce stale stream captions without restarting playback
2026-10-28 00:58:59 +01:00
evgeny
debd3b45ef
Clarify preview validity and publisher audio state responsibilities
2026-10-28 00:58:59 +01:00
evgeny
a03abcaa02
Describe multiview tile lifetime, navigation and retry contracts
2026-10-28 00:58:59 +01:00
evgeny
1f0c7483e0
Describe stream bridge ownership, asynchronous requests and snapshots
2026-10-28 00:58:59 +01:00
evgeny
3960e28638
Document portal capture setup, frame lifetime and deferred shutdown
2026-10-28 00:58:59 +01:00
evgeny
d9eab97dee
Describe cursor overlay coordinates, thread ownership and outcomes
2026-10-28 00:58:59 +01:00
evgeny
615bdda36e
Document QP sampling and atomic stream source snapshot parsing
2026-10-28 00:58:59 +01:00
evgeny
ce4ff084cc
Target transfer allocation faults after the file dialog closes
2026-10-28 00:58:59 +01:00
evgeny
e05df14371
Keep file lifecycle test data isolated and suppress expected poll stalls
2026-10-28 00:58:59 +01:00
evgeny
07d9c17dec
Check empty file cancellation and keep test capture semantics aligned
2026-10-28 00:58:59 +01:00
evgeny
0419c83ab0
Use file bridge cancellation without browser forwarding helpers
2026-10-28 00:58:59 +01:00
evgeny
b04b262174
Cancel file batch commands directly through the owned bridge
2026-10-28 00:58:59 +01:00
evgeny
59cd456386
Allow cancellation of an empty file operation as a no-op
2026-10-28 00:58:59 +01:00
evgeny
ba44e243a9
Verify file command success against the real storage service
2026-10-28 00:58:59 +01:00
evgeny
83f8b0cbe2
Cover file snapshots, cancellation ownership and browser retries
2026-10-28 00:58:59 +01:00
evgeny
656d64ae74
Adapt member file browser capture tests to snapshot APIs
2026-10-28 00:58:59 +01:00
evgeny
bc90e88e72
Complete file browser operations when command posting fails
2026-10-28 00:58:59 +01:00
evgeny
7d789f68d4
Own desktop file commands and report cancellation through Qt
2026-10-28 00:58:59 +01:00
evgeny
142278d651
Reproduce cancelled and rejected desktop file commands
2026-10-28 00:58:59 +01:00
evgeny
7a4ce5d476
Clarify member file snapshots and browser helper contracts
2026-10-28 00:58:59 +01:00
evgeny
897da82b35
Document desktop member file batch and browser contracts
2026-10-28 00:58:59 +01:00
evgeny
8a831a0ed5
Remove deleted media blocks from the desktop module inventory
2026-10-28 00:58:59 +01:00
evgeny
5b07edcd98
Remove unused legacy media block reader and splitter
2026-10-28 00:58:59 +01:00
evgeny
4d2b59cb20
Disconnect unused legacy media blocks from desktop builds
2026-10-28 00:58:59 +01:00
evgeny
b7ca74d61d
Clarify link callback captures and their lifetime requirements
2026-10-28 00:58:59 +01:00
evgeny
25f0e21fb9
Document history selection state and delegate, link and scrolling contracts
2026-10-28 00:58:59 +01:00
evgeny
b95fd63c46
Clarify the frozen attachment snapshot and shared submission diagnostics
2026-10-28 00:58:59 +01:00
evgeny
73a5366f1c
Make regression callback cleanup safe after failed assertions
2026-10-28 00:58:59 +01:00
evgeny
58c2b5644d
Translate the shared channel send failure message
2026-10-28 00:58:59 +01:00
evgeny
939b458c33
Check synchronous attachment handlers cannot redirect or access a deleted composer
2026-10-28 00:58:59 +01:00
evgeny
45485f4fbc
Use one owned channel submission path and preserve the emitting context
2026-10-28 00:58:59 +01:00
evgeny
195b9c5afb
Keep send fault injection and callback lifetimes isolated in tests
2026-10-28 00:58:59 +01:00
evgeny
48a6f03d78
Cover channel send success, retry, cancellation and allocation failures end to end
2026-10-28 00:58:59 +01:00
evgeny
143fd51791
Transfer channel text requests through the owned composer bridge
2026-10-28 00:58:59 +01:00
evgeny
4d18a7015d
Report cancelled composer submissions before releasing their owned requests
2026-10-28 00:58:59 +01:00
evgeny
3c5e52a630
Keep ordinary channel drafts until their correlated save result
2026-10-28 00:58:59 +01:00
evgeny
9be3c4af48
Reproduce ordinary draft loss and missing cancellation acknowledgments
2026-10-28 00:58:59 +01:00
evgeny
88760510da
Document composer acknowledgments, attachment ownership and context snapshots
2026-10-28 00:58:59 +01:00
evgeny
cdaad39cf2
Verify corrected emoji insertion through the real composer connection
2026-10-28 00:58:59 +01:00
evgeny
214af09510
Correct emoji catalog mappings and log selected Unicode bytes
2026-10-28 00:58:59 +01:00
evgeny
5f90557a36
Reproduce emoji label mismatches through real picker selections
2026-10-28 00:58:59 +01:00
evgeny
d0755477f2
Clarify parentless emoji panel sizing and tab icon drawing
2026-10-28 00:58:59 +01:00
evgeny
b5d4c2be8b
Describe category tab rendering and palette behavior
2026-10-28 00:58:59 +01:00
evgeny
62175e04a8
Document emoji catalog side effects and picker icon lifetimes
2026-10-28 00:58:59 +01:00
evgeny
8fddf854de
Verify member save requests owner shutdown if rollback remains open
2026-10-28 00:58:59 +01:00
evgeny
1515a37b8a
Verify fresh role snapshots and admin transfer cancellation ownership
2026-10-28 00:58:59 +01:00
evgeny
b78fd7a8e6
Match editable roles to the same owner version read from SQLite
2026-10-28 00:58:59 +01:00
evgeny
bc5e6aa5a5
Document cancellation acknowledgments for member edit commands
2026-10-28 00:58:59 +01:00
evgeny
8f02e1ec2d
Read member edit capabilities and fields in one GUI snapshot
2026-10-28 00:58:59 +01:00
evgeny
84bf74e034
Limit commit fault injection to the member save transaction
2026-10-28 00:58:59 +01:00
evgeny
f11ab51ccc
Check stale forms, read failures and member command memory ownership
2026-10-28 00:58:59 +01:00
evgeny
49cbfe1ae0
Block property saves without a successfully read member snapshot
2026-10-28 00:58:59 +01:00
evgeny
d73d62db48
Reject rename saves when the initial nickname read failed
2026-10-28 00:58:59 +01:00
evgeny
2d79023c5e
Verify member save rollback across nickname SQL and owner changes
2026-10-28 00:58:59 +01:00
evgeny
279d7da51c
Name member save status widgets for regression checks
2026-10-28 00:58:59 +01:00
evgeny
f537f302c6
Exercise member dialogs against a real worker and SQLite failures
2026-10-28 00:58:59 +01:00
evgeny
5842855583
Confirm atomic member property saves before closing the dialog
2026-10-28 00:58:59 +01:00
evgeny
7e412d950a
Bind owned admin transfer requests to the selected database
2026-10-28 00:58:59 +01:00
evgeny
be11fbb8b6
Keep rename dialog open until the core confirms its write
2026-10-28 00:58:59 +01:00
evgeny
096e721faa
Return correlated member save and cancellation results to live GUI contexts
2026-10-28 00:58:59 +01:00
evgeny
1431507ac5
Save member nicknames and owner changes in one core transaction
2026-10-28 00:58:59 +01:00
evgeny
30a15f6cfd
Document audio settings snapshots and device test behavior
2026-10-28 00:58:58 +01:00
evgeny
005d136dc7
Make Android microphone capture stoppable and cleanup resilient
...
Use nonblocking AudioRecord reads with data and timestamp deadlines. Serialize idempotent close, finish interrupted joins before release, isolate callback failures, and abort stereo fallback when partial-record cleanup fails.
Close failed shared readers to new subscriptions, roll back worker startup, isolate observers, preserve interrupt state, and release the last consumer exactly once. Add an independent capture-tests JVM module to the standard Android unit-test task.
Validation: 38 capture scenarios (25 AudioRecord plus 13 PCM/PTT), 455 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed.
2026-10-28 00:53:01 +01:00
evgeny
74035fc043
Recover Android media audio sessions with explicit resource ownership
...
Retry monitor and capture setup after invalidating failed attempts. Bind output leases and callbacks to registration identity, cancel confirmation timers, and keep hardware cleanup independent from device enumeration during call handoff.
Commit profiles only after successful storage writes, acquire mode ownership before Android side effects, and reject blocking operations on main or the control worker. Keep the app singleton backed by an isolated MediaAudioSession with a single executor.
Validation: 30 media session scenarios, 420 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed.
2026-10-28 00:28:42 +01:00
evgeny
a6ae4df3ff
Harden Android audio router lifecycle and route selection
...
Roll back failed startup, finish independent stop cleanup, invalidate stale device and Telecom callbacks, and serialize router mutations. Publish input/output targets after accepted selection and support retries of rejected requests.
Separate modern communication device selection from legacy SCO, refresh replaced descriptors, and support A2DP and USB input-only devices in per-track mode. Clarify routing and observer ownership contracts.
Validation: 45 router scenarios, 390 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed. Previous router fails 25 of the 30 new cases.
2026-10-27 23:53:21 +01:00
evgeny
0d45bdbad6
Own Android incoming call alerts and notification actions
...
Bind notification tokens to full call IDs and call kinds, cancel actions on stop, and reject decline callbacks after ringing ends. Serialize alert state on main and recover notification channel setup after Android API failures.
Keep sound independent of wake-lock and notification failures. Remove orphaned notifications on cold start, preserve idempotent alerts during duplicate delivery and language changes, and document lifecycle contracts.
Validation: 32 new lifecycle cases, 360 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed.
2026-10-27 23:31:56 +01:00
evgeny
5a6eabf4fc
Fix Android alert profiles and playback resource ownership
...
Configure audio attributes before MediaPlayer preparation, keep vibration independent from sound failures, and guard loop/focus cleanup against stale callbacks. Preserve ringback players on repeated phase requests.
Add 35 alert lifecycle tests against real Kotlin sources with controlled Android API failures. Validation: 328 JVM tests, assembleDebug, core build, and full check.sh (225 tests plus proxy/burst/load) passed. Previous sources fail 32 of the 35 new cases.
2026-10-27 23:12:11 +01:00
evgeny
f4ef949482
Guard Android radio configuration with worker-owned tasks
2026-10-27 22:41:30 +01:00
evgeny
f71aff3e11
Document Android radio automatic capture and background window contracts
2026-10-27 21:58:02 +01:00
evgeny
d6dc6234d5
Recover SIM observers without losing healthy subscription state
2026-10-27 21:49:15 +01:00
evgeny
6a38eaa4eb
Compile the real SIM monitor in the Android host tests
2026-10-27 21:39:26 +01:00
evgeny
6e6260ab29
Add controlled Telephony fixtures for Android SIM monitoring
2026-10-27 21:35:45 +01:00
evgeny
142cc1a7a1
Verify Android phone state publishing and JNI restart recovery
2026-10-27 21:30:07 +01:00
evgeny
4859d03f29
Return Android phone state queue acceptance through JNI
2026-10-27 21:25:51 +01:00
evgeny
067c1cd496
Own queued Android phone state data within the worker lifetime
2026-10-27 21:23:18 +01:00
evgeny
2b55d9225a
Cover Android phone command cancellation and publication ownership
2026-10-27 21:21:52 +01:00
evgeny
9e679462d4
Expose Android phone state posting through the C bridge API
2026-10-27 21:18:29 +01:00
evgeny
b92727e66a
Make proximity observation safe across failures and restarts
2026-10-27 20:57:24 +01:00
evgeny
0d3ffb8736
Add a host sensor fixture for ProximityManager lifecycle checks
2026-10-27 20:54:40 +01:00
evgeny
da85971969
Verify CoreActivity against Android JNI and native activity modes
2026-10-27 20:44:34 +01:00
evgeny
ed1f4d8ea8
Preserve pending CoreActivity intent when the native queue rejects a request
2026-10-27 20:39:19 +01:00
evgeny
f941066934
Cover rejected activity commands at the native queue boundary
2026-10-27 20:11:15 +01:00
evgeny
61266986e5
Route bridge activity requests through the worker owner
2026-10-27 20:10:00 +01:00
evgeny
4bece684da
Queue Android activity updates while holding the worker lifetime lock
2026-10-27 20:07:51 +01:00
evgeny
1ed110d47c
Validate CoreActivity ownership before mutations and cache completed JNI requests
2026-10-27 20:02:55 +01:00
evgeny
b3b04b4d5a
Add regressions for CoreActivity thread ownership and request caching
2026-10-27 19:53:53 +01:00
evgeny
29e6c977f2
Document Android worker cancellation and shutdown ownership
2026-10-27 19:30:29 +01:00
evgeny
64c1019a52
Verify cancelled Android workers retain callbacks and keep SQLite owned by the core
2026-10-27 19:30:29 +01:00
evgeny
aca5f806c1
Keep worker callbacks atomic and verify failed shutdown preserves owners
2026-10-27 19:16:30 +01:00
evgeny
823bae076f
Run Android service shutdown off the main thread and await it before startup
2026-10-27 19:07:05 +01:00
evgeny
d6ea893f16
Preserve bridge callbacks until native worker shutdown succeeds
2026-10-27 18:57:36 +01:00
evgeny
d83d58c874
Keep Android shutdown independent of a retiring service
2026-10-27 18:55:29 +01:00
evgeny
1c82432de9
Own Android worker threads until cleanup and join finish
2026-10-27 18:52:46 +01:00
evgeny
69b87ef3ed
Verify Android startup readiness with the main looper and native worker
2026-10-27 18:33:49 +01:00
evgeny
11b3ceaa9b
Wait for Android core readiness before applying settings
2026-10-27 18:27:14 +01:00
evgeny
8e0090b54b
Track Android startup until native core readiness is confirmed
2026-10-27 18:20:48 +01:00
evgeny
a09b67a70f
Fix the key regeneration job type in ChatViewModel
2026-10-27 18:10:09 +01:00
evgeny
848247bde6
Exercise Android identity regeneration through JNI on devices
2026-10-27 18:08:29 +01:00
evgeny
50ea132c15
Recreate the Android core when regenerating its identity
2026-10-27 18:05:06 +01:00
evgeny
2ff51d0016
Persist Android identities atomically before updating config
2026-10-27 17:51:41 +01:00
evgeny
02ec6a50a5
Verify config saves survive cancellation of their submitting scope
2026-10-27 17:35:26 +01:00
evgeny
44f6d8a5bc
Verify partial node reads and reject malformed address rows
2026-10-27 17:27:04 +01:00
evgeny
30a205340a
Build node diagnostics from one checked SQLite snapshot
2026-10-27 17:27:04 +01:00
evgeny
dc1f3260e3
Add node page snapshot and SQL failure regressions
2026-10-27 17:27:04 +01:00
evgeny
d582f2ea77
Clarify settings dialog drafts, save semantics and borrowed dependencies
2026-10-27 17:27:04 +01:00
evgeny
2dd0970295
Document storage, network and database settings page contracts
2026-10-27 17:27:04 +01:00
evgeny
65c6bbc03b
Distinguish optimize SQL completion from integrity check results
2026-10-27 17:27:04 +01:00
evgeny
6ba86bb1df
Add SQLite and Qt database maintenance regression tests
2026-10-27 17:27:04 +01:00
evgeny
5233513fcc
Remove unused settings test scaffolding
2026-10-27 17:27:04 +01:00
evgeny
8323be7272
Cover settings string limits, snapshots and late allocation failures
2026-10-27 17:27:04 +01:00
evgeny
e3b0eebc2b
Eliminate borrowed save commands from the desktop settings dialog
2026-10-27 17:27:04 +01:00
evgeny
4d3b294ee9
Remove borrowed audio settings commands and duplicated serialization
2026-10-27 17:27:04 +01:00
evgeny
a1f925c789
Transfer storage settings snapshots through the owned bridge API
2026-10-27 17:27:04 +01:00
evgeny
f1f5d33788
Centralize owned settings and name requests in the GUI bridge
2026-10-27 17:27:04 +01:00
evgeny
05b0ef50e4
Add real desktop settings save ownership regression tests
2026-10-27 17:27:04 +01:00
evgeny
5382b686e9
Keep config snapshots and network diagnostics precise
2026-10-27 17:18:13 +01:00
evgeny
893e714422
Show a specific error when database reset cannot finish
2026-10-27 17:18:13 +01:00
evgeny
3b42547740
Report native Android database cleanup failures accurately
2026-10-27 17:18:13 +01:00
evgeny
b8e7b18937
Serialize Android config transactions and await them through UI lifecycles
2026-10-27 17:18:13 +01:00
evgeny
3ba581770c
Build Android configuration from one preferences and key snapshot
2026-10-27 17:18:13 +01:00
evgeny
482026e208
Add an application-owned queue for atomic Android config writes
2026-10-27 17:18:13 +01:00
evgeny
78f34a3617
Clarify stream resource and voice route ownership wording
2026-10-27 15:25:33 +01:00
evgeny
4dc02d74b8
Document sound manager recovery, session ownership and callback rules
2026-10-27 15:23:38 +01:00
evgeny
027a4b4d9e
Clarify desktop voice recording and playback contracts
2026-10-27 15:21:31 +01:00
evgeny
22460a1259
Merge remote-tracking branch 'origin/master'
2026-10-27 15:18:21 +01:00
evgeny
8d8fe8d6bf
Fix sound settings request ownership on rejection and cancellation
2026-10-27 15:13:26 +01:00
evgeny
821f1b8a92
Add sound settings request ownership regressions
2026-10-27 15:11:22 +01:00
evgeny
6d925fecd1
Serialize Android network snapshots across monitor and core lifecycles
2026-10-27 15:04:27 +01:00
evgeny
e3aa7839ae
Include socket refresh monitoring in isolated host tests
2026-10-27 15:04:27 +01:00
evgeny
97a899c0c3
Model delayed network callbacks and config workers in host tests
2026-10-27 15:04:27 +01:00
evgeny
7b526ba681
Own Android network activity registrations across start and stop
2026-10-27 15:04:27 +01:00
evgeny
f89c1975f7
Expose network activity callbacks to the isolated Android host tests
2026-10-27 15:04:27 +01:00
evgeny
8a22afc42d
Add controlled host fixtures for Android network listeners
2026-10-27 15:04:27 +01:00
evgeny
a6ab797659
Document audio device lifetime and voice worker contracts
2026-10-27 14:47:59 +01:00
evgeny
eab9223f39
Clarify audio queue, capture clock and PCM reserve contracts
2026-10-27 14:43:24 +01:00
evgeny
799a71d361
Merge remote-tracking branch 'origin/master'
2026-10-27 14:32:36 +01:00
evgeny
c7dadb0539
Clarify optional audio period and PTT latch release wording
2026-10-27 14:31:31 +01:00
evgeny
4389b511bf
Align audio ownership comments with lease and recovery behavior
2026-10-27 14:28:02 +01:00
evgeny
29e2afc3ce
Describe shared audio capture and buffer tuning contracts
2026-10-27 14:27:20 +01:00
evgeny
cb49b9d4a4
Complete desktop radio UI and audio engine contracts
2026-10-27 14:24:46 +01:00
evgeny
fb461cd56c
Keep merged message link range documentation concise
2026-10-27 14:23:59 +01:00
evgeny
7f0c080492
Validate saved Android socket ports before reuse
2026-10-27 14:22:32 +01:00
evgeny
080c7a5fd5
Clarify Android auto socket identity and port reuse contracts
2026-10-27 14:22:32 +01:00
evgeny
0fe14699b0
Document Android conversation targets and test message ID conversion
2026-10-27 14:22:32 +01:00
evgeny
3d48024fd8
Trim desktop message link punctuation in linear time
2026-10-27 14:22:32 +01:00
evgeny
f04637a257
Keep Android message link parsing linear and validate authority
2026-10-27 14:22:32 +01:00
evgeny
3e96e429eb
Preserve unsigned node IDs in Android invite previews
...
Encode JNI node IDs as decimal strings and decode both uint64 fields without floating point or signed parsing. Compare all invitation fields and binary contents. Cover boundary IDs, malformed JSON types, and model equality with nine JVM tests. Native build, invite codec/build tests, and both debug APK ABIs passed.
2026-10-27 14:22:32 +01:00
evgeny
254029be63
Merge remote-tracking branch 'origin/master'
2026-10-27 14:19:09 +01:00
evgeny
b5063f435b
Explain radio settings reload and publication ordering
2026-10-27 14:12:49 +01:00
evgeny
0bac2566c9
Merge remote-tracking branch 'origin/master'
2026-10-27 14:11:47 +01:00
evgeny
8a96e5d1c7
Verify radio settings order during reentrant reload
2026-10-27 14:10:53 +01:00
evgeny
2226f54a56
Invalidate stale radio settings requests on reload
2026-10-27 14:08:22 +01:00
evgeny
b4186dfae3
Cover radio settings recovery across core restarts
2026-10-27 14:06:05 +01:00
evgeny
0132a984dd
Describe bounded control flow and corrected monitor behavior
2026-10-27 14:01:25 +01:00
evgeny
cb50e268a4
Update monitor usage and asynchronous TCP architecture docs
2026-10-27 14:00:49 +01:00
evgeny
89c27b8fca
Clarify control Action replies and graph display contracts
2026-10-27 14:00:49 +01:00
evgeny
4daa0e7f6b
Document monitor TX ownership, deadlines and subscription bounds
2026-10-27 13:59:42 +01:00
evgeny
9e0cd3eddf
Test control backpressure, snapshot mutations and deferred cleanup
2026-10-27 13:56:03 +01:00
evgeny
5c2ba74e3e
Document desktop PTT chords and portal lifecycle
2026-10-27 13:54:55 +01:00
evgeny
ae594e1e1b
Test bounded monitor TCP sends and graph reconnect behavior
2026-10-27 13:47:41 +01:00
evgeny
488d8a601f
Apply control TCP backpressure and stream node snapshots by ID
2026-10-27 13:46:01 +01:00
evgeny
e9391c9790
Clarify desktop video modes and encoder output contracts
2026-10-27 13:43:00 +01:00
evgeny
b1510ab437
Describe camera worker lifecycle and capture signals
2026-10-27 13:39:12 +01:00
evgeny
ce06fe242b
Queue monitor TCP commands and validate matched responses
2026-10-27 13:38:40 +01:00
evgeny
0594be9513
Document camera IPC framing and shared buffer ownership
2026-10-27 13:38:07 +01:00
evgeny
2d12dfb975
Correct monitor graph units and refresh cleared channel values
2026-10-27 13:34:04 +01:00
evgeny
4f27ce35a5
Fix control Action acknowledgements and validate command payloads
2026-10-27 13:33:13 +01:00
evgeny
6fdba59885
Correct cache cleanup glob documentation
2026-10-27 13:32:12 +01:00
evgeny
2d255afa6c
Document avatar manager jobs and Lights Out behavior
2026-10-27 13:29:54 +01:00
evgeny
8691608924
Clarify avatar cache and image viewer contracts
2026-10-27 13:27:55 +01:00
evgeny
fd80b35f8f
Merge remote-tracking branch 'origin/master'
2026-10-27 13:17:50 +01:00
evgeny
7eaeb0e2f9
Preserve documentation audit and Android bridge fixes
2026-10-27 13:17:22 +01:00
evgeny
ae4fb89bef
Keep validation errors visible after explicit join attempts
2026-10-27 12:57:20 +01:00
evgeny
d730dee925
Use accurate shared join errors and preserve result status
2026-10-27 12:56:13 +01:00
evgeny
fcbec01c07
Translate shared join and offer failure messages
2026-10-27 12:55:13 +01:00
evgeny
16a68652ae
Add UI regression tests for join and offer result errors
2026-10-27 12:53:47 +01:00
evgeny
eca03747b3
Log desktop join and offer results with request context
2026-10-27 12:53:21 +01:00
evgeny
b62ca4093e
Report precise avatar editor source validation failures
2026-10-27 12:30:21 +01:00
evgeny
6c1b429e91
Check avatar editor coordinates after EXIF rotation
2026-10-27 12:29:20 +01:00
evgeny
d72a2c092e
Log avatar preparation generation and teardown state
2026-10-27 12:28:12 +01:00
evgeny
90d6f78a9e
Resolve Qt 5 collection deduction in avatar and settings code
2026-10-27 12:26:58 +01:00
evgeny
f54aa17e55
Observe buttonless pointer moves to cancel interrupted crop drags
2026-10-27 12:25:03 +01:00
evgeny
803d5f6583
Trace crop pointer state when a drag loses its button
2026-10-27 12:23:12 +01:00
evgeny
8c30c8e6ce
Isolate avatar preparation generations and guard reentrant signals
2026-10-27 12:19:31 +01:00
evgeny
d307492d22
Cover avatar preparation cancellation and reentrant owner deletion
2026-10-27 12:17:06 +01:00
evgeny
b95d3628bf
Check crop preview rendering and interrupted drags
2026-10-27 12:15:17 +01:00
evgeny
0a69864d10
Guard avatar upload controls across nested file and crop dialogs
2026-10-27 12:15:17 +01:00
evgeny
9c782be562
Bound avatar crop geometry and protect asynchronous preview lifetime
2026-10-27 12:10:36 +01:00
evgeny
bfc280310d
Cover avatar crop input bounds and modal owner lifetime
2026-10-27 12:07:36 +01:00
evgeny
c25ed7c243
Report readable causes for malformed avatar blobs
2026-10-27 11:57:30 +01:00
evgeny
138de8d446
Document retryable avatar snapshot read failures
2026-10-27 11:57:30 +01:00
evgeny
90a588cfc1
Separate unpublished avatars from malformed published storage
2026-10-27 11:57:30 +01:00
evgeny
7d4da3a54d
Treat an unpublished avatar as a successful empty read
2026-10-27 11:57:30 +01:00
evgeny
a701580d54
Exercise main window destruction inside channel settings exec
2026-10-27 11:57:30 +01:00
evgeny
bd105c630d
Validate avatar read recovery and bounded typed blobs
2026-10-27 11:57:30 +01:00
evgeny
6106fc1b5d
Keep transient SQLite failures out of the avatar cache
2026-10-27 11:57:30 +01:00
evgeny
905d30ceaf
Distinguish failed avatar reads from committed empty blobs
2026-10-27 11:57:30 +01:00
evgeny
95e88ac66f
Reproduce avatar cache poisoning after a transient SQL read error
2026-10-27 11:57:30 +01:00
evgeny
9fdd2dc9fb
Specify the native channel ID range in GUI contracts
2026-10-27 11:57:30 +01:00
evgeny
d4a969dc38
Match channel IDs to the native signed integer range
2026-10-27 11:57:30 +01:00
evgeny
cf4a209837
Own group avatar commands and preserve pending result identity
2026-10-27 11:57:30 +01:00
evgeny
6c0aa98508
Cover group avatar publication ownership and result correlation
2026-10-27 11:57:30 +01:00
evgeny
ddb373d445
Exercise settings retries and deletion changes during confirmation
2026-10-27 11:57:30 +01:00
evgeny
cba3f4f75a
Translate channel settings availability and queue errors
2026-10-27 11:57:30 +01:00
evgeny
3c6200f9c3
Keep channel settings alive safely across the main window loop
2026-10-27 11:57:30 +01:00
evgeny
74bcf91407
Own channel settings requests and guard nested dialogs
2026-10-27 11:57:30 +01:00
evgeny
271cfcd2f8
Cover channel settings queue failures and nested dialog lifetime
2026-10-27 11:57:30 +01:00
evgeny
f12c7d072a
test(chat): read complete media manifests with JSON whitespace
2026-10-27 11:48:09 +01:00
evgeny
9b24c1f012
fix(chat): preserve media and local state on incomplete database reads
2026-10-27 11:48:09 +01:00
evgeny
7c050eb7ef
fix(chat): publish complete peer caches and clean pending JOIN state
2026-10-27 11:48:09 +01:00
evgeny
ce3287ac94
fix(chat): verify incoming JOIN profiles before local insertion
2026-10-27 11:48:09 +01:00
evgeny
054ade0dcd
fix(chat): select invite peers and read signed addresses consistently
2026-10-27 11:48:09 +01:00
evgeny
1efd8fb26c
fix(chat): validate headless requests and complete media replies safely
2026-10-27 11:48:09 +01:00
evgeny
c73090759f
fix(chat): commit global names with signed node and member profiles
2026-10-27 11:48:09 +01:00
evgeny
0656f24a7c
fix(chat): own Whisper jobs per instance and defer route UI events
2026-10-27 11:48:09 +01:00
evgeny
cb9c04ff61
test(chat): distinguish route event deletion flag from routing API
2026-10-27 11:48:09 +01:00
evgeny
33556fefea
test(chat): exercise channel deletion from a topology notification
2026-10-27 11:48:09 +01:00
evgeny
189ae43a7c
docs(chat): distinguish committed core readiness from complete service startup
2026-10-27 11:48:09 +01:00
evgeny
a4edd34695
fix(chat): retain SQL error codes when SQLite supplies no message
2026-10-27 11:48:09 +01:00
evgeny
e28386c868
fix(chat): reject outer transactions before preparing shared service resources
2026-10-27 11:48:09 +01:00
evgeny
8151fc5a9c
test(chat): cover startup admission, saved channel activation, and owner-close recovery
2026-10-27 11:48:09 +01:00
evgeny
1c6d203754
fix(chat): diagnose channel catalog failures with SQL status and shape
2026-10-27 11:48:09 +01:00
evgeny
fb7846780b
test(chat): verify startup metadata rollback and required callback allocation failures
2026-10-27 11:48:09 +01:00
evgeny
3b0ae79527
refactor(chat): keep the chat identity bound to its core instance
2026-10-27 11:48:09 +01:00
evgeny
6c777d4426
fix(chat): reject inconsistent repeated core initialization
2026-10-27 11:48:09 +01:00
evgeny
63406a9742
refactor(chat): borrow SQLite exclusively from the running core
2026-10-27 11:48:09 +01:00
evgeny
6f9723f8ce
fix(chat): commit startup metadata before activating channels and publishing readiness
2026-10-27 11:48:09 +01:00
evgeny
e3bd66f0b7
test(chat): reproduce ready startup after a required subscription fails
2026-10-27 11:48:09 +01:00
evgeny
ed00f1ad9a
fix(chat): require both member notification subscriptions at startup
2026-10-27 11:48:09 +01:00
evgeny
1aface994f
fix(routing): report nodeinfo subscription allocation failure
2026-10-27 11:48:09 +01:00
evgeny
6429d4ca23
Merge desktop audit with updated chat contracts
...
Keep the complete member snapshot limit at 65535 and preserve SQL finalization checks, unsigned sorting, and owned GUI commands. Retain dynamic ETCP diagnostics with checked event lengths and no partial event on allocation failure. Validated three native and six GUI test targets and rebuilt vibechat.
2026-10-27 11:12:51 +01:00
evgeny
c7618ba62b
Limit group autoconnect indicators to group rows
2026-10-27 10:59:43 +01:00
evgeny
20ffa3fc6c
Include the channel event byte type explicitly
2026-10-27 10:59:01 +01:00
evgeny
842083cdeb
Exercise valid and stale channel menu actions
2026-10-27 10:57:21 +01:00
evgeny
1e3633ee56
Document channel list lifetime and validate row counters
2026-10-27 10:56:43 +01:00
evgeny
8552cf8316
Update isolated channel consumers for owned bridge requests
2026-10-27 10:56:43 +01:00
evgeny
abc2f8efb6
Preserve channel state and own presence requests safely
2026-10-27 10:55:11 +01:00
evgeny
4d4fafc00b
Isolate channel request cancellation from core startup tasks
2026-10-27 10:54:26 +01:00
evgeny
50fff66412
Cover channel reload state and pending request ownership
2026-10-27 10:53:23 +01:00
evgeny
f81f6299b4
Bound channel row painting and support pixel-sized fonts
2026-10-27 10:51:20 +01:00
evgeny
282bf99d4a
Cover channel delegate paint bounds and pixel fonts
2026-10-27 10:50:18 +01:00
evgeny
2822fa53e3
Clarify member snapshot output and boundary test contracts
2026-10-27 10:44:53 +01:00
evgeny
6104086d5b
Bound member snapshot events and sort roster without quadratic copies
2026-10-27 10:37:33 +01:00
evgeny
34a95b7733
Route member diagnostics safely across panels and modal actions
2026-10-27 10:20:07 +01:00
evgeny
a8958865bc
Keep member rows consistent and own queued refresh requests
2026-10-27 09:48:38 +01:00
evgeny
6390c5db6a
docs(chat): record preference full suite and GUI persistence validation
2026-10-27 07:37:41 +01:00
evgeny
ee37cf0a55
docs(chat): record committed preference behavior and regression evidence
2026-10-27 07:34:44 +01:00
evgeny
655733e272
docs(chat): define preference return codes and bounded trampoline inputs
2026-10-27 07:33:08 +01:00
evgeny
89e2a2f22b
test(chat): reject a valid signed profile stored with the wrong SQLite type
2026-10-27 07:31:16 +01:00
evgeny
9342795008
fix(chat): check stored text types before SQLite converts their values
2026-10-27 07:31:16 +01:00
evgeny
fe5cf910e1
test(chat): cover preference read errors and all queued sound form values
2026-10-27 07:29:48 +01:00
evgeny
09e3ba62ef
test(chat): verify preference rollback, committed sound delivery, and request validation
2026-10-27 07:27:44 +01:00
evgeny
fdb0381f5c
fix(gui): retain sound preference keys until the queued request is copied
2026-10-27 07:25:26 +01:00
evgeny
81fdbf90e1
fix(chat): skip initial sound publication when preference reading fails
2026-10-27 07:25:26 +01:00
evgeny
fec2cecdb3
fix(chat): commit UI preferences before reporting or broadcasting them
2026-10-27 07:24:30 +01:00
evgeny
5360453960
test(chat): reproduce committed UI state after a finalization error
2026-10-27 07:22:45 +01:00
evgeny
34e729d988
docs(chat): record owner editor fault matrix and cross-platform validation
2026-10-27 07:21:26 +01:00
evgeny
11135283e7
docs(chat): document canonical owner versions and atomic editor behavior
2026-10-27 07:17:23 +01:00
evgeny
c8e1d120ba
fix(android): include the owner block size contract for role parsing
2026-10-27 07:16:37 +01:00
evgeny
104b702653
test(chat): inject owner editor allocation failures before commit
2026-10-27 07:15:15 +01:00
evgeny
be311cf144
test(chat): include the member display contract explicitly
2026-10-27 07:13:41 +01:00
evgeny
9e10f7a357
test(chat): cover long role histories and deletion from owner commit callbacks
2026-10-27 07:13:19 +01:00
evgeny
6224c017da
fix(chat): reject truncated or malformed stored owner JSON before comparison
2026-10-27 07:13:19 +01:00
evgeny
a14fdf6d83
test(chat): cover owner edit conflicts, retry isolation, histories, and GUI patches
2026-10-27 07:12:13 +01:00
evgeny
98741e47d8
docs(chat): define owner editor conflict, history, and patch contracts
2026-10-27 07:09:50 +01:00
evgeny
e3ea2ef78f
fix(chat): preserve unedited GUI tags and read complete role histories
2026-10-27 07:08:33 +01:00
evgeny
b7f799ebe5
test(chat): target the complete owner snapshot query
2026-10-27 07:07:30 +01:00
evgeny
cde8c7b8e5
fix(chat): commit owner edits against a locked baseline and retain retry state
2026-10-27 07:06:09 +01:00
evgeny
a9618169ab
fix(chat): load complete verified owner snapshots and validate editor input
2026-10-27 07:04:28 +01:00
evgeny
16d7fc4fb5
fix(chat): validate owner versions and complete member reads before mutation
2026-10-27 07:02:44 +01:00
evgeny
91fb996a09
test(chat): reproduce owner editor load after SQL finalization error
2026-10-27 07:02:03 +01:00
evgeny
f0d864bfd9
docs(chat): record profile full suite and sanitizer fixture correction
2026-10-27 07:00:13 +01:00
evgeny
59d8065fae
test(chat): clear borrowed fault selector before its scope ends
2026-10-27 06:58:14 +01:00
evgeny
247952e9ed
docs(chat): record signed profile transactions and callback fault coverage
2026-10-27 06:56:56 +01:00
evgeny
8bf09d9513
docs(sqlite): clarify verified node and owner write failures
2026-10-27 06:55:54 +01:00
evgeny
f66c4e928e
fix(member-files): preserve the original lookup error in ACL diagnostics
2026-10-27 06:50:02 +01:00
evgeny
cce633b5b0
test(chat): reject negative owner results before checking change flags
2026-10-27 06:48:29 +01:00
evgeny
beac8afba8
test(chat): cover profile trust, owner rollback, avatar policy, and startup failure
2026-10-27 06:46:15 +01:00
evgeny
ecb589c670
test(chat): exercise atomic profile updates, no-ops, and callback deletion
2026-10-27 06:42:32 +01:00
evgeny
ebb89e1bc3
test(chat): add profile transaction faults and committed notification observer
2026-10-27 06:39:57 +01:00
evgeny
70a4c669dc
test(chat): verify nested member callback cancellation and namespace lifetime
2026-10-27 06:37:09 +01:00
evgeny
f1d80922c7
fix(chat): fail startup when the JOIN apply subscription cannot be installed
2026-10-27 06:35:37 +01:00
evgeny
64adb799e9
fix(chat): retain member notification data across callback cancellation
2026-10-27 06:35:37 +01:00
evgeny
6efe3000d0
fix(chat): verify existing JOIN before signing local profile updates
2026-10-27 06:27:01 +01:00
evgeny
3195167ff3
fix(chat): commit signed profile updates under one version lock
2026-10-27 06:23:48 +01:00
evgeny
1cc60a3079
fix(json): decode Unicode escapes without losing subsequent profile fields
2026-10-27 06:21:05 +01:00
evgeny
20c095f2f3
fix(chat): preserve member transaction boundaries when rollback fails
2026-10-27 06:15:20 +01:00
evgeny
b52e5f5489
fix(chat): validate complete signed profile before publishing read output
2026-10-27 06:13:12 +01:00
evgeny
30d58a4bde
test(chat): reproduce successful signed profile read after finalization error
2026-10-27 06:12:04 +01:00
evgeny
1843a492bc
docs(chat): record full JSON export validation
2026-10-27 06:07:29 +01:00
evgeny
463041a87f
docs(chat): describe complete JSON exports and listing failure tests
2026-10-27 06:06:55 +01:00
evgeny
cb0b71aec1
test(chat): roundtrip every ASCII control byte in channel JSON
2026-10-27 06:00:15 +01:00
evgeny
f5270db52b
test(chat): verify lossless JSON, corrupted rows, and deferred channel visibility
2026-10-27 05:58:08 +01:00
evgeny
92317bf383
test(chat): add JSON SQL faults and exact-capacity contract checks
2026-10-27 05:56:46 +01:00
evgeny
29e15254a1
fix(chat): reject truncated SQLite text in exported JSON
2026-10-27 05:53:11 +01:00
evgeny
d5070a5df6
fix(chat): return complete escaped JSON and propagate listing SQL failures
2026-10-27 05:51:26 +01:00
evgeny
5fe66585b6
test(chat): reproduce invalid JSON for a signed channel name
2026-10-27 05:49:58 +01:00
evgeny
774fb66bb9
docs(chat): record full member and diagnostics validation
2026-10-27 05:46:06 +01:00
evgeny
cfe4c24584
docs(chat): record member, mute, and diagnostics audit evidence
2026-10-27 05:42:28 +01:00
evgeny
cec3e27aab
test(chat): make diagnostic name expectation explicit in member fixture
2026-10-27 05:40:10 +01:00
evgeny
5af4572ae1
test(chat): verify invalid requests and diagnostic name lookup failures
2026-10-27 05:39:05 +01:00
evgeny
618c68268c
docs(chat): specify complete member snapshots and committed local mute
2026-10-27 05:38:07 +01:00
evgeny
41b3503398
fix(chat): bound diagnostic counters and invalid mute request parsing
2026-10-27 05:37:05 +01:00
evgeny
fd4c13f219
test(chat): give diagnostic links a valid empty ACK queue
2026-10-27 05:35:27 +01:00
evgeny
a9bc410aad
test(chat): include complete ETCP types for diagnostic fixture
2026-10-27 05:34:32 +01:00
evgeny
7279967a29
test(chat): cover member limits, radio commits, and large diagnostics
2026-10-27 05:33:33 +01:00
evgeny
8de9cfb1d2
fix(chat): build complete diagnostics with checked buffers and SQL results
2026-10-27 05:31:19 +01:00
evgeny
2504dd0b40
test(chat): add member SQL and committed radio state observers
2026-10-27 05:29:34 +01:00
evgeny
1bb824fb8a
fix(chat): commit radio mute before applying cache and reporting success
2026-10-27 05:24:47 +01:00
evgeny
32a8c1c48b
fix(chat): publish complete member snapshots after checked SQL finalization
2026-10-27 05:23:17 +01:00
evgeny
958feb4e75
test(chat): reproduce successful member snapshot after finalization failure
2026-10-27 05:22:09 +01:00
evgeny
d3c5565c91
docs(chat): record full avatar suite and sanitizer results
2026-10-27 05:20:30 +01:00
evgeny
63c92840e2
docs(chat): mark avatar audit fixes complete with targeted verification
2026-10-27 05:19:14 +01:00
evgeny
32c89c7110
docs(chat): record avatar failure reproduction and transaction validation
2026-10-27 05:16:43 +01:00
evgeny
ae74b621c8
docs(chat): specify avatar transaction, failure, and callback lifetime contracts
2026-10-27 05:15:12 +01:00
evgeny
2c691f98f7
test(chat): include EVP declarations explicitly in avatar SQL fixture
2026-10-27 05:13:08 +01:00
evgeny
e8b913a351
test(chat): cancel avatar peers from the committed receive callback
2026-10-27 05:12:49 +01:00
evgeny
65409f8c80
test(chat): exercise avatar transaction, schema, and key lookup failures
2026-10-27 05:12:35 +01:00
evgeny
8b16f40094
test(chat): add precise avatar SQL fault hooks and committed-state observer
2026-10-27 05:11:03 +01:00
evgeny
e645ef309a
fix(member-files): reject membership lookup binding and finalization errors
2026-10-27 05:09:44 +01:00
evgeny
e0598ccc22
fix(chat): commit avatar updates before notification and validate SQL reads
2026-10-27 05:08:31 +01:00
evgeny
bc41bb68b6
test(chat): reproduce successful avatar publication after failed hash binding
2026-10-27 05:05:40 +01:00
evgeny
f378c7b28d
docs(chat): record full channel creation validation
2026-10-27 05:04:46 +01:00
evgeny
04ce61e3ca
docs(chat): describe atomic channel creation and verified failure paths
2026-10-27 05:02:28 +01:00
evgeny
8003413d97
test(chat): cover channel input contracts and TCP creation result
2026-10-27 05:00:27 +01:00
evgeny
f1cada4c02
Cover channel crypto failures and require owner close after failed rollback
2026-10-27 04:49:39 +01:00
evgeny
01c2ebd7d8
Verify channel SQL failure rollback and complete signed profiles through an independent reader
2026-10-27 04:43:31 +01:00
evgeny
1d84765f08
Instrument channel creation SQL and hash committed schema, identities and roots
2026-10-27 04:40:36 +01:00
evgeny
60942e542b
Propagate all member block binding and finalization failures before index publication
2026-10-27 04:36:09 +01:00
evgeny
1ce58cbeac
Reject publication when the initial member profile signature cannot be bound
2026-10-27 04:34:57 +01:00
evgeny
956febe1d7
Report committed channel creation results through the headless API
2026-10-27 04:27:31 +01:00
evgeny
129fece0af
Share channel description verification with JOIN and cleanse owned creation requests
2026-10-27 04:27:31 +01:00
evgeny
55e270898b
Check channel key generation and return the committed channel identity
2026-10-27 04:26:43 +01:00
evgeny
72b3068a8b
Commit new channel identity and signed root membership before runtime publication
2026-10-27 04:25:08 +01:00
evgeny
c0aacb3287
Define one bounded channel description encoding for signing and verification
2026-10-27 04:23:22 +01:00
evgeny
6a6ad5c612
Store channel metadata and peer schema atomically with checked SQL operations
2026-10-27 04:19:14 +01:00
evgeny
999fe909e4
Target the exact signed JOIN body instead of counting unrelated signatures
2026-10-27 04:16:07 +01:00
evgeny
a4dd4a10d5
Exercise failed root signing during channel creation against committed SQLite
2026-10-27 04:12:58 +01:00
evgeny
1c5faaffc3
Record full feedback and poll verification after moving sanitizer artifacts
2026-10-27 04:06:52 +01:00
evgeny
9b55e3c7cb
Record verified feedback rollback and poll command readback contracts
2026-10-27 04:02:56 +01:00
evgeny
6c0f9c9068
Reject embedded NUL before passing animation JSON to rlottie
2026-10-27 04:00:54 +01:00
evgeny
1b0034e1ba
Handle saved-setting apply errors and document committed CLI interaction results
2026-10-27 03:58:19 +01:00
evgeny
a7a7e4b5a1
Cancel member actions when a click becomes a drag
2026-10-27 03:54:03 +01:00
evgeny
d741eb7374
Document feedback transaction ownership, codecs and committed readback acknowledgments
2026-10-27 03:52:09 +01:00
evgeny
7f0845e50c
Check readback retries and refused acknowledgments keep feedback roots unchanged
2026-10-27 03:50:16 +01:00
evgeny
739ee0802f
Verify poll commit acknowledgments survive snapshot faults and reserve memory before changes
2026-10-27 03:49:38 +01:00
evgeny
9876677a5f
Refresh committed feedback without repeating user actions after readback errors
2026-10-27 03:49:38 +01:00
evgeny
1666538b0c
Acknowledge committed poll commands when snapshot readback fails
2026-10-27 03:49:09 +01:00
evgeny
70251fafab
Verify poll SQL failures preserve history, reactions, roots and events
2026-10-27 03:45:11 +01:00
evgeny
63e76d2cf5
Add targeted SQL read fault injection for poll command tests
2026-10-27 03:44:02 +01:00
evgeny
1820128f5b
Document member badge painting and ignored state flags
2026-10-27 03:43:31 +01:00
evgeny
efe879bfd9
Preserve complete audio frames and reject invalid ring buffers
2026-10-27 03:42:03 +01:00
evgeny
aef6aae432
Validate complete poll command reads before publication or reaction changes
2026-10-27 03:41:36 +01:00
evgeny
cf7a3a0939
Check SQL reads before interpreting poll targets and command fields
2026-10-27 03:41:06 +01:00
evgeny
d89a86c9dd
Cover feedback page and hash SQL errors without empty success
2026-10-27 03:38:21 +01:00
evgeny
7fa20ceb79
Specify shared FFmpeg image buffer ownership
2026-10-27 03:38:12 +01:00
evgeny
96a3d05c74
Reject failed feedback page and hash reads and report transaction error codes
2026-10-27 03:37:29 +01:00
evgeny
fc94fa0bfd
Own feedback version selection and page publication transactions
2026-10-27 03:35:03 +01:00
evgeny
b0acb285c1
Bound TGS decoding and keep invalid icons out of animation
2026-10-27 03:33:50 +01:00
evgeny
a591469770
Check feedback lookups and writes and retain rollback ownership
2026-10-27 03:33:34 +01:00
evgeny
1f19720cb8
Exercise feedback lookup failures, atomic retries and rollback ownership
2026-10-27 03:32:32 +01:00
evgeny
6a4fa8065a
Add targeted SQL failure injection to real signed feedback tests
2026-10-27 03:30:51 +01:00
evgeny
1e5fc2d335
Record full 213-test verification and diagnose SQL clock fixture failure
2026-10-27 03:28:40 +01:00
evgeny
3309bee7eb
Compare attachment SQL timestamps using the SQLite clock
2026-10-27 03:24:22 +01:00
evgeny
41ce04e2f0
Document desktop instance activation and lock lifetime
2026-10-27 03:22:21 +01:00
evgeny
795f930dd6
Record attachment index recovery and immutable settings verification
2026-10-27 03:22:19 +01:00
evgeny
55328e18af
Clarify LAN adapter thread, delivery and settings contracts
2026-10-27 03:20:41 +01:00
evgeny
8fefd510a6
Document committed outbox retries and transaction-safe preparation recovery
2026-10-27 03:20:41 +01:00
evgeny
dafd3a2adc
Reject malformed audio diagnostic snapshots
2026-10-27 03:19:03 +01:00
evgeny
0995a1eac3
Complete event diagnostics and clarify attachment event payloads
2026-10-27 03:17:05 +01:00
evgeny
40ae782719
Cover settings immutability, validation rollback and LAN apply retry
2026-10-27 03:15:58 +01:00
evgeny
43f9608fbf
Make chat settings reads immutable and validation failures atomic
2026-10-27 03:15:15 +01:00
evgeny
27aa76f914
Match recovery fixture byte count and normal cached-file policy
2026-10-27 03:14:09 +01:00
evgeny
9fa58b4f83
Keep desktop config projection separate from core settings
2026-10-27 03:14:00 +01:00
evgeny
f6f3ca8da7
Share checked desktop config batches and diagnose write failures
2026-10-27 03:14:00 +01:00
evgeny
bc11c6ac00
Check attachment initialization leaves an external transaction untouched
2026-10-27 03:12:56 +01:00
evgeny
52d8ec4e49
Preserve attachment files when shutdown sees an open transaction
2026-10-27 03:12:37 +01:00
evgeny
6bbd41f49f
Exercise attachment recovery against uncommitted history deletion
2026-10-27 03:12:11 +01:00
evgeny
7f8869537b
End idle attachment outbox scans without invoking commit hooks
2026-10-27 03:06:26 +01:00
evgeny
108266328c
Commit attachment retry reservations before network delivery
2026-10-27 03:00:30 +01:00
evgeny
b9d36b42af
Report manifest limits and active download refusals precisely
2026-10-27 02:59:02 +01:00
evgeny
59d51d0e80
Document atomic attachment indexes and signed-history recovery
2026-10-27 02:58:44 +01:00
evgeny
13918d1cea
Preserve desktop configuration on failed writes
2026-10-27 02:57:07 +01:00
evgeny
00c4065771
Use the signed-history limit for manual attachment parsing
2026-10-27 02:50:27 +01:00
evgeny
61ed80e18c
Share the ETCP monitor across desktop entry points
2026-10-27 02:49:39 +01:00
evgeny
67368ebbac
Check complete signed manifests beyond the old manual download limit
2026-10-27 02:46:59 +01:00
evgeny
2165c8a1f8
Exercise real manifest recovery and bounded backfill overflow
2026-10-27 02:38:02 +01:00
evgeny
7e7cabfb3a
Verify atomic manifest indexes, local intent and history recovery
2026-10-27 02:34:02 +01:00
evgeny
78d0e3f54f
Retry failed decryption after a newly verified download
2026-10-27 02:31:29 +01:00
evgeny
b31f974a44
Target local attachment transactions and observe recovery timers in tests
2026-10-27 02:28:42 +01:00
evgeny
1b695fe247
Own and cancel desktop bridge commands before core teardown
2026-10-27 02:25:05 +01:00
evgeny
fdb11ed3ce
Restore retained attachment indexes during startup and manual download
2026-10-27 02:20:02 +01:00
evgeny
d9f5da130e
Recover attachment indexes from history without losing message events
2026-10-27 02:18:30 +01:00
evgeny
fc60ca295a
Commit attachment download intent and cache restoration atomically
2026-10-27 02:16:23 +01:00
evgeny
45d5aaa7a1
Index attachment manifests atomically and classify invalid identities
2026-10-27 02:15:14 +01:00
evgeny
fe75a493ef
Commit immutable attachment identity before message publication
2026-10-27 02:09:17 +01:00
evgeny
6803369a13
Record verified outgoing, completion and channel deletion fixes
2026-10-27 02:05:25 +01:00
evgeny
618f6ca073
Document atomic channel deletion and post-commit file cleanup
2026-10-27 01:55:35 +01:00
evgeny
c3ac2059f4
Check complete Merkle cleanup before committing channel deletion
2026-10-27 01:55:03 +01:00
evgeny
8850121984
Verify channel deletion rollback and committed cascade snapshots
2026-10-27 01:53:47 +01:00
evgeny
6a6f8db208
Preserve channel files until checked metadata deletion commits
2026-10-27 01:50:03 +01:00
evgeny
cd6ca2388f
Cascade attachment records with channel deletion before cleaning files
2026-10-27 01:50:02 +01:00
evgeny
34e6fecbd0
Target completion transaction faults without affecting history jobs
2026-10-27 01:49:03 +01:00
evgeny
75124e0efa
Preserve independent NAT details in desktop diagnostics
2026-10-27 01:48:13 +01:00
evgeny
12c5945eed
Handle unavailable cores and late status page responses
2026-10-27 01:44:40 +01:00
evgeny
77e0a3c93e
Verify completion ownership through cancellation, retry and task limits
2026-10-27 01:43:50 +01:00
evgeny
b2addca5ce
Clarify desktop logging contracts and retain early log path
2026-10-27 01:41:23 +01:00
evgeny
d22bae19b4
Fix desktop node startup rollback and state ownership
2026-10-27 01:38:26 +01:00
evgeny
d7ffa1031f
Exercise committed decryption claims and retryable SQL completions
2026-10-27 01:37:30 +01:00
evgeny
b71c3040d4
Claim decryption before workers and retry retained completions
2026-10-27 01:35:30 +01:00
evgeny
4d19de7cce
Retain attachment completions until their SQL result commits
2026-10-27 01:34:47 +01:00
evgeny
851c6723ff
Verify outgoing request persistence and document commit boundary
2026-10-27 01:30:24 +01:00
evgeny
d1bfd1d16c
Commit outgoing attachment requests before events and delivery
2026-10-27 01:28:23 +01:00
evgeny
023bd78e16
Cover atomic outgoing attachment request creation and timer guard
2026-10-27 01:27:19 +01:00
evgeny
b163642b52
Fix oversized ETCP monitor snapshots
2026-10-27 01:26:16 +01:00
evgeny
8a0654e57b
Merge remote-tracking branch 'origin/master'
2026-10-27 01:23:25 +01:00
evgeny
e43bcec7cb
Record verified REQUEST commit fix and continue chat audit
2026-10-27 01:22:57 +01:00
evgeny
383eb6d076
Describe atomic REQUEST acceptance and committed acknowledgment tests
2026-10-27 01:17:40 +01:00
evgeny
bb961dd394
Exercise rejected REQUEST, author restart and real retry before ACK
2026-10-27 01:12:11 +01:00
evgeny
4d87cab28a
docs(dm): align history generation contract after rebase
2026-10-27 01:11:28 +01:00
evgeny
5bb27d1b61
docs(dm): record completed contract audit and validation
2026-10-27 01:06:45 +01:00
evgeny
9480f8029b
docs(dm): finish invite and cleanup validation contracts
2026-10-27 01:06:45 +01:00
evgeny
a00db6229f
docs(dm): reconcile architecture and PM delivery requirements
2026-10-27 01:06:45 +01:00
evgeny
ad577318d9
docs(dm): specify media protocol and worker lifetime
2026-10-27 01:06:45 +01:00
evgeny
1cfafc43a4
docs(dm): complete mailbox and storage coordinator contracts
2026-10-27 01:06:45 +01:00
evgeny
2fe024fbbb
docs(dm): clarify core and history ownership contracts
2026-10-27 01:06:45 +01:00
evgeny
98a6d3cce0
Test committed REQUEST acknowledgments, duplicates and SQL failures
2026-10-27 01:05:49 +01:00
evgeny
760398b96c
Commit incoming attachment requests before acknowledging them
2026-10-27 01:02:55 +01:00
evgeny
492f6adc99
Merge upstream attachment audit documentation
2026-10-27 00:57:14 +01:00
evgeny
102da344d9
Merge origin/master with Android conversation gestures
2026-10-27 00:55:47 +01:00
evgeny
15ec41f2fd
Record lost REQUEST after real acknowledgment and author rollback
2026-10-27 00:55:14 +01:00
evgeny
9f7ceb5815
Document REQUEST acknowledgment before external transaction commit
2026-10-27 00:55:13 +01:00
evgeny
13039933da
android: separate avatar taps from conversation context menus
2026-10-27 00:49:00 +01:00
evgeny
ef8e8f2cb5
Record verified author decision fix and close its audit task
2026-10-27 00:45:43 +01:00
evgeny
7649981cbc
Describe committed author decisions and rollback lifecycle
2026-10-27 00:39:18 +01:00
evgeny
401193950b
Verify author decision rollback and retry across real chat restart
2026-10-27 00:15:17 +01:00
evgeny
8c36d00fd2
Test atomic attachment decisions and committed UI notifications
2026-10-27 00:13:31 +01:00
evgeny
8a7f4469dc
Commit author attachment decisions and delivery queue atomically
2026-10-27 00:10:58 +01:00
evgeny
77d6e8cfd0
Record reproduced attachment decision durability failures
2026-10-26 23:50:40 +01:00
evgeny
55ad0e971a
Document uncommitted or undeliverable attachment author decisions
2026-10-26 23:49:35 +01:00
evgeny
e6c0271e2c
Record validated chat merge and stop the audit after Pull
2026-10-26 23:41:43 +01:00
evgeny
845bf2580d
Merge upstream chat revisions with attachment transaction fixes
2026-10-26 23:35:21 +01:00
evgeny
012bd650ea
Record verified GRANT fix before integrating upstream chat revisions
2026-10-26 23:22:57 +01:00
evgeny
b8b6636644
Document result commit guarantees and verify quiesced callback removal
2026-10-26 23:17:55 +01:00
evgeny
9839f56f8c
Exercise real GRANT retry and verify committed key before network ACK
2026-10-26 23:09:49 +01:00
evgeny
03d1afbd13
Tighten result regression snapshots and expose SQL transition diagnostics
2026-10-26 23:07:50 +01:00
evgeny
935bd704ae
Test attachment result transaction failures and committed acknowledgments
2026-10-26 23:06:20 +01:00
evgeny
54a6e33c5e
Commit attachment result state and key before acknowledging delivery
2026-10-26 23:03:19 +01:00
evgeny
ab0b866c4c
Explain edit rejection causes and unchanged submissions in diagnostics
2026-10-26 22:59:26 +01:00
evgeny
4b189891f7
Keep UI test references stable across queued channel refreshes
2026-10-26 22:58:15 +01:00
evgeny
5cf823da6a
Record real-network GRANT bind failure and stop attachment audit
2026-10-26 22:57:20 +01:00
evgeny
334991fbe5
Initialize the desktop edit fixture with a valid test identity
2026-10-26 22:56:21 +01:00
evgeny
52651cfa0d
Document confirmed GRANT acknowledgment without saved attachment key
2026-10-26 22:55:49 +01:00
evgeny
87f312f31b
Retain startup diagnostics for the desktop edit integration test
2026-10-26 22:55:05 +01:00
evgeny
b19e6797c9
Preserve Android edit drafts across screen recreation and serialize saves
2026-10-26 22:54:36 +01:00
evgeny
e229811e20
Document editable history protocol and update media insert callback
2026-10-26 22:54:25 +01:00
evgeny
aefef51c58
Update stress and media fixtures to sign versioned group records
2026-10-26 22:52:35 +01:00
evgeny
45257bf37f
Exercise desktop editing through the real menu composer core and quoted replies
2026-10-26 22:51:10 +01:00
evgeny
d998b390f3
Exercise offline and live edits over real Merkle and PUSH transport
2026-10-26 22:50:20 +01:00
evgeny
ec8c6e9eb1
Verify edit events bypass new-message callbacks and notifications
2026-10-26 22:49:45 +01:00
evgeny
8523448c3a
Reserve desktop edit dispatch and reject malformed update events
2026-10-26 22:49:45 +01:00
evgeny
5b6c96d3d8
Test desktop composer edit confirmation cancel failure and channel changes
2026-10-26 22:47:58 +01:00
evgeny
48bdb85ff9
Preserve composer media policy and display edit times for short or emoji text
2026-10-26 22:47:57 +01:00
evgeny
8b34889a19
Check signed reply references against the revision envelope
2026-10-26 22:46:42 +01:00
evgeny
e45f33e7b5
Cover revision conflicts Merkle updates stale ACKs and rollback
2026-10-26 22:46:08 +01:00
evgeny
82ef6f282f
Reset only dependent group history state when adopting editable format
2026-10-26 22:46:08 +01:00
evgeny
0a75a53ed9
Correct Android attachment submission argument after editor integration
2026-10-26 22:45:04 +01:00
evgeny
c39bdef344
Localize group editing controls and edit timestamps
2026-10-26 22:45:04 +01:00
evgeny
030336eaeb
Record verified attachment key fix lifecycle contracts and validation
2026-10-26 22:44:14 +01:00
evgeny
d0ff7a81f7
Bind deferred-author integrity fixture to its signed author
2026-10-26 22:43:46 +01:00
evgeny
65cdb5b468
Keep format-reset rollback safe and expire pending revisions by edit time
2026-10-26 22:43:38 +01:00
evgeny
cad10a33e0
Test group edit persistence references and scoped dev format reset
2026-10-26 22:42:36 +01:00
evgeny
93057c9eb7
Adapt signed history regression fixtures to canonical revision envelopes
2026-10-26 22:41:56 +01:00
evgeny
1afb1010cc
Wire desktop context-menu editing and update visible messages in place
2026-10-26 22:38:42 +01:00
evgeny
2a9b5748e9
Show edited time and retain revision metadata in desktop rows
2026-10-26 22:38:17 +01:00
evgeny
20350338b8
Deliver committed edits to desktop without message notifications
2026-10-26 22:38:17 +01:00
evgeny
e483027e3e
Edit group text in desktop composer with save cancel and draft restoration
2026-10-26 22:38:06 +01:00
evgeny
b46927f40d
Read group revisions and keep history windows ordered by stable IDs
2026-10-26 22:37:39 +01:00
evgeny
371aa3ac19
Dispatch correlated edit submissions through shared composer request
2026-10-26 22:37:39 +01:00
evgeny
ca15dbb88a
Save authored text edits and preserve group references across revisions
2026-10-26 22:36:47 +01:00
evgeny
2f35502978
Expose group message editing and committed update event
2026-10-26 22:35:46 +01:00
evgeny
809f009796
Replicate group message revisions atomically with versioned acknowledgements
2026-10-26 22:35:34 +01:00
evgeny
5c638a60db
Define permanent group message identity from creation fields
2026-10-26 22:33:43 +01:00
evgeny
b0d246913d
Complete Android navigation after PM conversation deletion
2026-10-26 22:11:39 +01:00
evgeny
18df7cc43d
Describe media backfill triggers in terms of Merkle history sync
2026-10-26 22:11:39 +01:00
evgeny
9009153cc5
Remove unused legacy chat sync commands and empty connect API
2026-10-26 22:11:39 +01:00
evgeny
5dab86e840
Initialize chat schema before storing and publishing local identity
2026-10-26 22:11:39 +01:00
evgeny
f6005fd96d
Remove obsolete history chain reads from chat caches and API
2026-10-26 22:11:39 +01:00
evgeny
f1da7d7ee8
Align desktop history reads with Merkle schema and fix PM test setup
2026-10-26 22:11:39 +01:00
evgeny
cd0329b301
Cover deleted PM composer state and log GUI deletion failures
2026-10-26 22:11:39 +01:00
evgeny
8ccad3b56b
Test PM deletion through the desktop window and history snapshot generations
2026-10-26 22:11:39 +01:00
evgeny
e88f3ce46a
Finish PM composer cleanup and skip history requests after shutdown
2026-10-26 22:11:39 +01:00
evgeny
f83033d3a1
Guard Android PM history and pending deletion across asynchronous sends
2026-10-26 22:11:39 +01:00
evgeny
5778c8aa0a
Translate desktop PM deletion confirmation and errors
2026-10-26 22:11:39 +01:00
evgeny
6382c794ea
Complete desktop PM deletion after the core transaction result
2026-10-26 22:11:39 +01:00
evgeny
4089944673
Guard desktop PM sends and history by conversation generation
2026-10-26 22:11:39 +01:00
evgeny
e10354a0ac
Keep PM composer work bound to its history generation
2026-10-26 22:11:39 +01:00
evgeny
df80c43a57
Offer conversation deletion in the desktop PM context menu
2026-10-26 22:11:39 +01:00
evgeny
8e3c536cbb
Bridge desktop DM deletion requests and results
2026-10-26 22:11:39 +01:00
evgeny
f0b7b22f92
Read visible DM generations in the desktop conversation list
2026-10-26 22:11:39 +01:00
evgeny
fd82e7bf1b
Tag DM history snapshots with conversation generation
2026-10-26 22:11:39 +01:00
evgeny
71dfc9d70d
Clarify attachment commit ownership and SQL failure diagnostics
2026-10-26 22:10:44 +01:00
evgeny
e5ca2e174c
Honor core stop before and after Android restart with lifecycle regressions
2026-10-26 22:07:39 +01:00
evgeny
c75bfc618a
Honor core stop in desktop owner loop and verify cleanup
2026-10-26 22:07:39 +01:00
evgeny
07f63c3047
Document audited call video and session contracts
2026-10-26 21:54:18 +01:00
evgeny
289b592598
Use distinct regression helper name and reserved uasync post API
2026-10-26 21:53:36 +01:00
evgeny
99ebee37e7
Test attachment key commit faults ownership and retry with real workers
2026-10-26 21:51:36 +01:00
evgeny
549cc202fb
Commit complete attachment preparation before accepting encryption work
2026-10-26 21:49:11 +01:00
evgeny
d877e8881c
Record confirmed attachment key bind failure and pause chat audit
2026-10-26 21:31:00 +01:00
evgeny
e33d51a34a
Document attachment key persistence failure during chat audit
2026-10-26 21:29:41 +01:00
evgeny
1899b7f8cf
Record verified admin and worker rebase integration
2026-10-26 20:54:08 +01:00
evgeny
589fef2aae
Reconcile audit contracts with upstream post cancellation
2026-10-26 20:48:15 +01:00
evgeny
8718ee901c
Record verified worker shutdown fix and negative control
2026-10-26 20:46:31 +01:00
evgeny
2c48a53c6a
Clarify cancellation ownership during service shutdown
2026-10-26 20:46:31 +01:00
evgeny
9e68928222
Test worker drain with completions in a detached batch
2026-10-26 20:45:32 +01:00
evgeny
781d41e003
Disable detached worker completions before draining jobs
2026-10-26 20:45:32 +01:00
evgeny
8f3d9edf8b
Record admin verification and worker completion crash
2026-10-26 20:44:42 +01:00
evgeny
998993997d
Diagnose admin key derivation failures without exposing secrets
2026-10-26 20:44:42 +01:00
evgeny
5169ffd0b3
Specify admin import transaction and notification contracts
2026-10-26 20:44:42 +01:00
evgeny
cc04f1c0fa
Test admin import rollback, commit notification and safe retry
2026-10-26 20:44:42 +01:00
evgeny
76527de44f
Store admin keys atomically and reject invalid transfer context
2026-10-26 20:44:42 +01:00
evgeny
e65ceeafdc
Track atomic admin import correction and regression requirements
2026-10-26 20:44:42 +01:00
evgeny
1916ba4270
Document admin key import failures and null transfer crash
2026-10-26 20:44:42 +01:00
evgeny
bc623f2371
docs(call): record post-rebase validation results
2026-10-26 20:30:18 +01:00
evgeny
f521bb37f4
fix(call): align audio frontend ownership with core lifecycle
...
Keep the borrowed audio provider on UTUN_INSTANCE across chat service restarts.
Attach and detach Android voice from the core worker and reject DSP startup
after detach. Preserve TX owner epochs, pending slots and foreign-instance RX
isolation. Remove the unused cross-thread online API and keep its check local
to call.c.
Add eight lifecycle regressions with real cores and the Android host bridge.
Audit public call, DSP, clock, headless and desktop audio contracts and record
the findings and validation scope.
Validation: voice/desktop 38/38, four native call suites, native and both Android
ABI builds, full check 204/204 plus proxy/burst/load. JVM results remain Gradle
UP-TO-DATE (155 app and 15 router). No hardware runtime validation.
2026-10-26 20:22:46 +01:00
evgeny
b84a6ab3b9
docs(call): record validated Bluetooth lifecycle fix and regressions
2026-10-26 20:22:27 +01:00
evgeny
2e8885548b
docs(call): clarify Android output and Bluetooth proxy ownership
2026-10-26 20:21:58 +01:00
evgeny
83df895532
build(android): run router lifecycle regressions with app unit tests
2026-10-26 20:21:58 +01:00
evgeny
f724703156
test(android): cover Bluetooth router teardown and callback races
2026-10-26 20:21:58 +01:00
evgeny
34133e4f6f
test(android): isolate router application and logging fixtures
2026-10-26 20:21:58 +01:00
evgeny
8cbadd821f
test(android): model Bluetooth proxy ownership and device callbacks
2026-10-26 20:21:58 +01:00
evgeny
161422b2cd
test(android): add isolated host context and clock fixtures
2026-10-26 20:21:58 +01:00
evgeny
de83d7bbf4
fix(android): own Bluetooth proxies across router lifecycle
2026-10-26 20:21:58 +01:00
evgeny
3987295707
Report exact DM SQL prepare errors without duplicate step failures
2026-10-26 19:50:03 +01:00
evgeny
497792da73
Commit exact DM custody tombstones before acknowledging deletion
2026-10-26 19:45:51 +01:00
evgeny
3f195c058b
Retain DM coordinator bodies when assignment scans fail
2026-10-26 19:42:00 +01:00
evgeny
2fce4641ec
Exercise DM cleanup SQL failures and durable ACK retries
2026-10-26 19:39:04 +01:00
evgeny
8642b04e6d
Cover worker teardown with completions in the active post batch
2026-10-26 19:15:32 +01:00
evgeny
93ec12226f
Cancel pending posts from active dispatch batches
2026-10-26 19:12:37 +01:00
evgeny
28a5d0509f
Expire DM test custody only after confirmed storage
2026-10-26 18:42:45 +01:00
evgeny
25a8b905fc
Accept verified DM originals after storage expiry
2026-10-26 18:42:45 +01:00
evgeny
ab8713d88f
Record post-rebase sync validation on current master
2026-10-26 18:34:45 +01:00
evgeny
c5075354d0
Record completed sync audit scope and refresh historical design links
2026-10-26 18:27:49 +01:00
evgeny
1456f02c03
Reconcile completed member and Merkle documentation audit status
2026-10-26 18:27:49 +01:00
evgeny
b48f9e7a19
Close history Merkle migration with final validation results
2026-10-26 18:27:49 +01:00
evgeny
750ccf638d
Verify history migration results and checkpoint revision races
2026-10-26 18:27:27 +01:00
evgeny
bf94b240c8
Wake the lifecycle fixture after asserting standby restoration
2026-10-26 18:27:27 +01:00
evgeny
7d6197b5eb
Restore requested activity after forced-active stream regression
2026-10-26 18:27:27 +01:00
evgeny
d532fe062e
Avoid recursive standby retries on allocation failure
2026-10-26 18:27:27 +01:00
evgeny
f92077e601
Isolate stream wake state and require full roots in sync stress
2026-10-26 18:27:27 +01:00
evgeny
e00d1f5212
Diagnose Merkle source profiles and identify both exchange endpoints
2026-10-26 18:27:27 +01:00
evgeny
669ad86e57
Document shared history Merkle protocol and bounded transactions
2026-10-26 18:27:26 +01:00
evgeny
df39999624
Initialize media history model and admit the purge test peer
2026-10-26 18:27:26 +01:00
evgeny
316bacd8c8
Share isolated history model setup across sync fixtures
2026-10-26 18:27:26 +01:00
evgeny
f42f002eb1
Test atomic page rollback, late author keys and model run policy
2026-10-26 18:27:26 +01:00
evgeny
fefc0ee003
Preserve Android standby retry waits and clarify history contracts
2026-10-26 18:27:26 +01:00
evgeny
0444a4bfd9
Resume admitted history peers and gate automatic Merkle work by policy
2026-10-26 18:27:26 +01:00
evgeny
a7b556d9a8
Verify long equal-count history divergence converges by full roots
2026-10-26 18:27:26 +01:00
evgeny
2833c53644
Cover handshake RNG failures and diagnose mismatched round tokens
2026-10-26 18:27:26 +01:00
evgeny
a46091cb19
Yield the event loop between bounded history maintenance batches
2026-10-26 18:27:26 +01:00
evgeny
3a4143183d
Cover stable history cursors, deleted authors and bounded TTL cleanup
2026-10-26 18:27:26 +01:00
evgeny
3fe697e1a9
Log history pause and await verified roots in empty peer fixtures
2026-10-26 18:27:26 +01:00
evgeny
d76eb067bb
Preserve signed history through schema conversion and resume both peers
2026-10-26 18:27:26 +01:00
evgeny
1402413ab9
Exercise history Merkle roots over live peers and invitation recovery
2026-10-26 18:27:26 +01:00
evgeny
a87ece370c
Revalidate history peers after membership and cover preflight integrity
2026-10-26 18:27:26 +01:00
evgeny
012cbdcd49
Register history after shared Merkle startup and validate page cursors
2026-10-26 18:27:26 +01:00
evgeny
e822f9fef7
Pass leaf bounds to immediate page models and report disconnects
2026-10-26 18:27:26 +01:00
evgeny
5e5ed41c19
Replace history chain exchange with canonical Merkle data model
2026-10-26 18:27:26 +01:00
evgeny
41c2a77fe6
Expose per-model work policy and checkpoint results for history
2026-10-26 18:27:26 +01:00
evgeny
a079381c0a
Test cancelled Merkle rounds against the fresh responder challenge
2026-10-26 18:27:26 +01:00
evgeny
45c282e0b7
Bind Merkle rounds to fresh initiator and responder tokens
2026-10-26 18:27:26 +01:00
evgeny
137e30ec82
Require a fresh responder token when reattaching Merkle sessions
2026-10-26 18:27:26 +01:00
evgeny
d20f31c165
Plan canonical history reconciliation on the shared Merkle engine
2026-10-26 18:27:26 +01:00
evgeny
5ae5fd066d
Close history integrity fixes and record remaining sync audit scope
2026-10-26 18:27:26 +01:00
evgeny
143788cdcd
Document verified history deletion and message-specific delivery
2026-10-26 18:26:58 +01:00
evgeny
aa97e053cd
Ensure SQLite allocation failures cannot authorize history deletion
2026-10-26 18:26:58 +01:00
evgeny
7853fb0fc6
Keep chain reads and delivery confirmation failures explicit
2026-10-26 18:26:58 +01:00
evgeny
557c98aeae
Cover history preservation, corruption cleanup and exact delivery ACKs
2026-10-26 18:26:58 +01:00
evgeny
fd53b443a0
Preserve history on verification errors and identify delivery ACKs
2026-10-26 18:26:58 +01:00
evgeny
26432be0e4
Point delivery audit finding to the failing SQL statement
2026-10-26 18:26:58 +01:00
evgeny
6734035734
Record db_sync verification data loss, deletion policy and delivery SQL defect
2026-10-26 18:26:58 +01:00
evgeny
068eddefd8
Flag db_sync data loss on verification errors and invalid duplicate input
2026-10-26 18:26:31 +01:00
evgeny
b0bf27de61
Close DM expiry fix with fault restart and sanitizer evidence
2026-10-26 18:06:14 +01:00
evgeny
9fe4e834fe
Describe DM expiry reconciliation and await restarted test link
2026-10-26 18:02:29 +01:00
evgeny
59e694bd83
Check all SQL results during DM storage release
2026-10-26 17:54:45 +01:00
evgeny
5788d2557b
Test DM release rollback and expiry recovery after restart
2026-10-26 17:54:45 +01:00
evgeny
cb08faae04
Reconcile DM storage expiry and release assignments atomically
2026-10-26 17:49:26 +01:00
evgeny
dda4a780e3
Document unreconciled DM media expiry after SQL failure
2026-10-26 17:42:45 +01:00
evgeny
3dc5eb502d
Record post-rebase DM validation
2026-10-26 17:31:42 +01:00
evgeny
87d24b722b
Document verified DM name normalization and regressions
2026-10-26 17:27:18 +01:00
evgeny
d09ed0316f
Preserve UTF-8 boundaries in DM peer names
2026-10-26 17:27:18 +01:00
evgeny
fa76447f53
Close Android mute fix with native Android and full-suite verification
2026-10-26 17:14:58 +01:00
evgeny
79b06846c6
Test Android bridge mute after real AEC and AGC across unmute
2026-10-26 17:14:18 +01:00
evgeny
000b28027c
Preserve Android raw capture through AEC and apply mute before Opus
2026-10-26 17:14:18 +01:00
evgeny
bdaff406be
Forward Android frame mute through the native capture bridge
2026-10-26 17:14:18 +01:00
evgeny
f83e27260d
Record rebased DM verification and UTF-8 name truncation defect
2026-10-26 17:07:18 +01:00
evgeny
b6588d0594
Preserve DM state on database failures and document contracts
2026-10-26 16:55:20 +01:00
evgeny
03be46c339
Record desktop voice checks and reproduce Android mute signal after AEC
2026-10-26 16:34:23 +01:00
evgeny
5fee00c451
Clarify desktop voice contracts and document Android mute ordering defect
2026-10-26 16:31:11 +01:00
evgeny
54a7522dd9
Record headless PCM framing fix and full regression results
2026-10-26 16:08:35 +01:00
evgeny
0ad80f3906
Clarify frame assembly and keep reference PCM arithmetic signed
2026-10-26 15:58:11 +01:00
evgeny
7c4e6f9972
Test complete headless frames across queue and short-write boundaries
2026-10-26 15:55:08 +01:00
evgeny
913ae531ec
Queue complete headless PCM frames and account for overflow drops
2026-10-26 15:51:35 +01:00
evgeny
ae9d3f0103
Record headless PCM backpressure framing failure and repair plan
2026-10-26 15:35:03 +01:00
evgeny
45834692a7
Document headless PCM framing defect and independent codec ownership
2026-10-26 15:33:11 +01:00
evgeny
03b050949c
Close radio mesh regression with full merged-branch verification
2026-10-26 15:16:13 +01:00
evgeny
bf4d14c46e
Guard mesh gate node indices before matching endpoints
2026-10-26 15:09:35 +01:00
evgeny
1bc27aa2ca
Verify radio mesh deduplication independently of arrival order
2026-10-26 15:08:08 +01:00
evgeny
ec795b4764
Explain false radio mesh failure and preserve rebase audit
2026-10-26 15:01:59 +01:00
evgeny
ff394c7a6a
Preserve final mesh duplicate read outside diagnostic mode
2026-10-26 14:57:41 +01:00
evgeny
21af2e0f35
Observe late mesh packets within the running event loop
2026-10-26 14:57:41 +01:00
evgeny
d943c0ddca
Poll diagnostic mesh tail after the original loop stops
2026-10-26 14:57:41 +01:00
evgeny
c2908a6c58
Trace radio mesh packet paths and original stop conditions
2026-10-26 14:57:41 +01:00
evgeny
5587c60603
Record successful proxy integration checks after TX fix
2026-10-26 14:57:41 +01:00
evgeny
faaa5a835a
Record repeated full-check failure in unrelated radio mesh test
2026-10-26 14:57:41 +01:00
evgeny
2429688382
Document call audio TX fix and independent radio mesh flake
2026-10-26 14:57:41 +01:00
evgeny
f0df3d8848
Make stale TX regressions assert observable behavior first
2026-10-26 14:57:24 +01:00
evgeny
bbc9f750c3
Cover call audio TX ownership across lifecycle transitions
2026-10-26 14:57:24 +01:00
evgeny
e11eca93bb
Isolate call audio TX tasks by instance binding epoch
2026-10-26 14:57:24 +01:00
evgeny
266406261a
Validate call audio ownership plan against lifecycle boundaries
2026-10-26 14:57:24 +01:00
evgeny
a38b1f1e0b
Record call audio audit scope and unchanged implementation checks
2026-10-26 14:57:24 +01:00
evgeny
6f8164d7cd
Record call audio rebind counter defect and ownership plan
2026-10-26 14:57:24 +01:00
evgeny
a4d8637f45
Document stale call audio tasks corrupting pending accounting
2026-10-26 14:57:09 +01:00
evgeny
ea3685d8f5
Record final call admission contract and environment checks
2026-10-26 14:57:09 +01:00
evgeny
c7387c2879
Record passing call admission and voice verification
2026-10-26 14:57:09 +01:00
evgeny
198cf52791
Document call admission fix and live regression coverage
2026-10-26 14:56:54 +01:00
evgeny
9838384d43
Authenticate admission fixture members for radio interaction
2026-10-26 14:56:54 +01:00
evgeny
56a06da35f
Cover call admission, ID reuse and retained sessions on live cores
2026-10-26 14:56:54 +01:00
evgeny
96d99a183d
Reject overlapping outgoing calls and registered call IDs
2026-10-26 14:56:54 +01:00
evgeny
7e69595372
Record call audit baseline checks and exact admission location
2026-10-26 14:56:54 +01:00
evgeny
c5eb17e59b
Record outgoing call admission defect and verification plan
2026-10-26 14:56:54 +01:00
evgeny
aa09459c70
Document missing busy admission guard for outgoing calls
2026-10-26 14:56:06 +01:00
evgeny
aea8ca7236
Close feedback admission fix with full integration and sanitizer verification
2026-10-26 14:44:03 +01:00
evgeny
1634499d84
Document active feedback, credential dependencies and permission round lifecycle
2026-10-26 14:44:03 +01:00
evgeny
f3be00438b
Assert profile updates leave feedback idle and preserve outer-commit change flags
2026-10-26 14:44:03 +01:00
evgeny
953e094c92
Restrict feedback invalidation to credential, key and admission changes
2026-10-26 14:44:03 +01:00
evgeny
5cae3d095d
Keep the full-cursor comment beside its pagination test
2026-10-26 14:44:03 +01:00
evgeny
c5a09c1413
Check permission round teardown, blocked error handoff and safe restart callbacks
2026-10-26 14:44:03 +01:00
evgeny
789e5663f7
End unauthorized feedback rounds while preserving watches for member restoration
2026-10-26 14:44:03 +01:00
evgeny
4278eb7851
Wait for incoming transport before late-peer group setup and check restored publishing
2026-10-26 14:44:03 +01:00
evgeny
ea1c17593b
Test full chat restart and late-peer convergence across member exclusion and restoration
2026-10-26 14:44:03 +01:00
evgeny
bf941bfd14
Preserve precise author failure reasons and guard SQLite column allocation
2026-10-26 14:44:03 +01:00
evgeny
4b394b75e0
Cover feedback revocation, purge, delayed cross-channel credentials and transactional faults
2026-10-26 14:44:03 +01:00
evgeny
490b30b956
Update dependent feedback atomically with membership and filter poll results
2026-10-26 14:44:03 +01:00
evgeny
8925503d59
Retain inactive feedback while rebuilding and serving only verified active states
2026-10-26 14:44:03 +01:00
evgeny
e7ae4025e2
Expose dataset registration for dependent model startup boundaries
2026-10-26 14:44:03 +01:00
evgeny
42808450b5
Distinguish member author admission, pending credentials and verification errors
2026-10-26 14:44:03 +01:00
evgeny
9c1b8e3e03
Record feedback plan dependency and cross-channel audit gaps
2026-10-26 14:44:03 +01:00
evgeny
e1e9d63925
Record excluded-author feedback restart audit findings
2026-10-26 14:44:03 +01:00
evgeny
8e2036b435
Document feedback startup failure for excluded historical authors
2026-10-26 14:44:03 +01:00
evgeny
e56790649a
Record passing member purge integration and sanitizer validation
2026-10-26 14:44:02 +01:00
evgeny
16c64ca626
Describe Merkle index ownership and mark old sync plan historical
2026-10-26 14:42:59 +01:00
evgeny
26b6eca150
Clarify Merkle pull lifecycle, progress timeout and audit scope
2026-10-26 14:42:59 +01:00
evgeny
81712e74cd
Document atomic member purge and verification error contracts
2026-10-26 14:42:59 +01:00
evgeny
e4de937953
Use public READY checks in physical member purge regression
2026-10-26 14:42:59 +01:00
evgeny
8b525c06a9
Verify physical purge preserves radio and transport on rollback
2026-10-26 14:42:59 +01:00
evgeny
fe182e4acc
Check cleanup retries, request ownership and stream rollback
2026-10-26 14:42:59 +01:00
evgeny
87b22966b7
Exercise member cleanup transaction and verification failures
2026-10-26 14:42:59 +01:00
evgeny
fbe3e7a279
Make member cleanup atomic and publish removals after commit
2026-10-26 14:42:59 +01:00
evgeny
1f3f1d9a34
Separate missing member verification keys from SQLite failures
2026-10-26 14:42:59 +01:00
evgeny
fe7bcb334c
Distinguish Ed25519 verification errors from invalid signatures
2026-10-26 14:42:59 +01:00
evgeny
f79b9261c7
Record passing stream audit verification and remaining scope
2026-10-26 12:55:48 +01:00
evgeny
6689cf543b
Clarify source signing key and interval estimate documentation
2026-10-26 12:54:52 +01:00
evgeny
409d9f3ca9
Record completed stream header audit and align native guide
2026-10-26 12:53:40 +01:00
evgeny
de535e1713
Distinguish source mute state from immutable audio codec
2026-10-26 12:47:46 +01:00
evgeny
8533dfc303
Clarify asynchronous publisher and viewer session contracts
2026-10-26 12:45:31 +01:00
evgeny
0f54f5ef66
Specify stream playback clock and audio thread contracts
2026-10-26 12:43:25 +01:00
evgeny
c5292c9994
Document stream member admission and wire codec contracts
2026-10-26 12:42:14 +01:00
evgeny
495972cfe6
Clarify stream ring and media cursor ownership and results
2026-10-26 12:40:44 +01:00
evgeny
b25acce11b
Specify stream queue accounting and timing metric snapshots
2026-10-26 12:33:15 +01:00
evgeny
080b14a51d
Document stream flow lifetimes, leases and relay ownership
2026-10-26 12:31:01 +01:00
evgeny
5259c746d1
Record INFO expiry fix and complete IPv6-isolated verification
2026-10-26 12:19:42 +01:00
evgeny
b116b20b11
Exercise INFO expiry under real ETCP backpressure
2026-10-26 12:04:31 +01:00
evgeny
c148351259
Close expired nine-byte stream INFO requests with overload reason
2026-10-26 12:04:31 +01:00
evgeny
3956711c16
Record expired stream INFO probe defect and isolated evidence
2026-10-26 12:04:31 +01:00
evgeny
840bc9a6b0
Align stream guide with session ownership and current audit status
2026-10-26 12:04:31 +01:00
evgeny
27ed4c74ff
Clarify stream session ownership and supplier selection contracts
2026-10-26 12:04:31 +01:00
evgeny
962a2df3f8
Add local channel deletion to desktop channel settings
2026-10-26 10:47:39 +01:00
evgeny
d67e0b0c23
Report desktop startup failures and validate generated configs
2026-10-26 10:12:30 +01:00
evgeny
9ab9d01907
Fix Android config storage limits for the strict parser
2026-10-26 10:12:30 +01:00
evgeny
4abebdf35c
Record passing stream publisher checks after integration
2026-10-26 09:58:45 +01:00
evgeny
ced9dc2340
Merge remote-tracking branch 'origin/master'
2026-10-26 09:50:34 +01:00
evgeny
8627e4f6a5
Record stream packing fix and native regression coverage
2026-10-26 09:50:34 +01:00
evgeny
a056b2c262
Describe publisher packing budgets and queued audio rejection
2026-10-26 09:50:34 +01:00
evgeny
017a326a13
Cover stream publisher packing boundaries and actor progress
2026-10-26 09:46:24 +01:00
evgeny
1a9fe0a33b
Fix stream publisher audio packing and video progress
2026-10-26 09:44:16 +01:00
evgeny
8e74619501
Make chat joins atomic and test invitation lifecycle failures
2026-10-26 09:19:35 +01:00
evgeny
bb6ed1723f
Close instance audit with full integration and sanitizer results
2026-10-26 09:09:00 +01:00
evgeny
435ca204fe
Clarify that repeated core start preserves the application running flag
2026-10-26 09:08:42 +01:00
evgeny
8640b45e99
Record instance lifecycle fixes, contracts and sanitizer audit evidence
2026-10-26 09:08:42 +01:00
evgeny
4219d5ce1d
Specify reload behavior for repeated server sections in public header
2026-10-26 09:08:42 +01:00
evgeny
85e87cc9f8
Read radio hop list through aligned storage
2026-10-26 09:08:42 +01:00
evgeny
e577daf6ab
Describe conservative reload for duplicate and resolved IPv6 selectors
2026-10-26 09:08:42 +01:00
evgeny
0d6d1aeb19
Restart instances with duplicate server names to preserve all endpoints
2026-10-26 09:08:42 +01:00
evgeny
a58f3516ab
Clarify first-opened file logger ownership across instances
2026-10-26 09:08:42 +01:00
evgeny
44103038c0
Preserve selected global log path and verify database owner reload
2026-10-26 09:08:42 +01:00
evgeny
06ad255b95
Align instance guide and core lifecycle documentation with audited code
2026-10-26 09:08:42 +01:00
evgeny
9201d8c4f7
Use aligned PCM samples in headless radio integration fixture
2026-10-26 09:08:42 +01:00
evgeny
ceaf71caf8
Align headless PCM before passing frames to Opus
2026-10-26 09:08:42 +01:00
evgeny
817e3744ee
Reclaim cancelled heap timers before checking async resource counters
2026-10-26 09:08:42 +01:00
evgeny
68ead8c7dc
Expose remaining async resource owners in instance regression test
2026-10-26 09:08:42 +01:00
evgeny
59f900810e
Check headless clients, timer rollback and external subscription cleanup
2026-10-26 09:08:42 +01:00
evgeny
0d14613244
Document instance ownership, lifecycle, reload and callback contracts
2026-10-26 09:08:42 +01:00
evgeny
f5488adab0
Release headless audio contexts, clients and timers on chat stop
2026-10-26 09:08:42 +01:00
evgeny
fd93f39c78
Release remaining transport subscriptions at instance destruction
2026-10-26 09:08:42 +01:00
evgeny
1d92591780
Validate headless bindings and honor ephemeral ports in chat startup
2026-10-26 09:08:42 +01:00
evgeny
234c21fb6a
Report outstanding allocations before instance teardown assertion
2026-10-26 09:08:42 +01:00
evgeny
88801318bb
Include complete ETCP connection type in instance contract test
2026-10-26 09:08:42 +01:00
evgeny
9992228dcb
Cover instance callbacks, constructor failures and selective/full reload
2026-10-26 09:08:42 +01:00
evgeny
4e32de8e65
Drain instance-owned sockets and registries without saved callback neighbors
2026-10-26 09:08:42 +01:00
evgeny
a7d2333deb
Reload complete endpoint settings and restart changed resource owners
2026-10-26 09:08:42 +01:00
evgeny
5e63bc2a42
Share atomic network index construction and typed socket teardown
2026-10-26 09:08:42 +01:00
evgeny
b44ea19b4b
Close config parser audit after the full integration suite
2026-10-26 09:08:42 +01:00
evgeny
d681d5abf0
Record parser boundary, rollback and sanitizer audit evidence
2026-10-26 09:08:24 +01:00
evgeny
7ea1fa9954
Validate instance construction and retain the global log path safely
2026-10-26 09:08:24 +01:00
evgeny
372b7d7f65
Retain removed instance callbacks until nested dispatch completes
2026-10-26 09:08:24 +01:00
evgeny
e5e61723d8
Inject config read faults through fortified fread as well
2026-10-26 09:08:24 +01:00
evgeny
7fe77a49c9
Restore console diagnostics after parser dump assertions
2026-10-26 09:08:24 +01:00
evgeny
9888820146
Describe parser validation, list order and service defaults
2026-10-26 09:08:23 +01:00
evgeny
9a7091b595
Document strict parser ownership and validate provided peer keys
2026-10-26 09:08:23 +01:00
evgeny
1041849030
Reject oversized service strings and cover scalar bounds
2026-10-26 09:08:23 +01:00
evgeny
eff0446f8d
Align boolean settings and timer bounds across parser and updater
2026-10-26 09:08:23 +01:00
evgeny
e4852c82b4
Check service scalars and proxy ports before storing configuration
2026-10-26 09:08:23 +01:00
evgeny
99d52afd3f
Validate global scalar options before narrowing or timer conversion
2026-10-26 09:08:23 +01:00
evgeny
4abeafa20e
Normalize malformed key duplicates before strict config verification
2026-10-26 09:08:23 +01:00
evgeny
70b7823993
Use debug and socket test APIs with their declared contracts
2026-10-26 09:08:23 +01:00
evgeny
46bf5b8541
Test parser rejection, CIDR boundaries and allocation rollback
2026-10-26 09:08:23 +01:00
evgeny
d21af324ac
Validate network keys before use and keep secret keys out of dumps
2026-10-26 09:08:23 +01:00
evgeny
f581fa423b
Reject configuration when an option handler or allocation fails
2026-10-26 09:08:23 +01:00
evgeny
bff354f9cc
Validate complete protocol versions, network keys and endpoint ports
2026-10-26 09:08:23 +01:00
evgeny
7593120bd9
Parse CIDR, control endpoints and storage sizes without truncation
2026-10-26 09:08:23 +01:00
evgeny
869421cc05
Audit LAN docs and enforce stream member exclusions
...
Document LAN transport contracts and the completed part of the stream audit. Reject owner-deleted members before profile verification and add network lifecycle coverage for source, supplier and local member removal.
Validation: seven stream checks and all 195 core tests pass; proxy 9/9, burst and load 8/8 pass.
2026-10-26 08:55:31 +01:00
evgeny
6bd4690c3b
Date transport audit completion after final sanitizer checks
2026-10-26 00:01:10 +01:00
evgeny
018f8a20f3
Close transport header audit and record integration validation
2026-10-26 00:00:11 +01:00
evgeny
13f379621a
Keep route ACK fault tests effective with fortified libc calls
2026-10-25 23:57:53 +01:00
evgeny
8bacf73e86
Intercept fortified recvfrom in socket monitor fault tests
2026-10-25 23:56:40 +01:00
evgeny
f327f7f434
Describe REALITY codec, protected stream and relay lifecycle
2026-10-25 23:53:34 +01:00
evgeny
5e7eb6290f
Test STUN recheck with an existing and a newly discovered path
2026-10-25 23:52:41 +01:00
evgeny
bdf0bdf873
Close REALITY relay cleanly when event monitoring fails
2026-10-25 23:52:41 +01:00
evgeny
2f4830a3d0
Recheck each STUN path once and clarify result validity
2026-10-25 23:51:47 +01:00
evgeny
f37ab0824d
Complete REALITY relay half-close on socket hangup
2026-10-25 23:49:47 +01:00
evgeny
7e526521eb
Document REALITY session ownership and test relay failure cleanup
2026-10-25 23:48:38 +01:00
evgeny
88b05c07d9
Harden REALITY record lifetime, relay cleanup and input contracts
2026-10-25 23:40:56 +01:00
evgeny
47bf724748
Include errno in call ring I/O fault test
2026-10-25 23:37:09 +01:00
evgeny
2949101ff8
Test per-thread call traces, counter wrap and dump I/O errors
2026-10-25 23:30:56 +01:00
evgeny
c0365ebb38
Keep teardown traces per thread and retain history across wrap
2026-10-25 23:29:45 +01:00
evgeny
9a13989c7e
Document SOCKS ownership and cover empty UDP and input limits
2026-10-25 23:26:24 +01:00
evgeny
36900780f2
Preserve SOCKS stream data and make control startup cancellable
2026-10-25 23:25:16 +01:00
evgeny
6660f59b3f
Fix automatic endpoint ownership, retries and scan teardown
2026-10-25 23:16:17 +01:00
evgeny
f8c299c2e3
Test socket monitor address loss, callbacks and init faults
2026-10-25 22:58:54 +01:00
evgeny
9296b36366
Make socket monitoring bounded and cancel pending notifications
2026-10-25 22:56:45 +01:00
evgeny
fe6b79127f
Record passing packet dump sanitizer validation
2026-10-25 22:46:21 +01:00
evgeny
dd81f7a665
Record packet dump fix and FreeBSD socket monitor finding
2026-10-25 22:44:55 +01:00
evgeny
ce30ec5fe6
Align packet dump and CRC32 contracts with implementations
2026-10-25 22:43:43 +01:00
evgeny
c3fa6d4db1
Exercise packet dump limits, protocols and fragment output
2026-10-25 22:32:22 +01:00
evgeny
235c2c4f4d
Bound IPv4 packet dump reads and handle fragments
2026-10-25 22:32:22 +01:00
evgeny
9fb939ff24
Document unsafe packet dump reads found during audit
2026-10-25 22:32:22 +01:00
evgeny
e035f53ab6
Fix stale socket references in connectivity probes
2026-10-25 22:30:52 +01:00
evgeny
8b0002e489
Disable UTUN by default in chat frontends and retain core bootstrap transports
2026-10-25 22:10:06 +01:00
evgeny
fcc4a2cf42
Ignore zero-port addresses in connection manager candidates
2026-10-25 21:01:03 +01:00
evgeny
539f09004c
Use channel member snapshots for desktop participant details
2026-10-25 20:04:59 +01:00
evgeny
c832a5d7a5
Unify member snapshots and fix Android member status flicker
2026-10-25 19:29:44 +01:00
evgeny
f09eb81381
Fix NAT stress test time helper on Windows
2026-10-25 18:24:07 +01:00
evgeny
59b3b9bd34
Check remote and local member-file ACL refusals separately
2026-10-25 18:10:58 +01:00
evgeny
b3d3df5c57
Exercise signed LAN endpoints over isolated IPv6 interfaces
2026-10-25 18:06:46 +01:00
evgeny
e75bd460b8
Avoid identity reload when removing expired LAN candidates
2026-10-25 18:00:56 +01:00
evgeny
77b43363fb
Run signed LAN integration separately from other network tests
2026-10-25 18:00:01 +01:00
evgeny
199839b273
Cover socket reuse and TCP LAN recovery and document lifecycle
2026-10-25 17:58:18 +01:00
evgeny
8dd28fb90a
Distinguish LAN nonce failures from ordinary unknown devices
2026-10-25 17:55:35 +01:00
evgeny
94a76e569e
Respect SOCKS policy and report LAN lookup failures precisely
2026-10-25 17:55:34 +01:00
evgeny
09c7e0c937
Test signed LAN discovery, replay rejection and NCD recovery
2026-10-25 17:52:08 +01:00
evgeny
469f95c596
Apply nonce-verified LAN endpoints to offline NCD transports
2026-10-25 17:47:08 +01:00
evgeny
88c2d7a4e3
Share LAN interface matching for socket announcements and NCD
2026-10-25 17:44:52 +01:00
evgeny
e8713e7a2c
Load known node identities for verified LAN candidates
2026-10-25 17:43:21 +01:00
evgeny
28c447370a
Add signed LAN endpoint announcements and nonce proofs
2026-10-25 17:42:40 +01:00
evgeny
f276fda411
Restore Android core activity after internal restart
2026-10-25 17:20:42 +01:00
evgeny
c26b626c35
Handle comments consistently in desktop socket protocol settings
2026-10-25 16:35:54 +01:00
evgeny
7bcdccc4d6
Verify autosocket protocol modes across IPv4 and IPv6 lifecycle
2026-10-25 16:35:54 +01:00
evgeny
fc8a06547d
Test automatic socket protocol configuration and Android port reuse
2026-10-25 16:35:54 +01:00
evgeny
b1a07df606
Translate automatic socket protocol settings
2026-10-25 16:35:54 +01:00
evgeny
9d465bce16
Add Android autosocket protocol selection to network settings
2026-10-25 16:35:54 +01:00
evgeny
eda65ece52
Generate Android autosockets per selected protocol and retain ports
2026-10-25 16:35:54 +01:00
evgeny
ae85423e39
Add automatic socket protocol selector to desktop settings
2026-10-25 16:35:54 +01:00
evgeny
f3bc5acacc
Persist automatic socket protocols in desktop configuration
2026-10-25 16:35:54 +01:00
evgeny
556f6e0b9e
Add selectable protocols for automatic transport sockets
2026-10-25 16:35:54 +01:00
evgeny
270b9fcf80
Merge remote-tracking branch 'origin/master'
2026-10-25 16:30:55 +01:00
evgeny
288b8091ce
Document targeted recovery and retain scheduler diagnostics
2026-10-25 16:26:14 +01:00
evgeny
46f6c03147
Keep requests queued by callbacks for the next scheduler batch
2026-10-25 16:19:40 +01:00
evgeny
87dd27d022
Test targeted chat synchronization across peer events and service lifecycle
2026-10-25 16:13:53 +01:00
evgeny
2eade0a7c0
Scope deferred chat synchronization to channel and peer
2026-10-25 16:11:11 +01:00
evgeny
0e17756e19
Show stream playback buffer chains on desktop and Android
...
Send coalesced per-hop telemetry every 200 ms ahead of video DATA using the shared ETCP transport. Measure pending frames before ETCP handoff, retain stale and unavailable node values, and display the worst path with playback tempo.
Bump stream wire protocol to v7. Validate with 187 core tests, 21 desktop player tests, two Android indicator tests, and an Android APK build.
2026-10-25 15:21:23 +01:00
evgeny
5b5221189c
Buffer stream PCM before playback and recover underruns without resets
2026-10-25 12:51:19 +01:00
evgeny
677f79881c
Diagnose stream audio underruns and fixture timing jitter
2026-10-25 12:30:30 +01:00
evgeny
3ffacbfe37
Document stream recovery validation and existing Qt audio flake
2026-10-25 12:06:35 +01:00
evgeny
c3cf86b9e0
Recover streams after five seconds and start from complete keys
...
Preserve queued media under backpressure, advertise retained keyframe ranges in stream wire v6, and reopen stalled subflows without resetting playback.
Cover large fragmented keys, sustained slow delivery, missing subflows, buffer eviction and stale bootstrap snapshots in integration regressions.
2026-10-25 12:03:49 +01:00
evgeny
4a785c2598
Improve stream recovery, delivery diagnostics and buffer indicators
...
Preserve essential FEC parts under pressure, coordinate stale-data gaps and reopen source subflows in parallel after transport failures.
Add per-peer network and playback diagnostics, Android and desktop buffer indicators, and regression coverage for Wi-Fi switching and congestion.
2026-10-25 01:18:02 +02:00
evgeny
b7d74d8f87
Verify every NCD control ID byte and clarify new-socket scope
2026-10-24 20:27:57 +02:00
evgeny
db0d7a1f47
Document NCD startup rollback reentrant lifetime and address snapshots
2026-10-24 20:24:22 +02:00
evgeny
9844fdefcb
Align automatic socket documentation with shared NCD link matching
2026-10-24 20:24:22 +02:00
evgeny
a353797edb
Specify NCD ownership callbacks matching and fixed little-endian control wire
2026-10-24 20:22:45 +02:00
evgeny
b83a28becc
Keep NAT remeasurement fixture isolated from new direct helper links
2026-10-24 20:20:09 +02:00
evgeny
a3f004772a
Align ETCP fixtures with NCD identity and failed-open contracts
2026-10-24 20:20:09 +02:00
evgeny
702389d8d9
Retain NCD entry and transport through synchronous CLOSE callbacks
2026-10-24 20:18:15 +02:00
evgeny
88004f11ca
Trigger NCD CLOSE on an empty unsuspended queue
2026-10-24 20:17:13 +02:00
evgeny
1f6f815917
Reproduce NCD teardown during synchronous CLOSE queue notification
2026-10-24 20:15:30 +02:00
evgeny
2a7266e17f
Check IPv6 scope on the matching NCD link
2026-10-24 20:15:30 +02:00
evgeny
e137778ba2
Exercise IPv6 REALITY guards and reentrant node snapshot replacement
2026-10-24 20:15:30 +02:00
evgeny
496a3c788e
Cover NCD candidate policy constructor cancellation and nested removal
2026-10-24 20:15:30 +02:00
evgeny
772c0728e1
Use one NCD address matcher for opens updates and new sockets
2026-10-24 20:15:30 +02:00
evgeny
b23d5e6047
Unify NCD opens and retain owners across failed startup and callbacks
2026-10-24 20:15:30 +02:00
evgeny
4695fe4371
Register NCD transport events atomically and reuse ETCP close lifecycle
2026-10-24 20:15:30 +02:00
evgeny
28c951ed9e
Reject stale NCD notifications and validate complete control frames
2026-10-24 20:15:30 +02:00
evgeny
2cc5a6df91
Reproduce NCD startup failures stale events and malformed control
2026-10-24 20:15:30 +02:00
evgeny
10d6ddee38
Wait for target discovery before member file network transfers
2026-10-24 20:15:30 +02:00
evgeny
4314dff390
Expose CM and topology failures in member file network diagnostics
2026-10-24 20:14:58 +02:00
evgeny
c311bb7a1f
Prevent deferred CM readiness from restarting cancelled file transfers
2026-10-24 20:14:58 +02:00
evgeny
b387c4b127
Preserve unowned member download temporaries on refusal and cancellation
2026-10-24 20:14:29 +02:00
evgeny
6d6afb4faa
Align FULL and inline loss counters in dummynet documentation
2026-10-24 19:57:24 +02:00
evgeny
e996e09f6e
Specify dummynet datagram timing reconfiguration and filter ownership contracts
2026-10-24 19:57:24 +02:00
evgeny
8d035a065a
Cover partial dummynet startup rollback without resource leaks
2026-10-24 19:57:24 +02:00
evgeny
0df339c384
Verify inline filters with real UDP delivery and independent ETCP teardown
2026-10-24 19:57:24 +02:00
evgeny
c341a9b6cc
Record passing full validation after ETCP diagnostics merge
2026-10-24 19:45:37 +02:00
evgeny
897cc007e1
Merge current master and reconcile completed member-files fixes
2026-10-24 19:38:40 +02:00
evgeny
6c9be8b134
Record full-suite failure deleting an unowned member-files temp
2026-10-24 19:26:27 +02:00
evgeny
cfa0419576
Record repeated slow-duplex failures with native and real clocks
2026-10-24 19:09:34 +02:00
evgeny
f8a2ecaabd
Add isolated slow-duplex measurements and record BBR diagnosis
2026-10-24 19:07:18 +02:00
evgeny
79e37f64f8
Document member files audit findings and verified fixes
2026-10-24 18:47:06 +02:00
evgeny
4d729a2ff0
docs(member-files): align lifecycle and receipt retry behavior
2026-10-24 18:47:06 +02:00
evgeny
4f96926f6b
docs(member-files): complete public request and transfer contracts
2026-10-24 18:47:06 +02:00
evgeny
c1da55ad87
docs(member-files): clarify storage lifecycle and internal owners
2026-10-24 18:47:06 +02:00
evgeny
f7b064a11a
docs(member-files): specify wire codec and worker ownership
2026-10-24 18:47:06 +02:00
evgeny
41f0aa2439
fix(member-files): reject local FIFO without blocking disk worker
2026-10-24 18:47:06 +02:00
evgeny
1c1b2b2026
test(member-files): detect blocking open of local FIFO sources
2026-10-24 18:47:06 +02:00
evgeny
488577ac0e
test(member-files): verify timed replay and bulk removal
2026-10-24 18:47:06 +02:00
evgeny
4d40b6f5f7
fix(member-files): bound busy retries by receipt lifetime
2026-10-24 18:47:06 +02:00
evgeny
2d8384830d
test(member-files): cover bulk mutations and lost result replay
2026-10-24 18:47:06 +02:00
evgeny
0c8e9eef3c
fix(member-files): retry busy mutations within replay guarantees
2026-10-24 18:47:06 +02:00
evgeny
20b4975d57
fix(member-files): prevent restart after early transfer cancellation
2026-10-24 18:47:06 +02:00
evgeny
0f42f92feb
fix(member-files): clean up only owned download temporaries
2026-10-24 18:47:06 +02:00
evgeny
0b2dac3c5b
test(member-files): retain route precondition after ABI diagnosis
2026-10-24 18:47:06 +02:00
evgeny
5df6d0c8f3
test(member-files): log startup state before transfer
2026-10-24 18:47:06 +02:00
evgeny
a198cfb9e3
Bind inline dummynet filters to UDP link lifetime and report failures
2026-10-24 17:33:59 +02:00
evgeny
83bf76dd41
Release borrowed send-hook owners before ETCP link teardown
2026-10-24 17:33:59 +02:00
evgeny
36c096c4e9
Make UDP dummynet configuration and resource failures recoverable
2026-10-24 17:33:59 +02:00
evgeny
29d54ed20d
Reproduce dummynet configuration datagram and timer failures
2026-10-24 17:33:59 +02:00
evgeny
e59ef240e8
test(member-files): let transfer own initial route request
2026-10-24 17:33:47 +02:00
evgeny
27dd9e7b60
test(member-files): preserve unowned download temp on refusal
2026-10-24 17:33:47 +02:00
evgeny
8185b83eba
Record final RTT timer, callback and network validation
2026-10-24 17:26:59 +02:00
evgeny
76afc56be8
Make RTT callback regression independent of host uptime
2026-10-24 17:26:59 +02:00
evgeny
5420a07ffc
Refresh RTO before RTT callbacks can close the link
2026-10-24 17:26:59 +02:00
evgeny
f00d67ca3c
Trace refreshed RTO deadlines without per-packet debug noise
2026-10-24 17:26:59 +02:00
evgeny
90dff0b2f2
Refresh pending retransmit timer when timestamp RTT changes
2026-10-24 17:26:59 +02:00
evgeny
83734c920d
Expose existing RTO timer refresh and regress timestamp shrink
2026-10-24 17:26:59 +02:00
evgeny
e1dcee3c86
Record verified RTT filter and RTO recovery fixes
2026-10-24 17:26:59 +02:00
evgeny
d5114f36b4
Clarify timestamp RTT role in transport contracts
2026-10-24 17:26:59 +02:00
evgeny
68a225baec
Exercise RTT changes through real ETCP and document RTO inputs
2026-10-24 17:26:59 +02:00
evgeny
ef404da44c
Recover DATA RTT sampling after path delay increases
2026-10-24 17:26:59 +02:00
evgeny
dbda8a24d7
Verify RTT hold rounds and document filter timing
2026-10-24 17:26:59 +02:00
evgeny
bb462bad69
Preserve BBR RTT filter age and full-width probe deadlines
2026-10-24 17:26:59 +02:00
evgeny
deee734e6c
Record duplex validation and remaining BBR follow-ups
2026-10-24 17:26:59 +02:00
evgeny
8ff4a0bf46
Document ETCP receiver-clock bandwidth sampling
2026-10-24 17:26:59 +02:00
evgeny
d2703b2145
Use receiver delivery clock for ETCP bandwidth samples
2026-10-24 17:26:59 +02:00
evgeny
9b72a0dadf
Close media contract audit and record architecture review
2026-10-24 17:26:12 +02:00
evgeny
5e3701bb2f
Clarify encrypted attachment MIME and UI contracts
2026-10-24 17:26:12 +02:00
evgeny
4bab1f7ea4
Align media delivery architecture docs with implementation
2026-10-24 17:26:12 +02:00
evgeny
9d9c82fb03
Document validated MIME fix and regression results
2026-10-24 17:26:12 +02:00
evgeny
99c1ee3394
test(media): cover encrypted MIME validation and side effect free rejection
2026-10-24 17:26:11 +02:00
evgeny
d88e39fb4e
chat: reject unsupported encrypted attachment types before side effects
2026-10-24 17:26:11 +02:00
evgeny
f63d640c95
media: share bounded content type validation in encrypted containers
2026-10-24 17:26:11 +02:00
evgeny
86b7f9cf44
docs(media): record accepted but unreadable MIME containers
2026-10-24 17:26:11 +02:00
evgeny
f331d177ca
docs(media): clarify preparation ownership and active protocol commands
2026-10-24 17:26:11 +02:00
evgeny
28bbd62d74
docs(media): specify attachment metadata and voice file contracts
2026-10-24 17:26:11 +02:00
evgeny
c1717d4047
docs(media): record validated SQLite announcement fix
2026-10-24 17:26:11 +02:00
evgeny
4bfdb1dcc2
test(media): restore console after SQL diagnostic assertions
2026-10-24 17:26:11 +02:00
evgeny
6e3be1aaf3
test(media): verify exact announcement identities after SQL recovery
2026-10-24 17:26:11 +02:00
evgeny
eea2b22c4e
test(media): cover malformed local announcements and SQLite failures
2026-10-24 17:26:11 +02:00
evgeny
81fc4291db
media: validate SQLite records before local block announcements
2026-10-24 17:26:11 +02:00
evgeny
1a212489fd
docs(media): correct announcement function reference
2026-10-24 17:26:11 +02:00
evgeny
0d616ce1e7
docs(media): record unchecked SQLite announcements and fix plan
2026-10-24 17:26:11 +02:00
evgeny
7ff8e1f15a
docs(media): specify crypto and file transfer ownership contracts
2026-10-24 17:26:11 +02:00
evgeny
40e2fe2e27
docs(media): record validated voice duration fix
2026-10-24 17:26:11 +02:00
evgeny
359a9f3dfc
test(media): cover voice duration bounds and early rejection
2026-10-24 17:26:11 +02:00
evgeny
68a7695d81
media: reject voice duration by complete frames before encoding
2026-10-24 17:26:11 +02:00
evgeny
6f3d634c77
media: share attachment duration limit
2026-10-24 17:26:11 +02:00
evgeny
4177ab3536
docs(media): record voice duration boundary defect and fix plan
2026-10-24 17:26:11 +02:00
evgeny
80558f6686
Merge remote-tracking branch 'origin/master'
2026-10-24 17:15:42 +02:00
evgeny
da5cf6fc99
Prepare signed existing members before end-to-end CHAT joining
2026-10-24 17:00:53 +02:00
evgeny
e6e866a41a
Seed complete members in isolated database sync fixtures
2026-10-24 17:00:53 +02:00
evgeny
e1675f6910
Preserve chat stress failure logs and group admission diagnostics
2026-10-24 16:56:52 +02:00
evgeny
bb13824ad8
Complete NAT wire lifecycle scheduling and diagnostic contracts
2026-10-24 16:53:10 +02:00
evgeny
857a4cee2f
Exercise NAT startup rollback and UDP timeout allocation failure
2026-10-24 16:52:10 +02:00
evgeny
a6444725da
Reject UDP probes when their timeout cannot be scheduled
2026-10-24 16:51:34 +02:00
evgeny
4a00da31da
Document complete membership queries separately from row presence
2026-10-24 16:50:41 +02:00
evgeny
af50fde9d9
Verify CHAT admission excludes placeholders and deleted members
2026-10-24 16:50:41 +02:00
evgeny
f1b62f9112
Require active complete membership for CHAT group admission
2026-10-24 16:46:01 +02:00
evgeny
0b4997c5d5
Release removed NAT helper sockets and reject partial startup
2026-10-24 16:40:51 +02:00
evgeny
b8dd2b8cc5
Verify media cancellation without reading a closed CM handle
2026-10-24 16:31:49 +02:00
evgeny
6cfd88afcf
Reject zero CM request ids before creating peer state
2026-10-24 16:25:27 +02:00
evgeny
8e7fb1f31b
Reconcile CM protocol scheduling cache and cleanup contracts
2026-10-24 16:24:30 +02:00
evgeny
00a85a1468
Keep local CM demand after stale control and reject zero requests
2026-10-24 16:22:15 +02:00
evgeny
182fb97970
Remove obsolete CM disconnect and clarify service ownership
2026-10-24 16:22:15 +02:00
evgeny
e6a812042f
Check CM bootstrap ownership and mandatory monitor timers
2026-10-24 16:17:20 +02:00
evgeny
2f3cf0933c
Keep READY intermediaries eligible and test CM allocation failures
2026-10-24 16:14:48 +02:00
evgeny
80451c43be
Make CM cleanup allocation-free and reject incomplete startup
2026-10-24 16:09:39 +02:00
evgeny
007f7c8ae8
Preserve group attachment before transport readiness
2026-10-24 16:01:29 +02:00
evgeny
f541ab428b
Describe BGP commit boundaries and diagnose initialization failures
2026-10-24 15:57:40 +02:00
evgeny
7ebfddfc4b
Clarify group processing callbacks and failed route installation
2026-10-24 15:56:36 +02:00
evgeny
56d513ed85
Inject topology pool database registry and radio timer failures
2026-10-24 15:52:39 +02:00
evgeny
d1562bdd0e
Check that late BGP allocation failure preserves accepted state
2026-10-24 15:51:43 +02:00
evgeny
145dd1e5ab
Prepare BGP paths before committing received node state
2026-10-24 15:50:17 +02:00
evgeny
ab5c077600
Unwind topology initialization on pool and SQLite failures
2026-10-24 15:49:42 +02:00
evgeny
6b413d67a6
Exercise group creation rollback radio retry and BGP subnets
2026-10-24 15:48:58 +02:00
evgeny
4363a424d0
Reject incomplete groups and refresh BGP subnet ownership
2026-10-24 15:47:28 +02:00
evgeny
086eefed55
Keep both test transports owned while checking invite timeout
2026-10-24 15:41:16 +02:00
evgeny
5e8ff95c99
Verify invite deadlines and transport loss with shared owners
2026-10-24 15:38:42 +02:00
evgeny
21d8b3844e
Apply refreshed peer priorities without replacing group requests
2026-10-24 15:36:12 +02:00
evgeny
a7ffaf497e
Include concrete transport state in invite regression tests
2026-10-24 15:30:37 +02:00
evgeny
9ce0abe5a9
Cover invite response bounds isolation and failure propagation
2026-10-24 15:30:04 +02:00
evgeny
483e89cd79
Validate channel descriptions and isolate invite request ownership
2026-10-24 15:28:44 +02:00
evgeny
4d9e624f8e
Reconcile router protocol and architecture with implementation
2026-10-24 15:15:35 +02:00
evgeny
bafda5ae3a
Merge origin/master with encrypted attachment ownership fixes
...
Validation: ./build.sh --no-gui -j4 and make check -j4 passed; 186 tests, no failures.
2026-10-24 15:11:50 +02:00
evgeny
09e620e12a
Specify router local delivery, callbacks, flow control and reset contracts
2026-10-24 15:10:06 +02:00
evgeny
3bd9b964fa
Remove obsolete router state and clarify receive diagnostics
2026-10-24 15:07:41 +02:00
evgeny
a258b77240
Cancel pending transit queues when destroying the router
2026-10-24 15:06:48 +02:00
evgeny
936bacbe4b
Clarify encrypted output cleanup contract on filesystem errors
2026-10-24 15:00:05 +02:00
evgeny
1227027c2f
Record validated encrypted attachment ownership fix and remaining audit scope
2026-10-24 14:59:12 +02:00
evgeny
d8089f8d12
Release router unit fixture registry ownership completely
2026-10-24 14:56:23 +02:00
evgeny
4862a52684
Document encrypted attachment preparation publication and recovery ownership
2026-10-24 14:55:24 +02:00
evgeny
e40d8de1b2
Keep full router jitter precision in monitor snapshots
2026-10-24 14:54:48 +02:00
evgeny
dbf6bb759c
Preserve the unsigned range of router RTT jitter
2026-10-24 14:54:48 +02:00
evgeny
be0bd224fa
Use canonical media base throughout attachment recovery
2026-10-24 14:51:32 +02:00
evgeny
6bf6d99b9c
Test service cancellation after encrypted attachment rename
2026-10-24 14:50:32 +02:00
evgeny
7caebc5a11
Verify attachment recovery preserves active temp owners across restarts
2026-10-24 14:48:25 +02:00
evgeny
6c13755a5c
Reject invalid local router payloads and report delivery failures
2026-10-24 14:48:04 +02:00
evgeny
c6f28571b7
Keep local callback context private and fully detach services
2026-10-24 14:46:33 +02:00
evgeny
76ba7aae6a
Cover encrypted file aliases and I/O failures through publication
2026-10-24 14:45:32 +02:00
evgeny
066b895055
Remove closing router channels before notifying services
2026-10-24 14:44:22 +02:00
evgeny
a297d2d649
Record validated ACK batching and remaining solo duplex limits
2026-10-24 14:43:03 +02:00
evgeny
f09d76e3fd
Recover owned encrypted attachment temporaries in both storage trees
2026-10-24 14:43:03 +02:00
evgeny
7737391ded
Document absolute ACK scheduling and cross-path precedence
2026-10-24 14:43:03 +02:00
evgeny
dc08256025
Clarify due ACK precedence and bounded burst behavior
2026-10-24 14:43:03 +02:00
evgeny
72d7405a97
Serve due path ACKs before DATA on another link
2026-10-24 14:43:03 +02:00
evgeny
73096e8e3e
Verify ACK deadlines through link down and removal
2026-10-24 14:43:03 +02:00
evgeny
51c667edd8
Distinguish early ACK packets from legitimate batched entries
2026-10-24 14:43:03 +02:00
evgeny
2edf09fde1
Cover ACK batching deadlines, timer races, and failure cleanup
2026-10-24 14:43:03 +02:00
evgeny
6ab2526966
Align ACK contracts and diagnostics with deadline state
2026-10-24 14:43:03 +02:00
evgeny
c1b0772071
Honor absolute ACK deadlines across wakes and piggyback
2026-10-24 14:43:03 +02:00
evgeny
159237a70c
Define absolute ACK deadlines and urgent fallback contracts
2026-10-24 14:43:03 +02:00
evgeny
c8051619c1
Reproduce premature ACKs before their absolute deadline
2026-10-24 14:43:03 +02:00
evgeny
2b74d2bf4f
Record final queue diagnostics validation and observations
2026-10-24 14:43:03 +02:00
evgeny
35bd19b6c0
Observe ACK queue peaks before immediate send
2026-10-24 14:43:03 +02:00
evgeny
7e166c650c
Document multipath diagnostics and the ACK deadline defect
2026-10-24 14:43:03 +02:00
evgeny
055ffa27b2
Add offline multipath charts and count timestamped ACKs
2026-10-24 14:43:03 +02:00
evgeny
cd3cf38f06
Expose callback and stream progress in multipath snapshots
2026-10-24 14:43:03 +02:00
evgeny
12b0ab437e
Capture buffered multipath queue and pacing diagnostics
2026-10-24 14:43:03 +02:00
evgeny
a9bbb470c2
Record full validation of retry scheduling changes
2026-10-24 14:43:03 +02:00
evgeny
6894c66f3a
Record passing fault matrix and remaining duplex limits
2026-10-24 14:43:03 +02:00
evgeny
a2f9b76d10
Record retry scheduler architecture and regression coverage
2026-10-24 14:43:03 +02:00
evgeny
3d40951e66
Clarify input resumption with queued DATA
2026-10-24 14:43:03 +02:00
evgeny
4350b54769
Publish attachment output once and preserve ownership through cancellation
2026-10-24 14:41:39 +02:00
evgeny
92d52d25a8
Prepare encrypted attachments in exclusively owned durable temporaries
2026-10-24 14:40:53 +02:00
evgeny
9e0949434e
Preserve video temp mode and test durable file commit boundaries
2026-10-24 14:39:46 +02:00
evgeny
aa7a9b74f4
Select ordinary temporary file mode for copies and media blocks
2026-10-24 14:38:54 +02:00
evgeny
12556344b0
Add durable owned temporary file lifecycle and shared publication helpers
2026-10-24 14:38:34 +02:00
evgeny
2e3ab00ce6
Design owned temporary output and durable publication for encrypted attachments
2026-10-24 14:34:00 +02:00
evgeny
f92c78a2e0
Merge remote-tracking branch 'origin/master'
2026-10-24 14:33:18 +02:00
evgeny
7c7c316c3f
Document atomic local publication and bootstrap cleanup
2026-10-24 14:25:18 +02:00
evgeny
94aaf3c8e3
Align topology model documentation with current runtime contracts
2026-10-24 14:23:50 +02:00
evgeny
c282d03f25
Describe NODEINFO byte layout, identity and registry semantics
2026-10-24 14:20:29 +02:00
evgeny
f7db49fc97
Cover local topology replacement allocation failures
2026-10-24 14:18:42 +02:00
evgeny
8cc97d2ffe
Record reproducible encrypted file alias data loss during media audit
2026-10-24 14:17:35 +02:00
evgeny
f9994e11b5
Clarify local update ownership, results and failure contracts
2026-10-24 14:17:13 +02:00
evgeny
1e0281d4d8
Prepare local topology replacements before retiring old state
2026-10-24 14:16:39 +02:00
evgeny
42a58881ca
Document SQLite snapshots, projections and membership contracts
2026-10-24 14:13:26 +02:00
evgeny
19c3cc0434
Reject interrupted membership channel queries
2026-10-24 14:10:28 +02:00
evgeny
81e2a9aa4a
Return peer lists atomically after successful SQL iteration
2026-10-24 14:09:36 +02:00
evgeny
575a3788e3
Roll back failed channel deletion and node classification
2026-10-24 14:07:28 +02:00
evgeny
461417beac
Record completed proxy fixes and architecture validation results
2026-10-24 14:03:56 +02:00
evgeny
26b5da6835
Release partial SQL bootstrap records on allocation failures
2026-10-24 14:03:48 +02:00
evgeny
99608de811
Reject failed topology writes and malformed stored signatures
2026-10-24 14:01:37 +02:00
evgeny
5c4207c145
Keep resolved routing audit details out of the task backlog
2026-10-24 14:00:22 +02:00
evgeny
a42dc38874
Check real raw ICMP explicitly alongside deterministic loopback
2026-10-24 14:00:17 +02:00
evgeny
83194b19c7
Use supported TCP proxy exit option in TUN integration fixture
2026-10-24 13:59:29 +02:00
evgeny
14c5ddf864
Propagate failures when storing verified node identities
2026-10-24 13:57:05 +02:00
evgeny
f10a6f70c5
Describe checked datagram startup and bounded TCP HUP handling
2026-10-24 13:54:40 +02:00
evgeny
e2ee5f2397
Document atomic proxy client creation and instance shutdown order
2026-10-24 13:52:22 +02:00
evgeny
324b289968
Bound topology dump writes and return the actual length
2026-10-24 13:45:08 +02:00
evgeny
5914e26579
Update datagram and TCP exit documentation for explicit ownership
2026-10-24 13:42:20 +02:00
evgeny
2894e06014
Document HUP polling contract and isolate ICMP fault injection
2026-10-24 13:41:16 +02:00
evgeny
d0edacb7b9
Test HUP registration failure and teardown with pending TCP writes
2026-10-24 13:39:50 +02:00
evgeny
1ce285c09b
Preserve datagram bindings and verify optional ICMP behavior
2026-10-24 13:38:45 +02:00
evgeny
8dcd2fac3b
Record topology dump truncation defect found during audit
2026-10-24 13:37:22 +02:00
evgeny
bb2ef05157
Roll back required TUN mappings and verify instance startup failures
2026-10-24 13:36:22 +02:00
evgeny
c4eddfe50e
Cover proxy startup rollback and datagram socket failures
2026-10-24 13:34:51 +02:00
evgeny
f0629ea679
Exercise orderly and abrupt TLS shutdown in proxy integration
2026-10-24 13:29:45 +02:00
evgeny
4da9d85545
Honor TCP read backpressure across HUP and restore polling
2026-10-24 13:28:44 +02:00
evgeny
d5444fb9bc
Check UDP socket operations and roll back incomplete flows
2026-10-24 13:25:43 +02:00
evgeny
50da7fe457
Make TCP proxy construction atomic and retain instance datagrams
2026-10-24 13:24:30 +02:00
evgeny
99be040488
Separate ICMP exit startup from shared context ownership
2026-10-24 13:23:58 +02:00
evgeny
902ffa05b4
Record NODEINFO parsing fix and sanitizer validation
2026-10-24 13:21:42 +02:00
evgeny
051b13e161
docs(proxy): align planned teardown with instance ownership
2026-10-24 13:18:52 +02:00
evgeny
04ace670ed
docs(proxy): design error handling and lifecycle fixes
2026-10-24 13:17:33 +02:00
evgeny
99dd48480f
Align REALITY round-trip fixture with NODEINFO ownership
2026-10-24 13:09:16 +02:00
evgeny
acd9dcd1a8
Cover empty NODEINFO outputs and malformed BGP preservation
2026-10-24 13:03:42 +02:00
evgeny
790978458c
Make NODEINFO section parsing independent of requested outputs
2026-10-24 13:01:30 +02:00
evgeny
f9a3830416
Add NODEINFO wire parsing and allocation regressions
2026-10-24 12:59:00 +02:00
evgeny
5f51149622
Record routing audit progress and NODEINFO parsing defect
2026-10-24 12:42:47 +02:00
evgeny
0688ffc26d
docs(proxy): qualify integration audit results
2026-10-24 12:39:54 +02:00
evgeny
ec1fc52da1
docs(proxy): record teardown findings and refine counters
2026-10-24 12:39:09 +02:00
evgeny
5e80a9cc6c
docs(proxy): consolidate current protocol and audit coverage
2026-10-24 12:38:27 +02:00
evgeny
f003aaa92d
docs(proxy): reconcile TCP client server and listener behavior
2026-10-24 12:36:16 +02:00
evgeny
bf03348c64
Correct connectivity probe and IPv4 routing documentation
2026-10-24 12:19:22 +02:00
evgeny
0445c38c31
Clarify address profiles and route statistics contracts
2026-10-24 12:18:30 +02:00
evgeny
30a69712fc
Align route table and observation documentation
2026-10-24 12:17:44 +02:00
evgeny
27cf6ae365
docs(proxy): document per-instance datagram contexts
2026-10-24 12:16:47 +02:00
evgeny
1ad8ff73ad
Document routing helper ownership and wire contracts
2026-10-24 12:16:31 +02:00
evgeny
0bc0d6cc62
Enforce disjoint IPv4 route insertion atomically
2026-10-24 12:15:29 +02:00
evgeny
23cec465bf
docs(proxy): specify TCP lifecycle and UDP ownership
2026-10-24 12:14:42 +02:00
evgeny
a4abe30b18
docs(proxy): clarify flow control and HTTP parser contracts
2026-10-24 12:13:05 +02:00
evgeny
34d1dcb7c8
Document send scanning, retry rounds, and fast stall recovery
2026-10-24 12:01:20 +02:00
evgeny
93bf846fc4
Preserve retry priority during bounded burst measurements
2026-10-24 11:46:42 +02:00
evgeny
c87cc6e4a2
Match the input waiter callback signature
2026-10-24 11:41:39 +02:00
evgeny
1fbd1e466b
Verify retry history, stall recovery, and admission callbacks
2026-10-24 11:39:31 +02:00
evgeny
b4d5da1df2
Wait for both configured RTOs in queue bypass regression
2026-10-24 11:35:25 +02:00
evgeny
ff74ac8295
Scan past blocked DATA while prioritizing sendable retries
2026-10-24 11:31:46 +02:00
evgeny
dcd6cd93c4
Select unused retry paths before starting another round
2026-10-24 11:29:13 +02:00
evgeny
d439ee7ca7
Track stalled DATA paths and accepted retry rounds safely
2026-10-24 11:28:29 +02:00
evgeny
39ee5b392b
Define retry path history and fast stall state contracts
2026-10-24 11:27:48 +02:00
evgeny
acde6bda9d
Test send queue bypass, retry priority, and bounded admission
2026-10-24 11:22:28 +02:00
evgeny
8167e0e5f5
Record recovery stage checks and repeated stalled-path cycles
2026-10-24 10:43:25 +02:00
evgeny
5a32d08ffd
Buffer retry choice diagnostics until measurement completes
2026-10-24 10:32:44 +02:00
evgeny
b98b87ea12
Explain retry choices between stalled multipath channels
2026-10-24 10:26:14 +02:00
evgeny
05d3fa30d9
Record path history for the fragment blocking delivery
2026-10-24 10:19:36 +02:00
evgeny
516ed04897
Identify the fragment behind maximum multipath message latency
2026-10-24 10:18:11 +02:00
evgeny
1d295c7d3a
Measure multipath recovery stages separately from RTO waits
2026-10-24 10:05:13 +02:00
evgeny
1c6a7e7bf9
Remove speculative early retries from the ETCP plan
2026-10-24 09:56:54 +02:00
evgeny
f1f4976222
Record retry recovery status and full regression results
2026-10-24 09:48:19 +02:00
evgeny
14515ca446
Document retry wait policy and fault recovery measurements
2026-10-24 09:46:38 +02:00
evgeny
8dd03c2b5c
Wait for another UP path before retrying ETCP DATA
2026-10-24 09:38:20 +02:00
evgeny
412b9bc713
Test retry waiting for another available ETCP path
2026-10-24 09:34:21 +02:00
evgeny
ff2860ffbc
Record pacer validation and remaining multipath failures
2026-10-24 09:09:42 +02:00
evgeny
c7a530092d
Check pacer reset callback against its actual contract
2026-10-24 02:54:41 +02:00
evgeny
deac10e3f6
Wake ETCP pacer at its first permitted transmit time
2026-10-24 02:49:25 +02:00
evgeny
42c4195f2e
Test pacer eligibility boundaries and readiness lifecycle
2026-10-24 02:25:23 +02:00
evgeny
ce3d942efe
Record multipath baseline and verify pacer wakeup defect
2026-10-24 02:17:38 +02:00
evgeny
a22a27b7a9
Record validated signature lifecycle fix and exact contracts
2026-10-24 01:15:49 +02:00
evgeny
7d57b484d8
Focus signature test logs on lifecycle and failure stages
2026-10-24 01:10:12 +02:00
evgeny
44acb5aecf
Document streaming signature state ownership and retries
2026-10-24 01:03:24 +02:00
evgeny
5d11f90cd4
Make streaming signature initialization and cleanup safe
2026-10-24 01:02:10 +02:00
evgeny
4824f3523d
Test streaming signature ownership and OpenSSL failures
2026-10-24 01:00:36 +02:00
evgeny
5a7823e6ef
Record streaming signature OOM defect and completed temp fix
2026-10-24 00:46:40 +02:00
evgeny
5792db996c
Clarify crypto key derivation and actual module dependencies
2026-10-24 00:44:29 +02:00
evgeny
16a33ac9f7
Correct remaining crypto examples and streaming signature buffer contract
2026-10-24 00:37:18 +02:00
evgeny
3afd31e561
Align crypto documentation with random CCM nonces and public-key node IDs
2026-10-24 00:35:13 +02:00
evgeny
2715faffff
Document receiver-bounded BBR samples and diagnostic input contracts
2026-10-24 00:33:19 +02:00
evgeny
9459b43211
Remove stale pacing and handshake descriptions from ETCP protocol specification
2026-10-24 00:32:42 +02:00
evgeny
964f6cb045
Correct ETCP diagnostic filters and state dump documentation
2026-10-24 00:30:33 +02:00
evgeny
bed99abbe9
Clarify STCP client ownership, ping lifetime and handshake byte order
2026-10-24 00:28:58 +02:00
evgeny
d6eecd6f1c
Document STCP listener arguments, accepted ownership and current handshake phases
2026-10-24 00:27:56 +02:00
evgeny
ecdd767934
Align connection documentation with current UDP sessions and keepalive wire format
2026-10-24 00:27:14 +02:00
evgeny
1cf2cc10dd
Keep file I/O return-value overview consistent with orphan cleanup API
2026-10-24 00:21:25 +02:00
evgeny
39f9d6a0e9
Keep active block and worker temporaries during media cache cleanup
2026-10-24 00:16:57 +02:00
evgeny
e84c66a3d3
Reproduce orphan cleanup during a real encrypted attachment transfer
2026-10-24 00:15:16 +02:00
evgeny
e195894048
Protect owned temporary files from concurrent orphan removal
2026-10-24 00:13:18 +02:00
evgeny
ee437b9473
Align ETCP header declarations, timestamp units and UDP contracts with code
2026-10-24 00:06:45 +02:00
evgeny
299c613760
Correct ETCP API callback and datagram ownership documentation
2026-10-24 00:06:00 +02:00
evgeny
74b63cc315
Verify ETCP registry identity and failure ownership invariants
2026-10-24 00:01:02 +02:00
evgeny
032f8e83b2
Publish incoming UDP peers before callbacks and preserve accepted ownership
2026-10-23 23:57:51 +02:00
evgeny
c7d7789a58
Reuse ETCP registry entries and reject duplicate peer indexing
2026-10-23 23:57:32 +02:00
evgeny
fb995db489
Cover UDP accept cancellation with surviving paths and NCD owners
2026-10-23 23:50:39 +02:00
evgeny
942736d604
Check accepted and rejected MTU boundaries in both UDP handshake directions
2026-10-23 23:42:49 +02:00
evgeny
b8021efed8
Validate UDP handshake MTU and nonzero path IDs before state updates
2026-10-23 23:41:58 +02:00
evgeny
1260884485
Exercise invalid UDP INIT path identifiers and MTU limits
2026-10-23 23:40:37 +02:00
evgeny
52d9077bb5
Describe retained link scopes and callback-safe RX timeouts
2026-10-23 23:37:44 +02:00
evgeny
519a2ee242
Cover UDP callback deletion, connection close and path replacement
2026-10-23 23:35:55 +02:00
evgeny
6d6ec7e725
Keep RX timeout and link-status callbacks inside retained link scopes
2026-10-23 23:31:16 +02:00
evgeny
d0a168f89e
Retain ETCP links across callbacks and release closed paths on scope exit
2026-10-23 23:30:43 +02:00
evgeny
5ccd47dd17
Bind incoming UDP INIT identity to the authenticated key
2026-10-23 23:17:25 +02:00
evgeny
2f6ff9303e
Reject authenticated INIT requests claiming another node identity
2026-10-23 23:17:01 +02:00
evgeny
d9aede4138
Drain pending UDP traffic before snapshotting INIT validation state
2026-10-23 23:13:03 +02:00
evgeny
0860b1e06d
Validate the complete UDP INIT request body before reading fields
2026-10-23 23:09:27 +02:00
evgeny
10927b1d08
Allow early wire rejection in INIT request boundary tests
2026-10-23 23:06:23 +02:00
evgeny
3a8cc8a326
Exercise encrypted UDP INIT request body boundaries
2026-10-23 23:03:48 +02:00
evgeny
bf7464a4d9
Document connection ownership after a cancelled TCP accept
2026-10-23 22:53:58 +02:00
evgeny
e51badebcb
Preserve active owners and paths when an incoming TCP link is cancelled
2026-10-23 22:53:36 +02:00
evgeny
d5d103148f
Test ownership handoff while cancelling an incoming TCP path
2026-10-23 22:52:40 +02:00
evgeny
d5721563fc
Clarify NEW cancellation and subscription mutation semantics
2026-10-23 22:43:09 +02:00
evgeny
274554f7a5
Cover TCP creation cancellation and self-unsubscription on both roles
2026-10-23 22:42:20 +02:00
evgeny
8fe1011da2
Document constructor cancellation and link memory ownership
2026-10-23 22:41:42 +02:00
evgeny
21a4dd7a70
Exercise callback unsubscription and nested dispatch on all ETCP chains
2026-10-23 22:40:47 +02:00
evgeny
33912355d6
Keep removed ETCP subscriptions until the outer dispatch returns
2026-10-23 22:39:56 +02:00
evgeny
5178f7abc6
Define instance callback dispatch lifetime for safe unsubscription
2026-10-23 22:39:06 +02:00
evgeny
d0ee0341c5
Verify cancelled link constructors and guard UDP handshake callbacks
2026-10-23 22:36:39 +02:00
evgeny
a2861b0570
Keep cancelled links alive until their constructor returns
2026-10-23 22:35:14 +02:00
evgeny
a51c080407
Return NULL when callbacks cancel ETCP connection creation
2026-10-23 22:34:46 +02:00
evgeny
2ea4fb94ab
Test nested deletion of the current and neighboring ETCP paths
2026-10-23 22:03:58 +02:00
evgeny
986193055e
Suppress stale connection UP after its callback removes the last path
2026-10-23 22:03:29 +02:00
evgeny
a43d478495
Cover close from connection INIT and UP callbacks on both roles
2026-10-23 22:02:44 +02:00
evgeny
bf5a128a05
Correct STCP close contracts and sanitizer issues in its test
2026-10-23 22:01:48 +02:00
evgeny
477d8f995b
Document STCP adapter ownership, callbacks and reconnect lifecycle
2026-10-23 21:59:12 +02:00
evgeny
03d69cb772
Verify TCP retry timing, recovery and cancellation end to end
2026-10-23 21:58:27 +02:00
evgeny
f5e4c78b8c
Exercise repeated close during the server link teardown event
2026-10-23 21:57:10 +02:00
evgeny
425e1a527b
Provide the peer snapshot for the incoming test owner
2026-10-23 21:56:35 +02:00
evgeny
f1e3c2c08a
Hold the incoming connection before exercising DOWN callbacks
2026-10-23 21:55:54 +02:00
evgeny
bd9f1bb0c9
Flush cancelled timers in teardown tests and clarify adapter close
2026-10-23 21:54:49 +02:00
evgeny
1fb52d3f5b
Report active resources when callback teardown is unbalanced
2026-10-23 21:54:15 +02:00
evgeny
4614577d19
Stop readiness publication after callback close and rescan teardown links
2026-10-23 21:49:11 +02:00
evgeny
f37221107d
Guard TCP link transitions across callbacks and unify reconnect backoff
2026-10-23 21:48:11 +02:00
evgeny
42e7b9b1b6
Own STCP adapter queues and report connection failures before READY
2026-10-23 21:46:12 +02:00
evgeny
7753a0f11e
Include the raw STCP server API in adapter regression tests
2026-10-23 21:43:17 +02:00
evgeny
4bfec7257f
Cover TCP callback teardown on both roles and guard link close reentry
2026-10-23 21:40:43 +02:00
evgeny
2cad81050d
Exercise early STCP adapter failure and cancellation callbacks
2026-10-23 21:39:32 +02:00
evgeny
18f10b23b3
Record compact attempt validation and aggregation check
2026-10-23 19:34:46 +02:00
evgeny
a3eeebbc52
Clarify attempt reservation ownership on epoch exhaustion
2026-10-23 19:33:11 +02:00
evgeny
85c92e35a8
Update multipath contract for compact attempt pairs
2026-10-23 19:30:22 +02:00
evgeny
be95e93a36
Reject old encrypted ACKs when compact attempt pairs restart in a new epoch
2026-10-23 19:27:06 +02:00
evgeny
7c09bfca7f
Stop packet construction when input callbacks restart the stream
2026-10-23 19:26:00 +02:00
evgeny
77a737fd71
Document compact attempt wire layout and epoch reuse protection
2026-10-23 19:25:20 +02:00
evgeny
9a9517deab
Exercise ACK splitting beyond compact entry capacity
2026-10-23 19:24:52 +02:00
evgeny
b73d6e91e2
Verify compact attempt isolation, wire boundaries and exhaustion recovery
2026-10-23 19:23:30 +02:00
evgeny
0987d9dd04
Adapt encrypted session and window fixtures to compact attempt fields
2026-10-23 19:20:49 +02:00
evgeny
ccbd214c97
Encode 16-bit attempt numbers and guard pair reuse by session epochs
2026-10-23 19:19:54 +02:00
evgeny
6414cb15ef
Define compact per-fragment ETCP attempt numbers
2026-10-23 19:19:07 +02:00
evgeny
8c3fcfd1c8
Log fragment bytes and session epochs on normalizer desync
2026-10-23 18:15:17 +02:00
evgeny
1b7d314d85
Record bandwidth-only correction validation and remaining speed limits
2026-10-23 16:48:47 +02:00
evgeny
ea5a0b7d5a
Describe receiver-clock bandwidth bounds and ACK wire format
2026-10-23 16:44:07 +02:00
evgeny
6fc964031c
Check ACK receiver point diagnostics at buffer boundaries
2026-10-23 16:40:52 +02:00
evgeny
4bf47ca357
Exercise receiver bandwidth bounds and ACK progress framing
2026-10-23 16:39:12 +02:00
evgeny
ea4a92125b
Carry receiver progress only in ACKs with attempt confirmations
2026-10-23 16:23:20 +02:00
evgeny
5586528555
Bound ETCP bandwidth samples by receiver delivery progress
2026-10-23 16:22:13 +02:00
evgeny
e8d9d683dc
Record duplex plan trials and measured ACK bandwidth costs
2026-10-23 16:10:46 +02:00
evgeny
cc01457957
Record verified INIT recovery and BGP regression results
2026-10-23 14:24:31 +02:00
evgeny
5b8aba9c8b
Drive callback deletion through the public reinit transition
2026-10-23 14:19:53 +02:00
evgeny
f5d67d5240
Test link deletion from INIT and keepalive callbacks
2026-10-23 14:19:24 +02:00
evgeny
35ef504423
Document INIT liveness and response validation contracts
2026-10-23 14:16:28 +02:00
evgeny
a87d3116af
Validate INIT response body before updating peer state
2026-10-23 14:14:53 +02:00
evgeny
c5f743a09d
Cover INIT liveness with an independent healthy link
2026-10-23 14:01:57 +02:00
evgeny
b167a27e85
Document RX ownership and limit readiness wakeups to transitions
2026-10-23 13:48:09 +02:00
evgeny
f00a5bd306
Apply INIT reachability before reply and publish guarded RX transitions
2026-10-23 13:45:23 +02:00
evgeny
608caf01c1
Initialize the liveness fixture crypto and drain cancelled timers
2026-10-23 13:41:59 +02:00
evgeny
e801fce2c6
Add encrypted UDP INIT liveness and one-way recovery regression
2026-10-23 13:38:36 +02:00
evgeny
e89948f5ed
Include the lowest reverse solo rate in measurement summary
2026-10-23 13:20:44 +02:00
evgeny
3c7b59ef02
Report three-run multipath rates and confirmed INIT liveness failure
2026-10-23 13:20:15 +02:00
evgeny
54fb4185f1
Identify one-way INIT liveness defect behind intermittent BGP failure
2026-10-23 13:14:51 +02:00
evgeny
ac264c254c
Expose transport topology in BGP route exchange failures
2026-10-23 13:13:47 +02:00
evgeny
5403647aee
Record full regression results after retransmission timeout change
2026-10-23 13:05:22 +02:00
evgeny
3a007fbb29
Record jitter control and the cost of a shorter retransmission margin
2026-10-23 13:02:18 +02:00
evgeny
92e9281623
Record timeout matrix improvements and outstanding latency thresholds
2026-10-23 13:01:37 +02:00
evgeny
e0f28bf851
Document reduced RTT multiplier and jitter margin for RTO
2026-10-23 12:52:59 +02:00
evgeny
9dbef48eb3
Use RTT jitter and fixed margin for ETCP retransmission timeout
2026-10-23 12:52:35 +02:00
evgeny
e84e17c396
Record successful proxy burst and load validation after OOM changes
2026-10-23 12:46:10 +02:00
evgeny
9cc921f615
Record full regression failures and diagnose active media temp deletion
2026-10-23 12:45:38 +02:00
evgeny
0d5e9332e3
Clarify connection references versus active callback lifetime
2026-10-23 12:43:26 +02:00
evgeny
b1e94eff34
Describe OOM session interruption and normalizer ownership precisely
2026-10-23 12:42:05 +02:00
evgeny
bbe43b9842
Record completed fail-fast OOM recovery and remaining multipath work
2026-10-23 12:41:14 +02:00
evgeny
3bba05d354
Give encrypted DATA fixture a valid keepalive receive timeout
2026-10-23 12:36:20 +02:00
evgeny
d43716933f
Test encrypted two-sided recovery after normalizer OOM
2026-10-23 12:33:58 +02:00
evgeny
3c18e594d1
Keep the session deadline unchanged across handshake retries
2026-10-23 12:32:57 +02:00
evgeny
23d426fd0c
Document fail-fast OOM and session interruption contracts
2026-10-23 12:32:56 +02:00
evgeny
f221fa5a89
Exercise normalizer waiter allocation failure on a busy ETCP queue
2026-10-23 12:30:38 +02:00
evgeny
6e33675503
Verify OOM session abort, recovery and reentrant callback teardown
2026-10-23 12:29:29 +02:00
evgeny
76398d204a
Add deterministic normalizer and restart fault injection hooks
2026-10-23 12:28:13 +02:00
evgeny
d2b195473d
Test queue discard without allocation or stale callbacks
2026-10-23 12:27:38 +02:00
evgeny
caf37e9541
Make stream restart terminate explicitly if session scheduling fails
2026-10-23 12:24:48 +02:00
evgeny
316180c276
Abort normalizer sessions on OOM and guard reentrant delivery callbacks
2026-10-23 12:24:48 +02:00
evgeny
5f085b2086
Discard failed ETCP streams without allocating or replaying fragments
2026-10-23 12:22:22 +02:00
evgeny
466a56b499
Add allocation-free queue discard for terminal stream resets
2026-10-23 12:20:34 +02:00
evgeny
0989eff73d
Record complete proxy integration checks and normalizer ownership fix outline
2026-10-23 11:32:10 +02:00
evgeny
187aa02b49
Record passing full regression and eight sanitizer checks
2026-10-23 11:29:53 +02:00
evgeny
0aaf6dfea0
Check metrics aggregate ACK queues and RTO state across paths
2026-10-23 11:26:45 +02:00
evgeny
9c40b489cf
Record implemented multipath foundation and remaining reliability blockers
2026-10-23 11:25:13 +02:00
evgeny
ce798a193e
Remove stale fixture pointer and verify full transmission IDs in packet dumps
2026-10-23 11:22:37 +02:00
evgeny
ddba151aa5
Adapt control metrics fixture to per-link ACK ownership
2026-10-23 11:17:20 +02:00
evgeny
2fddf839af
Show transmission identity and frontier queries in ETCP packet diagnostics
2026-10-23 11:13:26 +02:00
evgeny
7bb43c42d6
Document per-path attempt ACKs, loss timers, pacing and memory bounds
2026-10-23 11:12:40 +02:00
evgeny
b442d131c9
Exercise bounded attempt and ACK storage after logical delivery
2026-10-23 11:10:19 +02:00
evgeny
783646a967
Apply attempt budgets before selecting DATA paths
2026-10-23 11:09:28 +02:00
evgeny
b74ff2633d
Bound path ACK queues and physical attempt memory
2026-10-23 11:09:28 +02:00
evgeny
b97169de19
Verify DATA pacing independently of piggyback ACK size
2026-10-23 11:04:11 +02:00
evgeny
72f48d1f14
Keep DATA pacing units consistent and test startup delay exit
2026-10-23 10:59:30 +02:00
evgeny
227104e224
Leave BBR startup after a full round of excessive queue delay
2026-10-23 10:58:38 +02:00
evgeny
d57a729b92
Preserve bounded pacing credit across millisecond timer rounding
2026-10-23 10:45:39 +02:00
evgeny
3ca9926c48
Release synthetic path queues in the session-timeout fixture
2026-10-23 10:42:43 +02:00
evgeny
4c9a32d865
Observe peer-window recovery after the deferred queue resume
2026-10-23 10:40:48 +02:00
evgeny
5e436975c6
Exercise retry rotation, late attempt ACKs and receiver admission faults
2026-10-23 10:38:23 +02:00
evgeny
a4a9ae7b0a
Return receive-window query replies on the requesting path
2026-10-23 10:35:38 +02:00
evgeny
34a31f63be
Update encrypted session fixtures and multipath observation for attempt IDs
2026-10-23 10:29:20 +02:00
evgeny
75485bf7bf
Aggregate pending path ACKs in chat transport status
2026-10-23 10:28:17 +02:00
evgeny
432017cc22
Verify logical delivery and physical window counters independently
2026-10-23 10:27:38 +02:00
evgeny
147648ffd0
Expose per-path attempts and ACK queues in transport diagnostics
2026-10-23 10:25:27 +02:00
evgeny
1b3c4552fb
Account for transmission IDs in MTU and packet diagnostics
2026-10-23 10:24:29 +02:00
evgeny
cc510fc74c
Separate stream delivery from path ACKs and acknowledge retained DATA
2026-10-23 10:23:14 +02:00
evgeny
abe3d4bc89
Rotate retransmissions per fragment and commit only accepted sends
2026-10-23 10:14:46 +02:00
evgeny
7bc2ac5a46
Implement per-path attempt accounting and isolated ACK delivery samples
2026-10-23 10:13:22 +02:00
evgeny
b68e0ac3db
Define independent logical fragments and per-path transmission attempts
2026-10-23 10:09:44 +02:00
evgeny
3c44c3d7bc
Keep unknown BBR bandwidth from imposing a one-byte pacing stall
2026-10-23 02:32:36 +02:00
evgeny
e21cd26511
Apply BBR pacing through one owner and keep burst estimates diagnostic
2026-10-23 02:28:45 +02:00
evgeny
7e413db1e1
Keep pacing in bytes per second and reprice outstanding shaper debt
2026-10-23 02:28:11 +02:00
evgeny
b39a861a57
Initialize STARTUP pacing from the actual initial DATA window
2026-10-23 02:24:10 +02:00
evgeny
b349d7b7b2
Document agreed retransmission bounds and verified timer behavior
2026-10-23 02:21:43 +02:00
evgeny
c3ac337ef0
Clamp ETCP retransmission timeout to 10 ms through 1 second
2026-10-23 02:20:10 +02:00
evgeny
4aae1f6151
Specify retry path rotation and close ACK ownership gaps
2026-10-23 02:08:04 +02:00
evgeny
259dfa35d9
Record RTT feedback experiments and refine multipath recovery plan
2026-10-23 01:56:01 +02:00
evgeny
7e0a0905e5
Document BBR queue time policy and its physical delay limits
2026-10-23 01:03:27 +02:00
evgeny
34e3d9bba0
Verify queue budget saturation and the BBR fast path contract
2026-10-23 01:02:15 +02:00
evgeny
599d8ad421
Bound BBR probe windows by the steady-state queue time budget
2026-10-23 01:01:25 +02:00
evgeny
4035794631
Define and test the BBR steady-state queue time budget
2026-10-23 01:00:36 +02:00
evgeny
5f406c2a41
Document BBR queue budget conflict with the fixed latency target
2026-10-23 00:58:29 +02:00
evgeny
94d6dd05c8
Expose BBR bandwidth and ACK budget alongside physical queue peaks
2026-10-23 00:54:27 +02:00
evgeny
67ae4ecf11
Record full regression results and reproducible NAT profile failures
2026-10-23 00:51:44 +02:00
evgeny
d0f122f4d8
Record verified RTT probe fixes and remaining multipath failures
2026-10-23 00:49:02 +02:00
evgeny
08b6b2e2a1
Document DATA MSS and shared BBR transport window contracts
2026-10-23 00:45:09 +02:00
evgeny
5298fe9f6a
Keep BBR loss bounds above the DATA window minimum
2026-10-23 00:43:54 +02:00
evgeny
aefa8ff680
Check BBR loss bounds against the minimum DATA window
2026-10-23 00:43:31 +02:00
evgeny
0f23076f48
Apply BBR DATA windows consistently during startup and RTT probes
2026-10-23 00:42:45 +02:00
evgeny
92a535e009
Cover BBR probe drain and transport DATA window consistency
2026-10-23 00:42:02 +02:00
evgeny
519d6e4eaf
Record verified BBR fixes and remaining multipath contract conflicts
2026-10-23 00:25:55 +02:00
evgeny
716db3a820
Saturate BBR byte windows instead of wrapping at large BDP
2026-10-23 00:24:35 +02:00
evgeny
3d6f855d34
Keep BBR probing and aggregation counters dimensionally consistent in bytes
2026-10-23 00:17:14 +02:00
evgeny
229e992695
Cover probing byte budgets and ACK aggregation beyond 64KiB
2026-10-23 00:16:40 +02:00
evgeny
a79c724110
Grow BBR probe inflight bounds in MSS-sized byte increments
2026-10-23 00:15:46 +02:00
evgeny
6b1298aa62
Reproduce byte-sized instead of MSS-sized BBR probing growth
2026-10-23 00:15:28 +02:00
evgeny
0364abb00e
Log sampled BBR model state without flooding transport diagnostics
2026-10-23 00:12:28 +02:00
evgeny
f8d532b04d
Describe ACK handling and bounded DATA pacing in the ETCP protocol
2026-10-23 00:10:01 +02:00
evgeny
4dba742149
Document BBR byte units and flight-based delivery rate samples
2026-10-23 00:10:00 +02:00
evgeny
88eb0f2108
Require multipath goodput without inflating channel queues
2026-10-23 00:08:15 +02:00
evgeny
ade0e93f7f
Measure actual channel queueing delay independently of propagation RTT
2026-10-23 00:08:15 +02:00
evgeny
addff8547e
Keep the ACK compression fixture within its known retransmission deadline
2026-10-23 00:06:30 +02:00
evgeny
1c18bdc9ab
Measure BBR delivery over packet flights instead of inter-ACK gaps
2026-10-23 00:06:30 +02:00
evgeny
f3008b7aba
Snapshot delivery and send intervals for per-link BBR rate measurement
2026-10-23 00:06:30 +02:00
evgeny
c2f4f048d7
Reproduce inflated delivery-rate samples when ACKs arrive together
2026-10-23 00:05:48 +02:00
evgeny
3c38072b9b
Send ACK independently of the local outgoing DATA congestion pacer
2026-10-23 00:03:29 +02:00
evgeny
4cfd0ec89f
Identify DATA in local datagram metadata without changing the wire header
2026-10-23 00:03:29 +02:00
evgeny
08c42e62ef
Reproduce ACK starvation behind the reverse-direction DATA pacer
2026-10-23 00:02:57 +02:00
evgeny
dd153264e1
Verify byte-rate scaling at multiple MTUs and multi-gigabit rates
2026-10-23 00:00:40 +02:00
evgeny
6f87ea1426
Keep BBR pacing and BDP in byte units without a second MSS factor
2026-10-22 23:59:57 +02:00
evgeny
6fec5d6d98
Reproduce MSS-dependent BBR pacing and BDP with a dimensional regression
2026-10-22 23:59:20 +02:00
evgeny
9b9a9f2e00
Record final multipath fault results and sanitizer validation
2026-10-22 23:41:45 +02:00
evgeny
27a7b7bf25
Declare the multipath phony target without overlapping Automake conditions
2026-10-22 23:40:12 +02:00
evgeny
c9ba018a0d
Bound fault steady goodput by newly received unique DATA
2026-10-22 23:37:24 +02:00
evgeny
df5f6263bd
Measure short HOLD across resume and arm faults before propagation completes
2026-10-22 23:37:02 +02:00
evgeny
0b5a892a88
Document multipath acceptance criteria and reproduced protocol limitations
2026-10-22 23:36:21 +02:00
evgeny
076016f34a
Expose multipath queue accounting and add a dedicated long-running check target
2026-10-22 23:34:20 +02:00
evgeny
8417b1955c
Document emulator queue bounds and account for allocation failures
2026-10-22 23:33:14 +02:00
evgeny
67322582f6
Report delivery failures per scenario without hiding subsequent channel cases
2026-10-22 23:32:34 +02:00
evgeny
439361cb52
Exclude previously buffered data from multipath utilization results
2026-10-22 23:31:02 +02:00
evgeny
6e350760d1
Check active channel stalls, delivery deadlines and delayed packet recovery
2026-10-22 23:29:29 +02:00
evgeny
672f04b833
Exercise real ETCP multipath against independent bandwidth and RTT profiles
2026-10-22 23:23:05 +02:00
evgeny
f5cab5a14e
Calibrate dummynet bandwidth and verify stalled channel lifecycle
2026-10-22 23:19:01 +02:00
evgeny
f5f6ff50af
Make dummynet bandwidth timing cumulative and add bounded DROP/HOLD modes
2026-10-22 23:18:11 +02:00
evgeny
62f4850968
Record successful full ETCP regression validation
2026-10-22 23:04:00 +02:00
evgeny
082d9d3960
Record STCP SIGPIPE regression and sanitizer validation
2026-10-22 23:02:42 +02:00
evgeny
05a5b6c2a7
Exercise STCP writes with default SIGPIPE disposition
2026-10-22 22:59:45 +02:00
evgeny
fdcf92be04
Prevent SIGPIPE from terminating embedded STCP transports
2026-10-22 22:59:44 +02:00
evgeny
11aa760d47
Document ETCP window ownership and completed connection fixes
2026-10-22 22:57:06 +02:00
evgeny
bc27352710
Remove stale references to the legacy connect installer
2026-10-22 22:53:55 +02:00
evgeny
0a00bd1c90
Clarify readiness contracts and stop on corrupt accounting
2026-10-22 22:53:30 +02:00
evgeny
e2ee0d81dd
Wait for both ETCP streams before starting Merkle tests
2026-10-22 22:52:14 +02:00
evgeny
6afc57569a
Test zero-delay sender wakeups and failure injection
2026-10-22 22:50:38 +02:00
evgeny
ccb3821e2f
Schedule ordinary ETCP sends without timer latency
2026-10-22 22:50:04 +02:00
evgeny
29f9a97552
Use valid global options in REALITY config fixtures
2026-10-22 22:48:53 +02:00
evgeny
f37ac2c637
Verify deferred teardown when the TX timer cannot start
2026-10-22 22:47:50 +02:00
evgeny
0ef0553598
Coalesce useful TX wakeups and defer failure teardown safely
2026-10-22 22:45:58 +02:00
evgeny
f1c88ad375
Document congestion configuration and protect key diagnostics
2026-10-22 22:40:47 +02:00
evgeny
17c92e1745
Diagnose adopted transports and isolate traffic test commands
2026-10-22 22:39:43 +02:00
evgeny
34e346463d
Cover initial UP, pacing and bidirectional tight windows
2026-10-22 22:38:20 +02:00
evgeny
ef11d3b677
Preserve initial readiness while sender waits for a session
2026-10-22 22:36:53 +02:00
evgeny
2689931826
Inject allocation failures through the actual pool symbol
2026-10-22 22:34:07 +02:00
evgeny
133ea8d120
Wake sender after preparing each new fragment
2026-10-22 22:33:43 +02:00
evgeny
75ff7c4ce3
Exercise DATA windows, ACKs, retries and sender wakeups
2026-10-22 22:33:11 +02:00
evgeny
86a0f041c7
Validate congestion limits and guard window arithmetic
2026-10-22 22:31:12 +02:00
evgeny
c1f07ec6ae
Enforce per-link DATA windows without blocking ACKs
2026-10-22 22:29:31 +02:00
evgeny
50d5486a9f
Define per-link accounting and deferred sender contracts
2026-10-22 22:26:51 +02:00
evgeny
036cf43918
Build and document direct connections through NCD
2026-10-22 22:25:52 +02:00
evgeny
fc5b3911f3
Detach ETCP core from obsolete connect contexts
2026-10-22 22:25:39 +02:00
evgeny
008f499367
Remove obsolete parallel ETCP connection installer
2026-10-22 22:25:39 +02:00
evgeny
8169322d56
Move direct transport tests to NCD ownership
2026-10-22 22:24:45 +02:00
evgeny
d84ab69465
Verify link selection mismatch with valid congestion limits
2026-10-22 21:32:34 +02:00
evgeny
91bb95a981
Record ETCP and STCP header audit findings
2026-10-22 21:30:28 +02:00
evgeny
03f4cd7939
Record validated media supernode replication implementation
2026-10-22 21:21:43 +02:00
evgeny
71d3b017e6
Clarify local media catalog seeding and channel cleanup contracts
2026-10-22 21:20:21 +02:00
evgeny
8230eb4de7
Test final-page update races and replication read failures
2026-10-22 21:16:59 +02:00
evgeny
bc149497f3
Document media replication protocol and resource ownership
2026-10-22 21:15:55 +02:00
evgeny
0bcdb9930a
Make media send queue policy explicit and document announcement errors
2026-10-22 21:14:42 +02:00
evgeny
f2283eff6b
Wait for actual retry requests independently of change hints
2026-10-22 21:12:58 +02:00
evgeny
a011c57237
Cover replication retries, source reset and router backpressure
2026-10-22 21:10:44 +02:00
evgeny
9e2a1e5208
Handle automatic SQLite rollback and complete CHAT integration setup
2026-10-22 21:09:16 +02:00
evgeny
d6d8ffc4a8
Require role subscription and initialize real chat test contexts
2026-10-22 21:07:18 +02:00
evgeny
14b01964b1
Initialize media test dependencies and await committed sync
2026-10-22 21:06:15 +02:00
evgeny
7fb9b43e9e
Validate media role changes through signed CHAT membership
2026-10-22 21:02:57 +02:00
evgeny
63c0b9a655
Run media integration replication in its actual CHAT group
2026-10-22 21:01:24 +02:00
evgeny
00502bf4d4
Exercise real media replication pages, rollback and catalog lifecycle
2026-10-22 21:00:48 +02:00
evgeny
d3bc77922b
Initialize replication router queues before waiting for room
2026-10-22 20:55:25 +02:00
evgeny
b4b11d6086
Implement atomic group-scoped media catalog replication
2026-10-22 20:54:37 +02:00
evgeny
b47a82e3ac
Define bounded receiver-driven media replication protocol
2026-10-22 20:45:14 +02:00
evgeny
04dc53672a
Add regression for media availability group isolation
2026-10-22 20:43:51 +02:00
evgeny
964a938437
Record reproduced media replication failures and correct cursor audit
2026-10-22 20:11:06 +02:00
evgeny
e8843d9499
Track remaining media supernode replication audit separately
2026-10-22 19:53:31 +02:00
evgeny
ecba318dec
Record validated media block ownership and relay fixes
2026-10-22 19:48:47 +02:00
evgeny
1aec478787
Drive relay generation wakeup through actual queue consumption
2026-10-22 19:46:30 +02:00
evgeny
8f97cf8070
Verify old relay readers survive a new download generation independently
2026-10-22 19:45:45 +02:00
evgeny
bd0260040c
Replace obsolete media relay description with current attempt and buffer contracts
2026-10-22 19:43:59 +02:00
evgeny
3b24e7e207
Describe media source lifetime, callback ownership and publication ordering
2026-10-22 19:40:38 +02:00
evgeny
993e22085a
Scope libc fault-injection regression target to Linux
2026-10-22 19:39:34 +02:00
evgeny
00e0421e56
Update media wire-size assertions and cover fortified read fault injection
2026-10-22 19:38:56 +02:00
evgeny
fabeb770a7
Verify media source admission, redirect bounds and transmit I/O failure cleanup
2026-10-22 19:37:28 +02:00
evgeny
47addfeffc
Cover terminal media registration failures and relay admission lifetime
2026-10-22 19:35:45 +02:00
evgeny
02e1526115
Remove redundant embedded download entry and update service-stop request
2026-10-22 19:33:49 +02:00
evgeny
c81cc8b9ca
Document media attempt validation and reserve before tracking outgoing writes
2026-10-22 19:33:12 +02:00
evgeny
99389f4bd3
Bound relay readers independently and redirect only to matching block recipients
2026-10-22 19:32:15 +02:00
evgeny
b09a020855
Exercise media block identity, I/O failure, reentrancy and relay backpressure
2026-10-22 19:30:59 +02:00
evgeny
090e7db598
Expose transport queue control in media regression fixtures
2026-10-22 19:27:37 +02:00
evgeny
5215163a37
Share authenticated media fixtures for adversarial delivery regressions
2026-10-22 19:25:24 +02:00
evgeny
1c1ab24a27
Test real truncated-block assembly and balance media admission ownership
2026-10-22 19:24:17 +02:00
evgeny
353752165c
Align media integration inputs with routed block identity
2026-10-22 19:23:53 +02:00
evgeny
b1a3d0c6cd
Scope media retry responses to active block attempts
2026-10-22 19:17:36 +02:00
evgeny
16333b989d
Replace permissive media download fixtures with verified block inputs
2026-10-22 19:16:23 +02:00
evgeny
d2bf40e11a
Use authenticated block metadata in media query fixtures
2026-10-22 19:15:17 +02:00
evgeny
d0a401e166
Validate received blocks and publish complete verified media atomically
2026-10-22 19:14:12 +02:00
evgeny
4edf72ea14
Create independent block attempts and cancel channel downloads safely
2026-10-22 19:11:44 +02:00
evgeny
9b4974f02d
Unify media source and relay transmission with owned buffers
2026-10-22 19:11:26 +02:00
evgeny
f15d53947e
Define media block attempts and shared byte-source ownership
2026-10-22 19:08:14 +02:00
evgeny
68129c0151
Retain media downloads across reentrant progress callbacks
2026-10-22 19:07:04 +02:00
evgeny
a3a8b5b1be
Add checked UTF-8 opening of existing block files for update
2026-10-22 19:03:16 +02:00
evgeny
55d2f437a0
Clarify ownership requirements for media completion callbacks
2026-10-22 18:57:48 +02:00
evgeny
108dfae82b
Record reproduced media block receive and completion defects
2026-10-22 18:45:19 +02:00
evgeny
3a703d1093
Record final media QUERY full-suite validation
2026-10-22 18:31:13 +02:00
evgeny
433a091db5
Record verified media QUERY fixes and regression coverage
2026-10-22 18:31:13 +02:00
evgeny
21ebc832e1
Verify holder selection and log download resource transitions
2026-10-22 18:31:12 +02:00
evgeny
a3f3b2fff2
Document media lookup lifetimes and remove obsolete shared state
2026-10-22 18:31:12 +02:00
evgeny
093e537fed
Check live QUERY deadlines and deferred CM failover
2026-10-22 18:31:12 +02:00
evgeny
6a14be05f5
Verify second-block SQL failure and propagate local download errors
2026-10-22 18:31:12 +02:00
evgeny
fd6155aa4a
Exercise media QUERY bounds, paging, failures and peer reuse
2026-10-22 18:31:12 +02:00
evgeny
f47e80571d
Assert media QUERY results and preserve transport ownership in tests
2026-10-22 18:31:12 +02:00
evgeny
e02c9f7727
Cancel delayed CM UP before deferring failover
2026-10-22 18:31:12 +02:00
evgeny
05ace58589
Implement bounded media lookup with independent deadlines
2026-10-22 18:31:12 +02:00
evgeny
92c514ce18
Describe bounded media lookup and peer slot state
2026-10-22 18:31:12 +02:00
evgeny
6267973d62
Define bounded media QUERY batches and complete responses
2026-10-22 18:31:12 +02:00
evgeny
cecbc682a0
Move stream start and stop into the title bar
2026-10-22 18:13:43 +02:00
evgeny
07cd150b47
Merge shared Android media audio routing and microphone fixes
2026-10-22 18:04:49 +02:00
evgeny
6a1c289ab2
Keep Bluetooth SCO active for radio reception without capture
2026-10-22 17:59:11 +02:00
evgeny
bb380441a3
Fix shared microphone crackle from timestamp jitter
2026-10-22 16:53:25 +02:00
evgeny
94d1e245a5
Record reproduced media QUERY bounds and response truncation defects
2026-10-22 16:47:28 +02:00
evgeny
02265644ce
Record verified media index fixes and remaining QUERY audit
2026-10-22 15:48:15 +02:00
evgeny
c9a3a1334b
Restore shared media playback to speaker after headset loss
2026-10-22 15:24:13 +02:00
evgeny
0835c3d3cc
Describe media preparation records and deferred channel cleanup
2026-10-22 15:15:52 +02:00
evgeny
34959a9657
Share atomic media commits between downloads and backfill
2026-10-22 15:14:25 +02:00
evgeny
90fab54a4a
Use one atomic commit API for authored and downloaded files
2026-10-22 15:14:22 +02:00
evgeny
439011ce60
Use real media schema and validate duplicate download ownership
2026-10-22 15:13:14 +02:00
evgeny
ec70908733
Check relative path limits and binding failures without truncation
2026-10-22 15:11:23 +02:00
evgeny
2b63c680b2
Verify shared Android audio ownership on a physical device
2026-10-22 15:07:26 +02:00
evgeny
44a3b33c3a
Expose shared audio devices in stream viewing and document them
2026-10-22 15:07:26 +02:00
evgeny
5d10a16baa
Use shared audio controls in radio and stream publication
2026-10-22 15:07:25 +02:00
evgeny
33ccba1f3f
Add a common audio device selector for radio and streams
2026-10-22 15:07:25 +02:00
evgeny
bebc579180
Share media playback devices and await cleanup before calls
2026-10-22 15:07:25 +02:00
evgeny
a893f6b4f2
Route radio and stream capture through the shared controller
2026-10-22 15:07:25 +02:00
evgeny
ecada765a2
Own Android media devices in one shared audio controller
2026-10-22 15:07:25 +02:00
evgeny
b72e51accb
Keep shared microphone PCM continuous across device changes
2026-10-22 15:07:25 +02:00
evgeny
f123a1bdeb
Document preparation ownership and log exact media index failures
2026-10-22 15:06:00 +02:00
evgeny
3bb8f76b7d
Reuse the database media base when restarting chat
2026-10-22 15:03:41 +02:00
evgeny
6b54b63986
Define download start ownership and avoid access after completion
2026-10-22 15:00:41 +02:00
evgeny
c08c24140c
Test reentrant media events and cleanup after hash failure
2026-10-22 14:58:15 +02:00
evgeny
d4efdba44e
Retain failed download destinations for later cleanup
2026-10-22 14:56:07 +02:00
evgeny
41057ee9d5
Keep media task ownership through synchronous submission events
2026-10-22 14:54:18 +02:00
evgeny
87724433b1
Exercise media index failure recovery and pending channel deletion
2026-10-22 14:52:27 +02:00
evgeny
9117813c4d
Preserve indexed and unfinished files during orphan cleanup
2026-10-22 14:49:11 +02:00
evgeny
15fafc42c9
Use validated paths for media submission and backfill
2026-10-22 14:46:49 +02:00
evgeny
16a5e628fd
Report incomplete media cleanup separately from channel deletion
2026-10-22 14:46:15 +02:00
evgeny
32d80110cb
Drain outgoing media tasks before deleting their channel
2026-10-22 14:45:29 +02:00
evgeny
b3a223521c
Track unfinished media destinations for channel cleanup
2026-10-22 14:44:24 +02:00
evgeny
8cba8ef3e6
Propagate media schema and downloaded registration failures
2026-10-22 14:42:44 +02:00
evgeny
113f0259ea
Preserve retryable media cleanup and validate served paths
2026-10-22 14:41:45 +02:00
evgeny
889dfc411a
Validate media paths and register complete files atomically
2026-10-22 14:40:30 +02:00
evgeny
ad62eee10c
Record media index plan constraints and late completion race
2026-10-22 14:35:56 +02:00
evgeny
d68ab90f23
Record reproduced media index path and database failures
2026-10-22 14:26:49 +02:00
evgeny
ad0505bd31
Record verified media primitive fixes and remaining location audit
2026-10-22 13:40:39 +02:00
evgeny
64519c41a7
Restrict fortified stdio test hook to glibc
2026-10-22 13:35:25 +02:00
evgeny
0d55c98add
Inject fortified fread failures in sanitizer regressions
2026-10-22 13:34:54 +02:00
evgeny
5549a69b1c
Cover failed file stream creation and document media cancellation effects
2026-10-22 13:31:13 +02:00
evgeny
1ceb0beb8d
Check generated media identifiers in integration fixtures
2026-10-22 10:28:32 +02:00
evgeny
386ea85fea
Log precise copy and media indexing failure operations
2026-10-22 10:27:42 +02:00
evgeny
607de2a074
Bound recursive walker stack and report exact copy failure phases
2026-10-22 10:26:56 +02:00
evgeny
bf3834b95d
Use existing Linux condition for media fault injection
2026-10-22 10:24:16 +02:00
evgeny
3a00caef50
Add fault injection regressions for media files and worker ownership
2026-10-22 10:23:56 +02:00
evgeny
5505afd1f3
Keep thumbnail path bounds and check UUID status in stress test
2026-10-22 10:21:41 +02:00
evgeny
0e418c7fa9
Propagate RNG errors and preserve 64-bit media sizes through callers
2026-10-22 10:20:02 +02:00
evgeny
f399ded5ba
Preserve files on copy errors and check media primitive failures
2026-10-22 10:18:23 +02:00
evgeny
85d96fc857
Share UTF-8 Windows path conversion with file workers
2026-10-22 10:18:22 +02:00
evgeny
3100985e4c
Specify media worker ownership errors and primitive contracts
2026-10-22 10:16:57 +02:00
evgeny
6355bd1d73
Use shared file publication in video processing
2026-10-22 10:15:39 +02:00
evgeny
3ed4b73ebf
Extract checked file identity and temporary publication primitives
2026-10-22 10:15:13 +02:00
evgeny
41cc04bdab
Record media async primitive and contract audit findings
2026-10-22 10:07:20 +02:00
evgeny
d8621c7f27
Record bootstrap regression coverage and successful validation
2026-10-22 10:02:57 +02:00
evgeny
3c49c2a4aa
Initialize callback epoch for pending transport shutdown test
2026-10-22 09:59:13 +02:00
evgeny
633f1d3044
Schedule pending deadline resets from probe creation
2026-10-22 09:47:23 +02:00
evgeny
34602e3e7e
Separate cold bootstrap from controlled pending probe reset
2026-10-22 09:45:48 +02:00
evgeny
330e346a7b
Record bootstrap test race in TCP session initialization
2026-10-22 09:40:08 +02:00
evgeny
6d39800351
Record completed video fixes and validation coverage
2026-10-22 00:20:40 +02:00
evgeny
df2f90d1f5
Allow MP4 millisecond edit rounding in audio tail regression
2026-10-22 00:17:55 +02:00
evgeny
1d6596dc61
Check resampler tail duration and actual 1080p to 720p conversion
2026-10-22 00:17:16 +02:00
evgeny
0653121fc4
Document video publication and cancellation in service lifecycle
2026-10-22 00:15:54 +02:00
evgeny
3f603534e9
Log exact video failure phases and check buffered file seeks
2026-10-22 00:11:02 +02:00
evgeny
631cc924cf
Measure AAC signal onset above verified codec pre-echo level
2026-10-22 00:09:49 +02:00
evgeny
9f1825dbf8
Verify decoded video content, AAC signal timing and FFmpeg-free stubs
2026-10-22 00:08:22 +02:00
evgeny
9163025912
Test video I/O failures, audio timing, cancellation and concurrent ownership
2026-10-22 00:05:30 +02:00
evgeny
5929bb4028
Normalize unspecified PCM channel layouts before AAC setup
2026-10-22 00:03:12 +02:00
evgeny
fe313cf8f8
Match FFmpeg AVIO and codec capability APIs across supported versions
2026-10-22 00:02:29 +02:00
evgeny
cb9102f381
Prepare video through checked temporary output and complete codec drains
2026-10-22 00:01:47 +02:00
evgeny
9a8bc9b461
Select video regression branch from configured FFmpeg support
2026-10-21 23:59:06 +02:00
evgeny
c4bf292085
Specify video publication, remux and completion contracts
2026-10-21 23:58:55 +02:00
evgeny
8d9704036f
Add real video fixtures and file preservation regressions
2026-10-21 23:56:55 +02:00
evgeny
fb01a9bb2e
Record video audit failures and missing API contracts
2026-10-21 23:28:53 +02:00
evgeny
1d7e12c562
Avoid random HEX substring collisions in config updater assertions
2026-10-21 23:12:12 +02:00
evgeny
7c473dd500
Reject signed NAT forward IDs hidden by leading whitespace
2026-10-21 23:11:32 +02:00
evgeny
1ccb266971
Describe NAT transport backpressure, ownership and mapping holds
2026-10-21 23:08:31 +02:00
evgeny
7de54ab3e4
Document NAT hash, expiry, mapping holds and bounded transport ownership
2026-10-21 22:58:28 +02:00
evgeny
2c10272e15
Add repeatable NAT benchmarks for table size, payload size and full-pool misses
2026-10-21 22:55:24 +02:00
evgeny
55cc721c9b
Test held NAT mappings under TUN congestion and reject invalid provider input
2026-10-21 22:54:24 +02:00
evgeny
dea768c21a
Hold outgoing NAT mappings through asynchronous TUN delivery
2026-10-21 22:52:19 +02:00
evgeny
824c663ebd
Protect NAT mappings referenced by pending TUN transmissions
2026-10-21 22:51:25 +02:00
evgeny
80b481827c
Verify bounded global NAT pressure and retained destination across mapping reuse
2026-10-21 22:46:09 +02:00
evgeny
8360e48622
Exercise NAT backpressure, mapping reuse, copy ownership and shutdown
2026-10-21 22:44:46 +02:00
evgeny
41a68b86bc
Close NAT channels after cancelling producers and quiet transient TUN backpressure
2026-10-21 22:43:54 +02:00
evgeny
cfc0051088
Test NAT boundary validation, hash collisions, expiry and allocation failures
2026-10-21 22:34:06 +02:00
evgeny
cecc5d7d1f
Validate provider replies before client TUN delivery
2026-10-21 22:32:29 +02:00
evgeny
5e2e6c15cf
Preserve NAT index invariants across transport and reuse tests
2026-10-21 22:31:55 +02:00
evgeny
d0c83cfff1
Add bounded NAT backpressure and forward TUN packets without copying
2026-10-21 22:30:01 +02:00
evgeny
9d6d6454b0
Reject malformed NAT configuration and use mapping lifecycle APIs in tests
2026-10-21 22:27:16 +02:00
evgeny
94fa3207f6
Index NAT mappings by hash and maintain free ports in constant time
2026-10-21 22:24:17 +02:00
evgeny
5a837f903c
Validate NAT packet boundaries and distinguish skipped packets
2026-10-21 22:21:37 +02:00
evgeny
00b4b92749
Align NAT documentation with node ownership and router framing
2026-10-21 22:01:08 +02:00
evgeny
19a5870d5f
Document NAT ownership, packet formats and API contracts
2026-10-21 22:00:06 +02:00
evgeny
bfa23afae9
Restrict NAT delivery to its group and configured provider
2026-10-21 21:58:10 +02:00
evgeny
909005c1a4
Complete standalone NAT forward configuration fixture
2026-10-21 21:57:23 +02:00
evgeny
ddc163a2b7
Cover NAT forward owners, full port range and invalid rules
2026-10-21 21:56:20 +02:00
evgeny
ca471d777e
Route static NAT forwards to explicit owners on all ports
2026-10-21 21:55:13 +02:00
evgeny
2c4f107e63
Require a target node for NAT port forward configuration
2026-10-21 21:54:41 +02:00
evgeny
3d0c4ff0a5
Isolate NAT mappings by source node identity
2026-10-21 21:53:17 +02:00
evgeny
a9820bea42
Preserve IPv4 UDP checksum encoding through NAT
2026-10-21 21:51:49 +02:00
evgeny
52a73ea6a7
Correct incremental NAT checksum arithmetic
2026-10-21 21:50:59 +02:00
evgeny
6e9bacd843
Fix NAT flow lookup at the maximum port boundary
2026-10-21 21:48:28 +02:00
evgeny
fbbd62acc4
Fix NAT packet ownership after router send failures
2026-10-21 21:43:00 +02:00
evgeny
ef673eb3b7
Merge branch 'master' of http://git.syqiq.tech/jeka/utun2
2026-10-21 21:22:49 +02:00
evgeny
05b0927619
Fix TUN packet ownership, lifecycle and backend consistency
...
Unify TUN initialization and raw-IP writes, preserve socketpair directions, and bound reader delivery with queue backpressure. Make deferred packet ownership safe across close and uasync teardown, and apply per-interface MTU limits to lwIP MSS.
Validation: full check.sh passed 172 tests, 9 proxy integration checks, burst and load. TUN ASAN/UBSAN regressions passed 30 cases; TCP exchange passed with asymmetric and minimum MTUs. Sanitized NAT integration exposed an existing unaligned uint16_t read in eim_nat.c; that separate defect remains unchanged. Native Windows and FreeBSD validation remains outstanding.
2026-10-21 21:19:42 +02:00
evgeny
e3f2feb480
Merge branch 'master' of http://git.syqiq.tech/jeka/utun2
2026-10-21 20:26:26 +02:00
evgeny
a65b0c8786
Fix queue extraction in NTP regression cleanup
2026-10-21 20:18:49 +02:00
evgeny
6c84e680af
Improve NTP failure diagnostics and source transition coverage
2026-10-21 20:18:17 +02:00
evgeny
d6eed66926
Document NTP contracts and verify corrected wall time
2026-10-21 20:16:38 +02:00
evgeny
88bf65e07d
Cover NTP correction, retries, faults and peer lifecycle
2026-10-21 20:15:17 +02:00
evgeny
13c1831baa
Fix peer time cache ownership and callback teardown
2026-10-21 20:12:04 +02:00
evgeny
5609d57947
Fix NTP offset and bound asynchronous polling cycles
2026-10-21 20:11:04 +02:00
evgeny
488be0edd1
Record recurring attachment test timeout during control validation
2026-10-21 20:06:51 +02:00
evgeny
e620567804
Finalize control server regression fixture cleanup
2026-10-21 20:04:30 +02:00
evgeny
fdf2912427
Cover control server regressions and correct API documentation
2026-10-21 20:04:30 +02:00
evgeny
51922cd18e
Fix control server buffer bounds and client resource ownership
2026-10-21 20:04:19 +02:00
evgeny
79946bb07c
Keep firewall reload regression on the selective path
2026-10-21 20:00:28 +02:00
evgeny
41c32cf063
Set router packet length in firewall integration fixture
2026-10-21 19:59:34 +02:00
evgeny
4f627bddff
Align firewall examples with symmetric destination filtering
2026-10-21 19:53:50 +02:00
evgeny
2a2a0ee267
Cover firewall parsing, bidirectional TUN filtering and reload failures
2026-10-21 19:52:51 +02:00
evgeny
5de0eb5115
Filter both directions of the main TUN and remove obsolete firewall guide
2026-10-21 19:49:32 +02:00
evgeny
cf6c3c99e8
Reject invalid firewall configuration and preserve policy on reload failure
2026-10-21 19:48:54 +02:00
evgeny
c3a7f77b54
Make firewall rule replacement atomic and validate IPv4 packets
2026-10-21 19:48:19 +02:00
evgeny
4f5651906c
Report precise INI read failures and identity repair reasons
2026-10-21 19:09:03 +02:00
evgeny
2df21efc22
Bound edited INI growth and cover effective duplicate values
2026-10-21 19:06:59 +02:00
evgeny
b0f5055c31
Describe shared INI parsing and distribute its internal header
2026-10-21 19:04:54 +02:00
evgeny
80eb331d6a
Document config identity and publication guarantees
2026-10-21 19:04:53 +02:00
evgeny
bb87a0845b
Verify config updates preserve files and allocations under OOM
2026-10-21 19:03:39 +02:00
evgeny
f7c8b95af6
Bound INI buffers to allocator limits and log allocation errors
2026-10-21 19:03:38 +02:00
evgeny
33130c1d74
Test identity preservation and failed config publication
2026-10-21 19:02:20 +02:00
evgeny
f61c0c3e38
Preserve config identity and publish verified updates safely
2026-10-21 19:00:06 +02:00
evgeny
2410c39b71
Share INI parsing and validate complete configuration values
2026-10-21 18:54:43 +02:00
evgeny
5a57b59b50
Test emulator forwarding and partial initialization cleanup
2026-10-21 18:14:03 +02:00
evgeny
ff3eb02bff
Update emulator uasync lifecycle and document forwarding rules
2026-10-21 18:12:06 +02:00
evgeny
56d5fcd75a
Test broadcast UUID lifetime and callback registration contracts
2026-10-21 18:10:43 +02:00
evgeny
484b620016
Preserve broadcast UUIDs until TTL and document callback contracts
2026-10-21 18:08:50 +02:00
evgeny
16f81575ce
Consolidate TCP queue and resource lifecycle documentation in header
2026-10-21 17:59:08 +02:00
evgeny
10b039686c
Consolidate queue usage and backpressure documentation in header
2026-10-21 17:57:34 +02:00
evgeny
194bf7bb45
Consolidate debug configuration documentation in header
2026-10-21 17:56:13 +02:00
evgeny
a288afd8ce
Consolidate socket lifecycle and wrapper documentation in header
2026-10-21 17:55:27 +02:00
evgeny
4f3f6d3e60
Consolidate platform adapter documentation in header
2026-10-21 17:55:27 +02:00
evgeny
1c4010ebed
Consolidate serialization format and ownership documentation in header
2026-10-21 17:54:20 +02:00
evgeny
ace9cb70d0
Consolidate timeout heap ownership and complexity documentation
2026-10-21 17:54:20 +02:00
evgeny
af3c7a4217
Consolidate pool lifecycle and diagnostics documentation in header
2026-10-21 17:53:00 +02:00
evgeny
e403a2f689
Consolidate memory ownership and allocation documentation in header
2026-10-21 17:53:00 +02:00
evgeny
3944459c29
Consolidate sliding minimum documentation in header
2026-10-21 17:52:02 +02:00
evgeny
48383ef95e
Consolidate outgoing IP documentation in header
2026-10-21 17:52:02 +02:00
evgeny
f020a6f62b
Clarify CPU indicator polling and pending responses
2026-10-21 17:48:35 +02:00
evgeny
d23a96a08e
Document uasync scheduling, ownership and lifecycle contracts
2026-10-21 17:40:20 +02:00
evgeny
dffcd19d21
Clarify queue callback scheduling and ownership contracts
2026-10-21 17:27:04 +02:00
evgeny
9079ab5c24
Fix debug timestamps, default output and log reopening
2026-10-21 17:10:44 +02:00
evgeny
7e39f16e0f
Fix allocation size overflow, zero-size OOM and debug category parsing
2026-10-21 17:07:11 +02:00
evgeny
00819654cf
Document POSIX descriptor zero exception in socket close
2026-10-21 16:57:44 +02:00
evgeny
346c06f31d
Record TCP lifecycle validation and IPv6 selection caveat
2026-10-21 16:52:11 +02:00
evgeny
ba7c2873c5
Initialize proxy timers before notifying connected owners
2026-10-21 16:48:25 +02:00
evgeny
0e15234ce1
Clarify TCP lifecycle and platform address selection contracts
2026-10-21 16:46:45 +02:00
evgeny
e5fafacf99
Cover TCP timer replacement failures and pending FIN cleanup
2026-10-21 16:45:53 +02:00
evgeny
d467d3aa8f
Fix TCP connect timer ownership and pending FIN state
2026-10-21 16:44:19 +02:00
evgeny
d5e489598d
Clarify DNS lifetimes and parser and video plane limits
2026-10-21 16:33:16 +02:00
evgeny
1ff02188ca
Fix Silero model cleanup and document runtime configuration
2026-10-21 16:29:44 +02:00
evgeny
f31b34d0f0
Clarify serialization limits, cleanup and error codes
2026-10-21 16:18:51 +02:00
evgeny
ecd5b9fc9d
Clarify memory pool counters and strbuf error documentation
2026-10-21 16:14:48 +02:00
evgeny
aca6364378
Correct call routing, media channels and API documentation
2026-10-21 16:11:36 +02:00
evgeny
88e930cc0a
docs: correct member file protocol and media download contracts
2026-10-21 16:01:30 +02:00
evgeny
be235e01aa
docs: correct DM payload, history and transfer cancellation contracts
2026-10-21 15:53:28 +02:00
evgeny
66f004f725
docs: describe actual DM identity derivation and crypto modules
2026-10-21 15:52:45 +02:00
evgeny
cbe22899c2
docs: align chat invite and member sync descriptions with code
2026-10-21 15:47:56 +02:00
evgeny
df36e504fc
docs: remove completed and obsolete project tasks
2026-10-21 15:47:30 +02:00
evgeny
7c814f5cb9
Route desktop codec diagnostics through the shared log
...
Quiet capability probes, preserve runtime errors, and register the desktop portal application. Add logging and desktop launcher regression coverage.
2026-10-21 15:45:40 +02:00
evgeny
9ba78c084b
docs: correct topology API and router timeout descriptions
2026-10-21 15:40:56 +02:00
evgeny
d644126cac
docs: align ETCP handshake and epoch descriptions with code
2026-10-21 15:37:01 +02:00
evgeny
f59f64ea48
docs: remove reviewed header backup files
2026-10-21 15:22:42 +02:00
evgeny
f5f106c682
docs: clarify header APIs and preserve originals in .h1
2026-10-21 15:21:27 +02:00
evgeny
abf342534f
Encrypt P2P call media and validate service IDs
...
Require signed and encrypted call audio/video using static identity keys. Fix attachment service ID collisions and media download handle lifetime; isolate LAN tests and audit the shared service registry.
2026-10-21 15:06:27 +02:00
evgeny
8e46cf9254
docs: refresh project file descriptions in AGENTS.md
2026-10-21 14:54:06 +02:00
evgeny
15b037aef7
Scroll to latest chat messages with End key
2026-10-21 13:31:50 +02:00
evgeny
69e534304b
Darken desktop chat backgrounds and lighter panels
2026-10-21 13:26:05 +02:00
evgeny
4dbc543cd3
Increase contrast of chat scrollbar thumb only
2026-10-21 13:21:30 +02:00
evgeny
4f6808156f
Add chat history keyboard scrolling and remove unused PTT setting
2026-10-21 13:05:31 +02:00
evgeny
5870efdf04
Default stream redundancy to zero on Android and desktop
2026-10-21 12:42:23 +02:00
evgeny
34db81c5cf
Show green stream watch buttons only for active streams
2026-10-21 12:30:08 +02:00
evgeny
a31436e421
Expand chat README and add stream image
2026-10-21 02:31:00 +02:00
evgeny
550f384c69
Tidy stream video worker source formatting
2026-10-21 01:40:04 +02:00
evgeny
a6b909b70e
Add device regression for independent stream audio and video workers
2026-10-21 01:38:50 +02:00
evgeny
fcb0768052
Protect SoundTouch lookahead when catching up live stream audio
2026-10-21 01:38:50 +02:00
evgeny
5d9da0c6b1
Preserve exact source EOF across tempo changes and expose DSP lookahead
2026-10-21 01:38:50 +02:00
evgeny
e8ee608ba9
Document independent audio preparation and live stream catchup
2026-10-21 01:28:20 +02:00
evgeny
4e5530aca0
Isolate Android live video decoding from audio preparation
2026-10-21 01:23:35 +02:00
evgeny
4fa3b18cc2
Feed Android stream mixer from prepared PCM without holding DSP lock
2026-10-21 01:18:56 +02:00
evgeny
50cf61e9cd
Mix partial stream PCM without copying stale buffer tails
2026-10-21 01:11:35 +02:00
evgeny
c6ed01110e
Exercise audio continuity during video stalls and generation changes
2026-10-21 01:03:19 +02:00
evgeny
1764603977
Isolate live video decoding from audio preparation in ChatGUI
2026-10-21 01:00:31 +02:00
evgeny
6c619d5f2a
Recover stream playback stalls with bounded proportional catchup
2026-10-21 00:56:47 +02:00
evgeny
58c0fc6bba
Separate stream audio DSP from bounded PCM consumption
2026-10-21 00:54:30 +02:00
evgeny
32e648ea9e
Release audio holds at video EOF and stop Android batches promptly
2026-10-21 00:15:34 +02:00
evgeny
b2efab9806
Document per-track completion and Android batch wakeups
2026-10-21 00:13:01 +02:00
evgeny
a342316e7a
Verify delayed decoders with unequal audio and video tails
2026-10-21 00:13:01 +02:00
evgeny
c887780022
Consume Android batches with independent track completion
2026-10-21 00:13:01 +02:00
evgeny
a538f99bf0
Expose viewer wake signals and complete audio independently on Android
2026-10-21 00:13:01 +02:00
evgeny
9fb4823df0
Batch Android viewer records and wake readers on data or stop
2026-10-21 00:13:01 +02:00
evgeny
a2fb562a22
Drain desktop tracks independently and cancel obsolete media on reset
2026-10-20 23:54:55 +02:00
evgeny
852c05590d
Expose track completion to desktop and retain the longer media tail
2026-10-20 23:53:58 +02:00
evgeny
a54031081b
Deliver independent track ends and invalidate batches on gaps
2026-10-20 23:53:23 +02:00
evgeny
23c4e4efbc
Diagnose delayed decoder completion with buffered audio
2026-10-20 23:46:59 +02:00
evgeny
5bc0c1ece4
Document bounded desktop stream batches and worker wakeups
2026-10-20 23:42:28 +02:00
evgeny
fbab6eae5d
Anchor batch regression at a single initial keyframe
2026-10-20 23:41:12 +02:00
evgeny
0d9c728efe
Test bounded batches, track budgets, notifications and FIN
2026-10-20 23:34:57 +02:00
evgeny
039c4a9ed4
Consume desktop media batches with per-track backpressure and wakeups
2026-10-20 23:31:50 +02:00
evgeny
179f248db8
Deliver bounded media batches to desktop consumers
2026-10-20 23:30:10 +02:00
evgeny
589cdcc81f
Add bounded viewer batches and readiness notifications
2026-10-20 23:29:23 +02:00
evgeny
6997a82af1
Enable publisher timing logs in diagnostic test runs
2026-10-20 22:32:33 +02:00
evgeny
c6f7d50838
Measure stream viewer request and worker delays
2026-10-20 22:30:04 +02:00
evgeny
7ce60ca0f2
Trace desktop stream stalls across playback and preview UI
2026-10-20 22:20:31 +02:00
evgeny
b1112981fa
Timestamp Android decoder output at the observation point
2026-10-20 21:44:10 +02:00
evgeny
a4419b4c89
Validate Android surface timestamps in stream diagnostics
2026-10-20 21:40:20 +02:00
evgeny
1b036e4ea9
Trace stream startup decoding and presentation delays
2026-10-20 21:34:24 +02:00
evgeny
f38aa3b08d
Log stream startup key age and buffer handoff delays
2026-10-20 21:27:51 +02:00
evgeny
c92d36354a
List calling radio and multiview features in README
2026-10-20 21:14:57 +02:00
evgeny
a0d49c4bbd
Add Vibechat overview and group access notes
2026-10-20 21:14:16 +02:00
evgeny
e3dbeee6a8
Document desktop stream tile behavior and verification
2026-10-20 20:47:55 +02:00
evgeny
8673673fcb
Handle stream tile coordinates with Qt 5 and Qt 6 APIs
2026-10-20 20:46:08 +02:00
evgeny
03e8caf849
Isolate publisher return test and use native widget input
2026-10-20 20:44:42 +02:00
evgeny
2781208361
Exercise native preview clicks and publisher controls escape
2026-10-20 20:42:23 +02:00
evgeny
64064c2cbf
Cover desktop local preview and multiview navigation
2026-10-20 20:39:24 +02:00
evgeny
e5510e9f62
Connect desktop multiview to publisher preview and controls
2026-10-20 20:37:13 +02:00
evgeny
44db42180e
Notify caller when desktop stream controls close
2026-10-20 20:33:23 +02:00
evgeny
6dab5db56a
Show silent local preview and focus remote desktop stream tiles
2026-10-20 20:32:52 +02:00
evgeny
f1cccb1c92
Document stream controls navigation and Samsung verification
2026-10-20 20:19:28 +02:00
evgeny
b26538c48f
Keep replacement camera preview active during tile disposal
2026-10-20 20:15:08 +02:00
evgeny
39bca58515
Open Android stream controls from own multiview tile
2026-10-20 20:11:49 +02:00
evgeny
ca7e169811
Keep Android publisher screen focused on capture controls
2026-10-20 20:10:36 +02:00
evgeny
fe9c3c74bd
Record global stream shortcut verification on Samsung
2026-10-20 20:02:25 +02:00
evgeny
d7053a2366
Open active stream controls from any Android header
2026-10-20 19:58:55 +02:00
evgeny
59858a726a
Share active stream button across Android group and home headers
2026-10-20 19:56:50 +02:00
evgeny
c4da659dcb
Keep publisher shortcut available in every desktop group
2026-10-20 19:55:11 +02:00
evgeny
5b6ed6ee78
Exclude own stream from remote stream selectors
2026-10-20 19:52:22 +02:00
evgeny
7e95c3043b
Add own live stream shortcut to Android chat header
2026-10-20 19:49:27 +02:00
evgeny
352f5b3f94
Show active publisher shortcut in desktop channel header
2026-10-20 19:46:32 +02:00
evgeny
6c74749dd4
Document direct local multiview preview and Samsung verification
2026-10-20 19:27:38 +02:00
evgeny
5c1619420a
Show own Android multiview source through silent camera preview
2026-10-20 19:17:59 +02:00
evgeny
c4b2052b27
Label multiview tap targets and record Samsung fullscreen verification
2026-10-20 19:06:14 +02:00
evgeny
b46f13920c
Expand Android multiview tiles on tap without restarting playback
2026-10-20 19:00:40 +02:00
evgeny
d7d018d591
Record Samsung multiview fix verification on live streams
2026-10-20 18:51:32 +02:00
evgeny
ba26b14f16
Include decoder frame state in Android stream failure logs
2026-10-20 18:46:57 +02:00
evgeny
ea5d1fcd45
Consume repeated viewer demand when delivering its reply
2026-10-20 18:45:49 +02:00
evgeny
68fb937063
Record reproduced multiview lifecycle defects and audio test flake
2026-10-20 17:44:24 +02:00
evgeny
03f7d4341d
Document multiview ownership, independent clocks and validation
2026-10-20 17:14:08 +02:00
evgeny
b3ebc09b9b
Wait for shared Android stream output release before starting calls
2026-10-20 17:13:59 +02:00
evgeny
c98fdc6297
Reject duplicate Android catalogue entries before updating grid
2026-10-20 17:12:21 +02:00
evgeny
b3116173ca
Verify shared stream mixing and avoid retrying terminal closures
2026-10-20 17:12:16 +02:00
evgeny
4a44149c00
Translate Android multiview controls and empty state
2026-10-20 17:07:37 +02:00
evgeny
5f0325e817
Expose watch-all streams from Android chat and preserve catalogue on transient errors
2026-10-20 17:07:31 +02:00
evgeny
9e5b2ad435
Add adaptive Android grid with automatic source reconciliation
2026-10-20 17:07:19 +02:00
evgeny
14b152bb5a
Keep Android stream surfaces alive until decoder release and fit grid geometry
2026-10-20 17:07:12 +02:00
evgeny
75806249bd
Run Android players concurrently and fall back between decoders
2026-10-20 16:58:41 +02:00
evgeny
4e386fc8e3
Mix Android streams on one AudioTrack with independent clocks
2026-10-20 16:58:32 +02:00
evgeny
57d28376b6
Use independent shared viewers in the Android native bridge
2026-10-20 16:58:25 +02:00
evgeny
c8bcf41f4a
Translate desktop multiview controls and catalogue states
2026-10-20 16:39:59 +02:00
evgeny
fd05ec47ab
Connect the all-streams window to chat actions and service lifetime
2026-10-20 16:39:50 +02:00
evgeny
bad9ee3a0c
Add an automatically updated desktop grid of active streams
2026-10-20 16:39:43 +02:00
evgeny
05deb15c91
Embed stream players and verify grid and concurrent playback
2026-10-20 16:39:34 +02:00
evgeny
1b49c4023b
Offer all active streams and share catalogue parsing in the GUI
2026-10-20 16:29:17 +02:00
evgeny
103e0b6865
Keep per-stream playback clocks on the shared audio output
2026-10-20 16:29:06 +02:00
evgeny
a0b6dd7ef5
Mix live stream PCM into the shared desktop audio output
2026-10-20 16:27:24 +02:00
evgeny
94697c1af0
Preserve desktop catalogue watches across chat selection
2026-10-20 16:27:17 +02:00
evgeny
4fa9d474ab
Track live stream catalogues independently for each owner
2026-10-20 16:27:10 +02:00
evgeny
39446b6e2c
Use independent viewer sessions in the desktop stream bridge
2026-10-20 16:13:14 +02:00
evgeny
0bc3b62f46
Add independent live stream viewer sessions in the shared core
2026-10-20 15:53:44 +02:00
evgeny
9c7b49e91f
Add call status sharing and automatic stream orientation
2026-10-20 15:49:32 +02:00
evgeny
f87cda8b13
Record multicast validation and stabilize report timing test
2026-10-20 15:13:59 +02:00
evgeny
b250e8a44d
Cover multicast report backpressure, chunking and timer cleanup
2026-10-20 15:08:59 +02:00
evgeny
961c3447d0
Create multicast report channel before checking backpressure
2026-10-20 15:05:16 +02:00
evgeny
e59bc9857b
Test multicast routing, overload and descriptor lifetime
2026-10-20 15:01:27 +02:00
evgeny
4a1a65c3ba
Implement multicast descriptors and receiver subscriptions
2026-10-20 14:53:23 +02:00
evgeny
e416d69212
Define descriptor-based multicast API and usage contract
2026-10-20 14:44:23 +02:00
evgeny
8d5459f8fa
Connect multicast queues to topology updates and builds
2026-10-20 14:34:55 +02:00
evgeny
5aa28a11d6
Register multicast protocol and core lifecycle
2026-10-20 14:34:30 +02:00
evgeny
b02ad6f4cf
Add multicast branching queues and bounded loss reports
2026-10-20 14:33:40 +02:00
evgeny
de6712de91
Record stream settings validation under an isolated display
2026-10-20 02:30:11 +02:00
evgeny
1e49d2554c
Limit desktop and Android stream bitrate menus to 12 Mbit/s
2026-10-20 02:29:46 +02:00
evgeny
d2f0828917
Bound restored manual stream bitrate choices to 12 Mbit/s
2026-10-20 02:29:00 +02:00
evgeny
390747343b
Document background codec preparation and complete probe validation
2026-10-20 01:28:59 +02:00
evgeny
475bec52ca
Distinguish encoder KEY checks from receiver capability probes in tests
2026-10-20 01:27:03 +02:00
evgeny
4db89eeb32
Check cancelled codec preparation cannot publish partial capabilities
2026-10-20 01:25:24 +02:00
evgeny
36e8ab228c
Verify startup codec preparation keeps GUI responsive and reuses probes
2026-10-20 01:23:21 +02:00
evgeny
91478e2593
Warm Android video codecs in the background and accelerate probe tails
2026-10-20 01:22:52 +02:00
evgeny
e3b74de7ef
Prepare and cache desktop video codecs once at application startup
2026-10-20 01:10:44 +02:00
evgeny
0cd1955606
Keep all eight decoder probe frames while accelerating the tail
2026-10-20 01:10:29 +02:00
evgeny
8ad5c09474
Finish decoder capability probes after first paced output and drain
2026-10-20 01:07:31 +02:00
evgeny
7ae204ba4f
Document Android startup checks and remaining Linux probe delay
2026-10-20 01:05:53 +02:00
evgeny
a4b9367344
Trace first video frame and verify capability upgrades preserve RX
2026-10-20 00:58:37 +02:00
evgeny
74313498f2
Cache verified video codecs and publish receive capabilities early
2026-10-20 00:56:53 +02:00
evgeny
d71d0dc4af
Check fullscreen video fitting without cropping or rotating thumbnails
2026-10-20 00:54:29 +02:00
evgeny
8b438f26a5
Fit fullscreen call video along the screen without rotating controls
2026-10-20 00:50:05 +02:00
evgeny
bea8f1f901
Document Samsung surface ACK deadlock and hardware regression results
2026-10-20 00:43:06 +02:00
evgeny
dd5dee2767
Preserve legacy timestamp waits and validate actual surface acknowledgements
2026-10-20 00:42:05 +02:00
evgeny
3eccf58c5e
Add hardware TextureView ACK regression probe
2026-10-20 00:39:18 +02:00
evgeny
65f7babb2a
Register Android video presentation ACK before the frame draw
2026-10-20 00:38:05 +02:00
evgeny
2c828d481d
Record full 60 fps Samsung to Unisoc decode verification
2026-10-20 00:26:11 +02:00
evgeny
49317aab75
Document 60 fps camera modes and presentation recovery
2026-10-20 00:25:33 +02:00
evgeny
3a7aab9186
Cancel Android codec verification when the call stops
2026-10-20 00:24:28 +02:00
evgeny
521dce5528
Use verified Android encoder levels and expose negotiated frame rate
2026-10-20 00:21:21 +02:00
evgeny
3037c5fa87
Verify 50 fps backends and decode all frames during display catch-up
2026-10-20 00:16:23 +02:00
evgeny
52d9a347c3
Bound persistent presentation lag and report catch-up decisions
2026-10-20 00:15:42 +02:00
evgeny
8c826fa2e7
Exercise both video orientations at 30, 50 and 60 fps
2026-10-20 00:15:42 +02:00
evgeny
3db52c755c
Preserve phase when sampling 50 fps from a 60 fps camera
2026-10-20 00:15:22 +02:00
evgeny
9bc3e7228c
Test Android frame pacing and extend hardware diagnostics to 60 fps
2026-10-20 00:13:48 +02:00
evgeny
0a73d140e6
Account for full refresh-cycle GUI acknowledgement latency
2026-10-20 00:12:26 +02:00
evgeny
d8d9f7c4a4
Select camera resolution and frame rate in Android calls
2026-10-20 00:11:15 +02:00
evgeny
27cbf2ba44
Recover persistent video lag by skipping decoded presentation
2026-10-20 00:09:57 +02:00
evgeny
4a759115c9
Probe Android video codecs at 30, 50 and 60 fps
2026-10-20 00:09:56 +02:00
evgeny
d991b4c63e
Preserve complete generated decoder probe byte arrays
2026-10-20 00:08:16 +02:00
evgeny
238ebcc751
Validate 60 fps probe bitstreams in both orientations
2026-10-20 00:07:53 +02:00
evgeny
0830fe4461
Carry selected video frame rate through desktop call settings
2026-10-20 00:07:36 +02:00
evgeny
f6701f81f9
Probe desktop decoders independently at 30 and 60 fps
2026-10-20 00:07:08 +02:00
evgeny
0d08c21330
Select decoder probe rate and preserve HEVC level 4.1
2026-10-20 00:06:45 +02:00
evgeny
4f1af6456d
Generate real 60 fps video decoder probe fixtures
2026-10-20 00:06:29 +02:00
evgeny
a852a9738b
Select camera capture rate and verify 30/60 fps pacing
2026-10-20 00:03:01 +02:00
evgeny
ee1e28bff9
Carry selected camera frame rate through isolated capture IPC
2026-10-20 00:02:25 +02:00
evgeny
74a4135cdc
Accept faster camera capture modes and pace up to 60 fps
2026-10-20 00:01:13 +02:00
evgeny
9d6dc1b469
Document verified Samsung HEVC High tier support
2026-10-19 23:40:38 +02:00
evgeny
c0d5db318f
Keep codec mode probes consistent with live encoding
2026-10-19 23:38:53 +02:00
evgeny
7be4b8884c
Verify production HEVC modes and cross-platform reception
2026-10-19 23:36:58 +02:00
evgeny
08c74894ef
Probe HEVC High tier on Android and desktop receivers
2026-10-19 23:34:15 +02:00
evgeny
f2d67990f8
Cover High tier negotiation and independent KEY probes
2026-10-19 23:33:51 +02:00
evgeny
7122d70ea6
Negotiate HEVC Main High tier with explicit level limits
2026-10-19 23:32:29 +02:00
evgeny
5c1807a712
Show actual video call codecs on Android
2026-10-19 23:30:13 +02:00
evgeny
9b5743123b
Add standalone Samsung HEVC comparison probe
2026-10-19 23:15:40 +02:00
evgeny
833eeb0a8d
Document Full HD call modes and verified codec recovery checks
2026-10-19 22:56:35 +02:00
evgeny
72cb1fa829
Clarify camera mode ownership and codec probe structure
2026-10-19 22:54:55 +02:00
evgeny
7b341d9f4f
Cancel desktop decoder probing when a call stops
2026-10-19 22:52:40 +02:00
evgeny
c211e17af9
Log Android verified camera modes and guard early camera events
2026-10-19 22:49:57 +02:00
evgeny
fcdc098415
Refresh call camera modes on device changes outside the GUI
2026-10-19 22:47:45 +02:00
evgeny
6e0d3f3022
Exercise real Full HD codecs and camera buffer boundaries
2026-10-19 22:46:35 +02:00
evgeny
cf2fc67a53
Update camera integration test to nonblocking audio clocks
2026-10-19 22:46:09 +02:00
evgeny
902e7bb921
Use explicit HEVC Main tier and diagnose fixture rejection
2026-10-19 22:45:38 +02:00
evgeny
bf8dfeec02
Probe desktop Full HD codecs and retain GPU support by size
2026-10-19 22:37:29 +02:00
evgeny
720ee64fd1
Cover Full HD KEY geometry in native validation tests
2026-10-19 22:37:12 +02:00
evgeny
fb660f2b3e
Select verified KEY fixtures by actual video geometry
2026-10-19 22:35:56 +02:00
evgeny
f50f717b35
Generate landscape and portrait Full HD decoder fixtures
2026-10-19 22:35:34 +02:00
evgeny
7a0bc9516c
Populate call resolutions from camera modes and test Full HD IPC
2026-10-19 22:35:05 +02:00
evgeny
eb11d2ebc5
Carry native camera modes through Full HD capture protocol
2026-10-19 22:33:59 +02:00
evgeny
9a3ef7b622
Expand Android call previews into available screen space
2026-10-19 22:29:02 +02:00
evgeny
51c6bbb96f
Queue Android call camera startup until video probing completes
2026-10-19 21:30:02 +02:00
evgeny
c3c88457a8
Document independent video scheduling and verified recovery behavior
2026-10-19 21:22:39 +02:00
evgeny
55e87d20bf
Verify generation changes and stale ACK isolation after restart
2026-10-19 21:18:03 +02:00
evgeny
9913222e03
Check video queue publication and nonblocking audio clock parity
2026-10-19 21:16:55 +02:00
evgeny
8c22df8f8e
Clarify GUI ownership and preserve video queue payload lifetime
2026-10-19 21:16:10 +02:00
evgeny
d0232e4c6e
Smooth video presentation phase across render latency changes
2026-10-19 21:15:18 +02:00
evgeny
6f542bfae9
Test video timing with slow decoder and missing presentation ACK
2026-10-19 21:13:21 +02:00
evgeny
d9843b8cbd
Separate video decoding from event-driven presentation timing
2026-10-19 21:12:02 +02:00
evgeny
93f6fa1d52
Allow video playout diagnostics outside the timer thread
2026-10-19 21:09:22 +02:00
evgeny
402c0c0611
Add bounded video SPSC slots and mutex-free wake events
2026-10-19 21:08:41 +02:00
evgeny
9ca0e61361
Expose nonblocking call clock access through both mutexes
2026-10-19 21:07:44 +02:00
evgeny
562bdf54a6
Add nonblocking jitter clock reads for video scheduling
2026-10-19 21:07:44 +02:00
evgeny
193a549d47
Expose lock-free cumulative call video receive count
2026-10-19 21:07:19 +02:00
evgeny
7b38fd0269
Diagnose decoder work crossing video presentation deadlines
2026-10-19 20:57:45 +02:00
evgeny
10018d008e
Update call video controls and sensor rotation across Android and desktop
2026-10-19 20:24:39 +02:00
evgeny
ae1d05deda
Fix FFmpeg D3D11VA implementation selection on Windows
2026-10-19 19:45:00 +02:00
evgeny
64761fd945
Record verified video builds and intermittent stream audio timing assertion
2026-10-19 19:27:50 +02:00
evgeny
5e38e5b71d
Use minimal timer access and diagnose failed video image transforms
2026-10-19 19:24:07 +02:00
evgeny
9d45488369
Require live GPU output before EOS and document presentation-clock buffering
2026-10-19 19:21:48 +02:00
evgeny
16bdf95ba3
Prefer verified Android hardware codecs and use measured low-latency decoder pipeline
2026-10-19 19:21:01 +02:00
evgeny
2a08fd8acd
Report decoder stage timings and detect real output stalls independently of playback waits
2026-10-19 19:19:27 +02:00
evgeny
ecdba8fb63
Measure presentation cadence and stop latency while preserving unaccepted GPU KEY on fallback
2026-10-19 19:16:17 +02:00
evgeny
243233a20b
Test delayed decoder output, four slice threads and complete generation drains
2026-10-19 19:15:05 +02:00
evgeny
a4a687be4c
Recover real GPU decoder failures on CPU without treating ordinary EAGAIN as frame loss
2026-10-19 19:14:03 +02:00
evgeny
f9348ce36f
Verify actual bitstreams through asynchronous decoder API and CPU encoder fallback
2026-10-19 19:13:00 +02:00
evgeny
5f45b38cfb
Exercise acknowledged frame timing, lossless stalls and queue-dependent deceleration
2026-10-19 19:12:23 +02:00
evgeny
8eb869e41c
Enable device-backed FFmpeg hardware decoding and verify exact RX queue accounting
2026-10-19 19:11:07 +02:00
evgeny
4bb2e42a7e
Keep decoder reserve based on paced probe rather than transient burst depth
2026-10-19 19:09:17 +02:00
evgeny
895cdd5ac2
Apply presentation-clock queue pacing and three decoded slots to Android
2026-10-19 19:08:51 +02:00
evgeny
ecae1cc3c2
Drive desktop video from presentation ACKs with three decoded slots and interruptible deadlines
2026-10-19 19:07:51 +02:00
evgeny
713a972c01
Decode call video through bounded submit/drain with verified GPU and four CPU slice threads
2026-10-19 19:06:52 +02:00
evgeny
dc22014bcc
Use four CPU encoder workers and retain GPU priority with software fallback
2026-10-19 19:04:08 +02:00
evgeny
28f3b264b8
Anchor video pacing to presentation acknowledgements and total backlog
2026-10-19 19:03:48 +02:00
evgeny
baeb4973dd
Expose RX frame depth and wake decoding when complete video arrives
2026-10-19 19:02:51 +02:00
evgeny
c92f7991ec
Record Windows startup GUI stalls and capture-gap scheduling correction
2026-10-19 18:25:34 +02:00
evgeny
40dcc76adb
Trace GUI event loop stalls separately from video painting and dispatch
2026-10-19 18:24:57 +02:00
evgeny
47033718ad
Apply capture gap recovery cadence consistently on Android
2026-10-19 18:23:25 +02:00
evgeny
526ee5ec8b
Test queued capture gaps without dropping frames or delaying ready video
2026-10-19 18:23:25 +02:00
evgeny
9bffe49e62
Bound video display cadence independently of capture timestamp gaps
2026-10-19 18:22:47 +02:00
evgeny
642fc34bcc
Bound video recovery correction before media timestamp arithmetic
2026-10-19 17:45:17 +02:00
evgeny
12e9e4da37
Verify GPU backlog drains fully without additional camera inputs
2026-10-19 17:44:14 +02:00
evgeny
d266c5da25
Respect GPU pipeline capacity before submitting a new camera frame
2026-10-19 17:43:45 +02:00
evgeny
0f22be6885
Check audio source rate at the actual PCM span boundary
2026-10-19 17:42:49 +02:00
evgeny
b7ae7ef700
Document lossless recovery contract and verify actual audio source rate
2026-10-19 17:40:51 +02:00
evgeny
a9b91145a6
Document sequential presentation diagnostics and simplify GUI frame ownership
2026-10-19 17:39:54 +02:00
evgeny
4ed2c4bbab
Wake video transmission on router queue readiness without polling delay
2026-10-19 17:38:31 +02:00
evgeny
5f1985f9ab
Verify RX drain and explicit decoder rejection semantics
2026-10-19 17:37:24 +02:00
evgeny
943f9f2646
Drain receiver backlog before admitting new production and avoid double waiting
2026-10-19 17:35:57 +02:00
evgeny
02e7bbd9af
Acknowledge Android frames after RenderThread consumption on all supported APIs
2026-10-19 17:34:44 +02:00
evgeny
b11a1beb44
Test lossless mailbox retry after partial video transmission
2026-10-19 17:33:25 +02:00
evgeny
322947777c
Stop invalid encoder output explicitly while preserving transient backpressure retries
2026-10-19 17:32:49 +02:00
evgeny
c0422a73c0
Drain accepted MediaCodec inputs before bitrate fallback replacement
2026-10-19 17:31:46 +02:00
evgeny
0e53a9f5dd
Log retained video batches and verify every GPU input across bitrate changes
2026-10-19 17:31:15 +02:00
evgeny
486d3314ef
Acknowledge Android texture consumption before presenting the next frame
2026-10-19 17:30:03 +02:00
evgeny
13f09cfc20
Drain old GPU frames before bitrate replacement and poll outputs while blocked
2026-10-19 17:29:10 +02:00
evgeny
5f772fa97f
Drain GPU outputs independently of capture and verify lossless recovery
2026-10-19 17:28:13 +02:00
evgeny
0bc2715a30
Preserve Android encoder outputs and throttle raw input before encoding
2026-10-19 17:25:50 +02:00
evgeny
0a2700a387
Use measured media tempo for sequential Android video playout
2026-10-19 17:25:16 +02:00
evgeny
4e9cce8a01
Present desktop video sequentially through GUI paint acknowledgement
2026-10-19 17:23:58 +02:00
evgeny
0eb743d627
Retain video mailbox tails and pause raw input under backpressure
2026-10-19 17:22:51 +02:00
evgeny
284a1268e4
Preserve encoded chain on temporary video transport backpressure
2026-10-19 17:22:09 +02:00
evgeny
7cbe5375d4
Define audio paced lossless video scheduling interface
2026-10-19 17:21:07 +02:00
evgeny
02a11f7d0a
Diagnose Windows call video timing and queue losses
2026-10-19 17:20:12 +02:00
evgeny
21a20da5ee
Coordinate Android call audio ownership and improve video controls
2026-10-19 16:51:51 +02:00
evgeny
39ed42da2e
Translate call policies and verify desktop phone button colors
2026-10-19 15:20:25 +02:00
evgeny
94e79e5630
Color Android member phone actions using live call presence
2026-10-19 15:20:25 +02:00
evgeny
a1f8eaeec2
Show explicit caller choice and already-active radio outcome on Android
2026-10-19 15:20:25 +02:00
evgeny
187fc7fee8
Handle Telecom presentation and pending caller choice notifications
2026-10-19 15:20:25 +02:00
evgeny
bd2dd056d6
Honor Telecom incoming UI permission and report phone busy outcomes
2026-10-19 15:20:25 +02:00
evgeny
4cebd0be54
Wire incoming call policy and caller continuation through JNI
2026-10-19 15:20:25 +02:00
evgeny
7d5399cd62
Add five independent Android incoming call preferences
2026-10-19 15:20:25 +02:00
evgeny
97b537c005
Document incoming call policies, busy confirmation and radio status replies
2026-10-19 15:20:04 +02:00
evgeny
558b2a2ac0
Describe ephemeral phone presence in existing BGP flags
2026-10-19 15:19:22 +02:00
evgeny
a9d63480cf
Document incoming policy and already-active radio contracts
2026-10-19 15:18:49 +02:00
evgeny
27b0f64ec0
Record media regression failures found by full test run
2026-10-19 15:18:09 +02:00
evgeny
cda46c0b82
Translate and test already-active radio response with packet loss
2026-10-19 15:05:27 +02:00
evgeny
4deee21d9f
Notify caller when subscriber already listens to the channel radio
2026-10-19 15:05:09 +02:00
evgeny
5a318f6f60
Isolate packet loss fixtures between call policy scenarios
2026-10-19 15:03:59 +02:00
evgeny
babcb7786a
Log phone policy regression state and allow bounded teardown coverage
2026-10-19 15:02:13 +02:00
evgeny
b21aeaa6f8
Test normal call busy confirmation and all incoming rejection policies
2026-10-19 14:59:55 +02:00
evgeny
79b4235960
Cover radio phone policy, BGP color flags, retries and caller choice timeout
2026-10-19 14:59:17 +02:00
evgeny
4683c98c08
Apply independent call and radio blocking before phone busy handling
2026-10-19 14:56:58 +02:00
evgeny
a72668a491
Represent independent incoming call preferences as one policy mask
2026-10-19 14:56:58 +02:00
evgeny
03a4462407
Reject phone busy calls before any incoming UI when policy is enabled
2026-10-19 14:55:55 +02:00
evgeny
a2fdbb6afb
Define automatic rejection policy for phone busy subscribers
2026-10-19 14:55:55 +02:00
evgeny
d4cd80d3dd
Translate phone presence and caller confirmation controls
2026-10-19 14:54:23 +02:00
evgeny
37cf6089e7
Add caller decision controls and colored phone presence on desktop
2026-10-19 14:54:01 +02:00
evgeny
b68116eedf
Expose phone busy event to desktop call interface
2026-10-19 14:54:01 +02:00
evgeny
6a4a0f45d8
Separate phone status publication from incoming caller warning
2026-10-19 14:51:12 +02:00
evgeny
b7aaf268af
Wait for caller override before ringing a phone-busy radio subscriber
2026-10-19 14:48:39 +02:00
evgeny
be367a08b6
Gate incoming calls on explicit caller decision when phone is busy
2026-10-19 14:47:59 +02:00
evgeny
6ad9c8c80b
Define pending decision state for telephone busy warning
2026-10-19 14:46:47 +02:00
evgeny
7ed1a9b167
Carry phone presence in existing BGP and member flag bytes
2026-10-19 14:46:47 +02:00
evgeny
505185430c
Define live phone presence and call continuation API
2026-10-19 14:46:16 +02:00
evgeny
1d28ced4f4
Replace Android member radio badge with a green radio call button
2026-10-19 14:30:35 +02:00
evgeny
fdd39e82e2
Show desktop radio subscription on the call icon and allow Android icon tint
2026-10-19 14:30:35 +02:00
evgeny
aca14bfb70
Select the radio ringtone in both Android ringtone playback paths
2026-10-19 14:25:27 +02:00
evgeny
7693db7b4d
Expose radio ringtone enable and volume settings on desktop
2026-10-19 14:25:12 +02:00
evgeny
30f79f7a8d
Play the dedicated desktop ringtone for incoming radio calls
2026-10-19 14:25:11 +02:00
evgeny
cf4edbbf62
Add a distinct three-tone radio call ringtone for desktop and Android
2026-10-19 14:25:11 +02:00
evgeny
9712a0a583
Check desktop call buttons, online changes, drags, and shifted radio mute control
2026-10-19 14:22:46 +02:00
evgeny
cd58903101
Connect member row call actions and retain invitations in the context menu
2026-10-19 14:21:52 +02:00
evgeny
a8c2ce8401
Render and handle speaker, radio call, and phone buttons in desktop member rows
2026-10-19 14:21:37 +02:00
evgeny
dad819282a
Expose live member availability to desktop action buttons
2026-10-19 14:21:37 +02:00
evgeny
04acb6f836
Check radio timer ownership through public service lifecycle
2026-10-19 14:14:52 +02:00
evgeny
c0626e0387
Verify idle radio calls have no timers and reject invalid invitation expiry
2026-10-19 14:13:45 +02:00
evgeny
e61dc8cd06
Wait for Android channel loading once before radio activation
2026-10-19 14:11:49 +02:00
evgeny
a0e440c0f5
Use readable radio call states and completion reasons in logs
2026-10-19 14:11:49 +02:00
evgeny
1b3269f76b
Require active subscription on radio acceptance and verify live BGP gating
2026-10-19 14:10:35 +02:00
evgeny
613a75becc
Schedule only active radio deadlines and reject late terminal answers
2026-10-19 14:09:10 +02:00
evgeny
5f9e9975d3
Initialize radio router channels before checking send backpressure
2026-10-19 14:07:39 +02:00
evgeny
a73d829080
Exercise radio invitations over routed network with deadlines and packet loss
2026-10-19 14:05:29 +02:00
evgeny
a831cf6295
Translate desktop radio invitation windows and outcomes
2026-10-19 14:04:45 +02:00
evgeny
b57c8e5041
Move Android message action to member details and translate radio call UI
2026-10-19 14:03:24 +02:00
evgeny
25376197db
Open channel radio from Android calls and move invitation into user details
2026-10-19 14:02:56 +02:00
evgeny
62a976aef5
Add Android radio call controls and incoming overlay
2026-10-19 14:01:52 +02:00
evgeny
9bd9f04bcf
Dispatch Android radio call events and clear them before core restart
2026-10-19 14:01:28 +02:00
evgeny
949c300c53
Set radio invitation timeout to one minute
2026-10-19 14:01:27 +02:00
evgeny
23ece16940
Own pending Android radio calls independently of Activity and ViewModel
2026-10-19 14:00:44 +02:00
evgeny
dbb07df7e9
Support incoming radio ringtone and notification actions on Android
2026-10-19 14:00:43 +02:00
evgeny
b48a91853d
Confirm Android radio activation and support explicit channel selection
2026-10-19 13:59:35 +02:00
evgeny
34890ea709
Bridge Android radio invitation commands to the core thread
2026-10-19 13:59:34 +02:00
evgeny
a97c915663
Fix radio signaling and desktop channel type references
2026-10-19 13:58:39 +02:00
evgeny
3f97dafbf7
Show desktop radio calls and activate channel radio after acceptance
2026-10-19 13:58:06 +02:00
evgeny
427794fed8
Expose explicit desktop radio activation for accepted invitations
2026-10-19 13:57:30 +02:00
evgeny
858ba38caf
Add radio call action to desktop channel members
2026-10-19 13:57:29 +02:00
evgeny
310d997af3
Deliver radio invitation events to desktop UI
2026-10-19 13:57:29 +02:00
evgeny
849f1c8618
Start and stop radio invitation service with chat lifecycle
2026-10-19 13:56:35 +02:00
evgeny
b0fe2d66af
Coordinate busy state between telephone and radio invitations
2026-10-19 13:56:35 +02:00
evgeny
7f4ac2fadf
Register radio invitation service and shared core events
2026-10-19 13:56:17 +02:00
evgeny
639be7fcc2
Add channel radio invitation signaling and bounded result cache
2026-10-19 13:56:06 +02:00
evgeny
a84b226b18
chatgui: enlarge member availability indicator and remove white outline
2026-10-19 13:23:40 +02:00
evgeny
214498f892
Open broadcast controls when selecting the local stream
2026-10-19 12:54:43 +02:00
evgeny
62633bc924
Show the group stream icon only for active broadcasts
...
Open a single active stream directly and show a selection for multiple streams. Move stream publishing and management into the group menu.
2026-10-19 12:51:56 +02:00
evgeny
ffe563bb9f
Enable VibeChat UTUN service and package the Wintun driver
...
Add a settings button to open the current config in an external editor. Wait for core, UTUN and chat startup before reporting readiness; verify startup failures and restarts. Include Wintun DLL and license notices in Windows builds and installers.
2026-10-19 12:33:35 +02:00
evgeny
bdb6bf80a4
Free Android stream preview space with start and stop icons
2026-10-19 12:18:42 +02:00
evgeny
d0bbe8444e
Refine Android stream icons and show channel in title
2026-10-19 12:08:57 +02:00
evgeny
1084cd10ec
Compact Android stream controls into one icon toolbar
2026-10-19 11:51:33 +02:00
evgeny
ec545a8665
Remove the minimized-to-tray notification
2026-10-19 10:44:29 +02:00
evgeny
d7f30d7bb1
Activate the existing VibeChat window on repeated launches
2026-10-19 10:29:12 +02:00
evgeny
50017b7f74
Sync configured chat names and embed the Windows application icon
2026-10-19 09:54:42 +02:00
evgeny
7140775d8d
Preserve source context when applying the live QP dependency patch
2026-10-18 22:30:28 +02:00
evgeny
5568331510
Keep the QP adaptation tooltip readable in source
2026-10-18 22:26:23 +02:00
evgeny
242d0f5493
Verify the QP ceiling constrains real HEVC output under bitrate pressure
2026-10-18 22:24:55 +02:00
evgeny
6e0b842858
Test live QP driver updates and rejection handling against patched FFmpeg
2026-10-18 22:23:23 +02:00
evgeny
2aa890201d
Package live AMF QP support with the FFmpeg build profile
2026-10-18 22:20:44 +02:00
evgeny
aff8a21ae4
Stop raising QP as soon as measured bitrate returns to target
2026-10-18 22:11:48 +02:00
evgeny
fae794d39e
Persist broadcast QP controls and verify smooth rate feedback
2026-10-18 22:11:29 +02:00
evgeny
fe86a16cac
Support live AMF QP ceiling updates in bundled FFmpeg
2026-10-18 22:08:47 +02:00
evgeny
00698537ad
Add QP ceiling and adaptation controls to the broadcast window
2026-10-18 22:07:36 +02:00
evgeny
df02aa8170
Adapt the stream QP ceiling from measured encoded bitrate
2026-10-18 22:06:34 +02:00
evgeny
0070221045
Apply configured QP ceilings and expose live encoder adjustment capability
2026-10-18 22:05:53 +02:00
evgeny
54b50f4177
Define stream QP ceiling and smooth bitrate feedback controller
2026-10-18 22:05:33 +02:00
evgeny
a51af91718
Use AMF remote desktop latency mode for HEVC broadcasts
2026-10-18 21:51:54 +02:00
evgeny
bd92ac0c88
Ensure the minimal Windows FFmpeg build includes HEVC header parsing
2026-10-18 19:52:41 +02:00
evgeny
4b88402f84
Verify FFmpeg diagnostic callback restoration
2026-10-18 19:49:04 +02:00
evgeny
0cfc29d9eb
Restore FFmpeg diagnostics after Qt multimedia initializes its logger
2026-10-18 19:48:34 +02:00
evgeny
d1ba26f8ac
Log converted encoder input detail alongside HEVC quantization
2026-10-18 19:46:35 +02:00
evgeny
6d5a626b9b
Include HEVC header tracing in bundled FFmpeg and round-trip tests
2026-10-18 19:45:36 +02:00
evgeny
f7853f145c
Trace HEVC key frame quantization and reduce AMF log noise
2026-10-18 19:44:38 +02:00
evgeny
78b147f806
Expose AMF driver diagnostics and effective encoder settings
2026-10-18 18:50:20 +02:00
evgeny
b8bc9b409a
Fix Android stream layout and show measured publisher bitrate
2026-10-18 18:24:30 +02:00
evgeny
e246357f92
Document valid HEVC PPS support and shared startup verification
2026-10-18 17:33:13 +02:00
evgeny
aedb0e6170
Cover HEVC PPS flags and incompatible AMF startup output
2026-10-18 17:21:05 +02:00
evgeny
f8827a9466
Accept valid HEVC PPS flags and verify call GPU probes fully
2026-10-18 17:19:57 +02:00
evgeny
0730fb6bdd
Описать GPU-путь звонка, границы буферизации и проверку задержки
2026-10-18 17:10:17 +02:00
evgeny
5e672f01d9
Проверить отмену пачки видеокадров при завершении звонка
2026-10-18 17:05:54 +02:00
evgeny
66526ad4a5
Проверить готовую пачку GPU через транспорт и обновить JNI видеопорта
2026-10-18 17:05:00 +02:00
evgeny
86a278ee99
Передавать готовую пачку GPU атомарно через TX mailbox
2026-10-18 17:01:22 +02:00
evgeny
0343825746
Показывать фактическую глубину GPU-конвейера без дополнительной TX-очереди
2026-10-18 16:57:49 +02:00
evgeny
09f48403c5
Проверить GPU-конвейер на задержке, пакетной выдаче и отказе замены
2026-10-18 16:55:31 +02:00
evgeny
2facdb6949
Сохранять выдачу старого GPU до первого IDR замены
2026-10-18 16:54:36 +02:00
evgeny
ae8eeab490
Выдавать готовые кадры GPU без дополнительного ожидания в TX
2026-10-18 16:51:55 +02:00
evgeny
6715acdef8
Добавить GPU-конвейер звонка с исходными PTS и подтверждением смены по IDR
2026-10-18 16:50:33 +02:00
evgeny
3ed9acb384
Устранить сжатие панели звонка и распараллелить HEVC внутри кадра
2026-10-18 16:28:36 +02:00
evgeny
21e4821e22
Ограничить камеру звонка до 30 fps перед конвертацией
2026-10-18 16:27:43 +02:00
evgeny
f6051d3bcd
Показывать этапы первого долгого кадра в интервале
2026-10-18 16:18:42 +02:00
evgeny
5a55bcb500
Диагностика задержек программного видео на desktop
2026-10-18 16:17:51 +02:00
evgeny
03ff431d78
Avoid Windows interface macro collision in local transport
2026-10-18 15:29:34 +02:00
evgeny
4c62f45984
Bound local discovery traffic and validate invitations
2026-10-18 15:18:40 +02:00
evgeny
80b23997c0
Use stream category filters in desktop stream tests
2026-10-18 15:10:59 +02:00
evgeny
f6f8647091
Decouple file network test from temporary packet logs
2026-10-18 15:10:57 +02:00
evgeny
0e2253cdc8
Remove Android video timing probes and categorize radio logs
2026-10-18 15:10:06 +02:00
evgeny
044a20d4a0
Clean desktop stream lifecycle and event bridge logging
2026-10-18 15:09:24 +02:00
evgeny
b40ba9308f
Route desktop call and PTT diagnostics to their categories
2026-10-18 15:08:57 +02:00
evgeny
74e2238b7f
Categorize file transfer and browser logs and reduce I/O noise
2026-10-18 15:08:42 +02:00
evgeny
81ee235f73
Keep file request diagnostics in media and drop packet noise
2026-10-18 15:07:45 +02:00
evgeny
dcdc700d8d
Remove temporary per-packet file routing diagnostics
2026-10-18 15:06:54 +02:00
evgeny
81de8747e2
Move video call and stream diagnostics to module categories
2026-10-18 15:06:16 +02:00
evgeny
28826e050c
Add local UDP discovery and invitation delivery for chat clients
2026-10-18 14:46:04 +02:00
evgeny
aad295c9d0
Render encrypted group attachments correctly on Android
2026-10-18 13:14:56 +02:00
evgeny
b3495349e1
Offer attachment encryption after selecting a file
2026-10-18 11:47:53 +02:00
evgeny
7e08135bba
Remove unpublished cipher block indexes during recovery
2026-10-18 10:47:24 +02:00
evgeny
057bdb3112
Recover cancelled unpublished encryption jobs without retaining keys
2026-10-18 10:46:56 +02:00
evgeny
a31ade1054
Exercise group encryption choice through real Qt input events
2026-10-18 10:44:23 +02:00
evgeny
98f71735a0
Document encrypted group attachment format and grant lifecycle
2026-10-18 10:42:16 +02:00
evgeny
1896a19eba
Explain exact encrypted container rejection reasons
2026-10-18 10:41:27 +02:00
evgeny
8a46a53a21
Verify cache restoration and channel cleanup for encrypted attachments
2026-10-18 10:40:24 +02:00
evgeny
5d2522b8de
Account decrypted copies in media quota and protect active containers
2026-10-18 10:39:29 +02:00
evgeny
feb327afc7
Preserve durable publication and restore evicted decrypted files
2026-10-18 10:39:03 +02:00
evgeny
3c395dfe5d
Share durable encrypted file publication with direct messages
2026-10-18 10:39:03 +02:00
evgeny
4844253f12
Size storage-role query for complete signed-role predicate
2026-10-18 10:37:19 +02:00
evgeny
01e1772615
Use signed storage role and reject revoked key recipients
2026-10-18 10:37:12 +02:00
evgeny
fd61aedce3
Use signed storage role in attachment replication fixture
2026-10-18 02:31:55 +02:00
evgeny
9f36fb0ddd
Release fixture history gate after verified member synchronization
2026-10-18 02:26:30 +02:00
evgeny
de1da1c9b1
Translate encrypted attachment controls and request states
2026-10-18 02:26:01 +02:00
evgeny
3f48a145ae
Trace group history readiness in attachment network test
2026-10-18 02:25:35 +02:00
evgeny
6c8e2763e5
Expose manual download API and distinguish storage replication in test
2026-10-18 02:19:45 +02:00
evgeny
945208ce77
Register encrypted attachment unit and network tests
2026-10-18 02:19:11 +02:00
evgeny
62a4f60508
Test encrypted containers and consent delivery across restart
2026-10-18 02:19:10 +02:00
evgeny
ada1406d79
Keep membership signature regressions on shared verifier
2026-10-18 02:18:21 +02:00
evgeny
ade9401e05
Fix desktop attachment UI include path
2026-10-18 02:17:54 +02:00
evgeny
ad7050ad2c
Fix shared cipher linkage and transport type includes
2026-10-18 02:17:18 +02:00
evgeny
7cffb15c73
Add author request list with individual key approvals
2026-10-18 02:17:08 +02:00
evgeny
2b7def369d
Render locked group attachments and local decrypted media
2026-10-18 02:16:29 +02:00
evgeny
9f813424bb
Deliver attachment key state changes to desktop UI
2026-10-18 02:15:25 +02:00
evgeny
4703a46eb9
Add per-send encryption toggle for group files and voice
2026-10-18 02:15:16 +02:00
evgeny
61d1561612
Bind encrypted manifests and request keys after verified download
2026-10-18 02:14:31 +02:00
evgeny
41696b7e0b
Route encrypted group preparation through key owner
2026-10-18 02:14:26 +02:00
evgeny
e5a1fc5a48
Start and stop attachment key owner with chat service
2026-10-18 02:13:54 +02:00
evgeny
60e040677b
Declare attachment grant service and lifecycle state
2026-10-18 02:13:40 +02:00
evgeny
321ed8e747
Implement durable encrypted attachment grants and requests
2026-10-18 02:13:28 +02:00
evgeny
e45401449e
Share complete membership verification for private grants
2026-10-18 02:10:11 +02:00
evgeny
6a90d79d04
Add authenticated encrypted attachment container
2026-10-18 02:09:30 +02:00
evgeny
b4ef4ec919
Switch message cipher consumers to shared media API
2026-10-18 02:08:52 +02:00
evgeny
9c22b04cb0
Use common file cipher primitives in direct messages
2026-10-18 02:08:45 +02:00
evgeny
d6db3d18ce
Extract shared CCM and streaming media cryptography
2026-10-18 02:08:29 +02:00
evgeny
be295f768c
feat(chat): add local DM deletion and improve Android member list
...
Delete local conversations atomically, retain replay protection and sequence counters, and guard asynchronous media work by history generation. Add Android avatar menu and confirmation, persistent file cleanup, and regression coverage.
Fix unnamed member wire padding and compact Android member action spacing.
Validation: 158 core tests passed; targeted DM tests, desktop build, Android unit tests and debug APK build passed.
2026-10-18 02:04:05 +02:00
evgeny
97710b609f
test(nat): require OPEN for public TCP listeners receiving connections
2026-10-18 01:02:08 +02:00
evgeny
75d383f89d
docs(nat): describe passive incoming connection evidence
2026-10-18 00:59:11 +02:00
evgeny
a20a219063
fix(core): free pending ping payloads when destroying instance
2026-10-18 00:57:11 +02:00
evgeny
6075b4cd0f
test(nat): verify public incoming profiles on isolated routed network
2026-10-18 00:55:37 +02:00
evgeny
49385ab91c
test(nat): isolate active measurements from incoming transport evidence
2026-10-18 00:54:51 +02:00
evgeny
094a8bb499
test(nat): cover accepted UDP and TCP profiles and LAN exclusions
2026-10-18 00:42:35 +02:00
evgeny
df2f6ff300
feat(nat): confirm direct open profile from accepted public connections
2026-10-18 00:41:53 +02:00
evgeny
37e092672a
fix(nat): retain cold ingress reservation after partial measurements
2026-10-17 23:53:09 +02:00
evgeny
7bf877b7d6
test(nat): exercise full retry budget with high RTT and lost reports
2026-10-17 23:45:35 +02:00
evgeny
305b61ccab
fix(nat): advance after an unfinished pair uses its full retry budget
2026-10-17 23:43:21 +02:00
evgeny
1d1f5d081f
test(nat): reserve fresh helper before publishing it during recheck
2026-10-17 23:41:51 +02:00
evgeny
edc78cbf4a
test(nat): cover helper rotation, preserved OPEN and budget resume
2026-10-17 23:39:17 +02:00
evgeny
a72e514dc5
fix(nat): keep fresh ingress checks active during profile rechecks
2026-10-17 23:38:52 +02:00
evgeny
6ad3674904
fix(nat): continue helper traversal after partial mapping results
2026-10-17 23:37:10 +02:00
evgeny
7c7b9646f3
test(android): distinguish untranslated and unmeasured interface addresses
2026-10-17 23:20:55 +02:00
evgeny
575a7bfe32
fix(android): show no NAT and inbound status instead of interface
2026-10-17 23:20:55 +02:00
evgeny
cb8e654639
fix(android): preserve measured profiles in member address details
2026-10-17 23:20:55 +02:00
evgeny
3f7cfe1c86
fix(chatgui): distinguish untranslated addresses from unmeasured profiles
2026-10-17 23:19:25 +02:00
evgeny
a485b10e63
fix(chatgui): show measured NAT profile in member addresses
2026-10-17 23:18:57 +02:00
evgeny
3e29a7ca1c
test(android): expect distinct NAT? and EIM? address labels
2026-10-17 22:17:53 +02:00
evgeny
6cbcb860d6
fix(android): distinguish unmeasured NAT from NAT with unknown type
2026-10-17 22:07:59 +02:00
evgeny
86c08092af
feat(android): show NAT profile and external address for own sockets
2026-10-17 22:07:58 +02:00
evgeny
1dfe349eb8
fix(android): consume local socket snapshots on core events
2026-10-17 22:07:58 +02:00
evgeny
c69f8d8975
fix(nat): notify GUI and include profiles in Android socket snapshots
2026-10-17 22:07:58 +02:00
evgeny
60104ea093
fix(chatgui): label detected NAT with unknown type as NAT?
2026-10-17 22:02:36 +02:00
evgeny
2513e9ae81
tests: finish cold UDP detection before opening additional TCP links
2026-10-17 21:22:22 +02:00
evgeny
d2a8e6fda7
db: accept TCP IP-only addresses while preserving stored projections
2026-10-17 19:58:54 +02:00
evgeny
2c7c3c9e8b
tests: allow TCP IP observations from existing incoming links
2026-10-17 19:54:18 +02:00
evgeny
857092508a
docs: explain TCP NAT presence and IP-only addresses
2026-10-17 19:53:34 +02:00
evgeny
b588f8e9f4
tests: verify TCP IP-only detection across real NAT gateways
2026-10-17 19:52:39 +02:00
evgeny
62aee9f01c
tests: cover TCP NAT presence and zero-port address publication
2026-10-17 19:50:33 +02:00
evgeny
c42d75c2f5
nat: limit helper selection and topology retries to UDP
2026-10-17 19:49:42 +02:00
evgeny
5c0db6ce9e
nat: remove TCP listener probes from endpoint detection
2026-10-17 19:47:37 +02:00
evgeny
6363c8b7ea
nat: publish TCP external IPs with an unknown port
2026-10-17 19:46:33 +02:00
evgeny
5eb3526186
etcp: exchange observed IPs on established TCP links
2026-10-17 19:46:02 +02:00
evgeny
95f209d098
nat: determine TCP translation from one public IP observation
2026-10-17 19:45:29 +02:00
evgeny
d7ad58b380
docs: clarify STUN result fields and API usage
2026-10-17 18:50:39 +02:00
evgeny
dbe2640e74
nat: reject local STUN paths as Internet mapping evidence
2026-10-17 18:50:10 +02:00
evgeny
7a40ba536e
tests: verify STUN estimates and ETCP promotion in isolated networks
2026-10-17 18:48:06 +02:00
evgeny
8983026625
docs: describe same-interface STUN estimates and working endpoint addresses
2026-10-17 18:47:41 +02:00
evgeny
f5d923a671
tests: cover tentative STUN mapping, expiry and native priority
2026-10-17 18:46:38 +02:00
evgeny
417b848b50
nat: publish observed working addresses with tentative STUN profiles
2026-10-17 18:45:20 +02:00
evgeny
88ac08333e
nat: use same-interface STUN mapping as tentative EIM
2026-10-17 18:45:02 +02:00
evgeny
aede36388f
docs: define EIM? as matching mapping with unknown inbound access
2026-10-17 18:27:16 +02:00
evgeny
906f247588
tests: verify tentative EIM with known helper and unknown inbound access
2026-10-17 18:25:53 +02:00
evgeny
fad9fbe6c3
android: label unverified EIM and observed unknown NAT addresses
2026-10-17 18:19:47 +02:00
evgeny
b539a6f338
gui: display EIM? when unsolicited ingress remains unverified
2026-10-17 18:19:23 +02:00
evgeny
58755dd75e
nat: distinguish EIM with unverified unsolicited ingress
2026-10-17 18:19:23 +02:00
evgeny
bbb8cff4a6
nat: prefer fresh public helpers while retaining known mapping candidates
2026-10-17 18:10:23 +02:00
evgeny
3c321ac59c
docs: explain observed NAT candidates in signed node snapshots
2026-10-17 18:05:30 +02:00
evgeny
eb09a675c7
nat: preserve the NAT address kind when mapping is unknown
2026-10-17 18:01:09 +02:00
evgeny
4284233e6f
nat: keep unchanged public addresses distinct from unknown NAT
2026-10-17 17:59:22 +02:00
evgeny
5a8b05c50f
nat: try known mapping peers before observer-only fallback
2026-10-17 17:57:15 +02:00
evgeny
b9a5981f5c
gui: shorten unknown NAT status to NAT?
2026-10-17 17:55:32 +02:00
evgeny
78f71ddbb0
nat: distinguish public interface addresses from unknown NAT candidates
2026-10-17 17:53:20 +02:00
evgeny
37461bb938
nat: finish observer-only rounds and document unknown-type candidates
2026-10-17 17:50:28 +02:00
evgeny
71abf74bfc
tests: cover unknown NAT candidates and stalled ingress control
2026-10-17 17:48:55 +02:00
evgeny
79d8789410
nat: prioritize mapping candidates and label unknown NAT explicitly
2026-10-17 17:47:18 +02:00
evgeny
6037819269
nat: retain observed candidates and continue mapping after ingress failures
2026-10-17 17:45:24 +02:00
evgeny
b96ae1a718
docs: introduce NAT detector results and basic usage
2026-10-17 17:18:07 +02:00
evgeny
6a2164717e
docs: describe NAT detector state and public API arguments
2026-10-17 17:12:40 +02:00
evgeny
eb3dd7f237
docs: explain NAT detection through its main idea and steps
2026-10-17 17:06:04 +02:00
evgeny
d70d6cb66a
tests: ignore stale helper probes and document local source rejection
2026-10-17 16:56:21 +02:00
evgeny
83efa229ed
nat: reject local probe sources and preserve internet profiles on LAN
2026-10-17 16:54:07 +02:00
evgeny
308eb07742
docs: align endpoint and STUN contracts with the implemented detector
2026-10-17 16:32:08 +02:00
evgeny
d5715a1f4f
tests: wait for the requested NAT round instead of an earlier automatic result
2026-10-17 16:26:35 +02:00
evgeny
27a87412c5
tests: verify STUN diagnostics without publishing a foreign-port profile
2026-10-17 16:23:18 +02:00
evgeny
7673316dc8
docs: specify NAT v4 independent mapping reports and receiver-verified ingress
2026-10-17 16:19:47 +02:00
evgeny
4fab849917
nat: align probe timing and test receiver IP rejection and endpoint failover
2026-10-17 16:06:21 +02:00
evgeny
38447da5e8
nat: retry partial ingress measurements and keep known-IP anchor replies available
2026-10-17 16:02:01 +02:00
evgeny
8158d6a435
tests: exercise NAT mapping, filtering, delayed ingress and contaminated history
2026-10-17 15:57:49 +02:00
evgeny
3cb971fcba
tests: wait for READY group routes before measuring NAT
2026-10-17 15:56:19 +02:00
evgeny
110dd82932
tests: separate STUN diagnostics and allow complete NAT probe rounds
2026-10-17 15:51:32 +02:00
evgeny
26ab3b13b4
nat: separate routed mapping reports from unsolicited UDP ingress
2026-10-17 15:43:38 +02:00
evgeny
df80c5745d
transport: support one-way authenticated NAT probes
2026-10-17 15:24:57 +02:00
evgeny
1dc26bf715
Add bounded mouse zoom and panning to live stream viewer
2026-10-17 01:49:35 +02:00
evgeny
93dc21f3c8
Exercise capture conversion failure with distinct source generations
2026-10-17 01:30:48 +02:00
evgeny
fd73fae77f
Keep stream capture failures and cursor snapshots tied to their source
2026-10-17 01:30:06 +02:00
evgeny
9c7d088f8b
Compare retained image pixels without assuming SIMD color rounding
2026-10-17 01:30:05 +02:00
evgeny
64bbbdc631
Guard RGB conversion bounds and use padded frames in file playback
2026-10-17 01:28:42 +02:00
evgeny
f81b93ad0d
Allocate padded RGB frames for FFmpeg video conversion
2026-10-17 01:28:04 +02:00
evgeny
88e3e27145
Show cursor in Windows stream preview
2026-10-17 01:02:46 +02:00
evgeny
bf729502a1
Improve Windows screen capture frame rate
2026-10-17 00:38:29 +02:00
evgeny
f5660a4642
Hide window capture sources
2026-10-17 00:19:28 +02:00
evgeny
e440c62339
Use native Windows monitor handle for cursor overlay
2026-10-17 00:16:56 +02:00
evgeny
4a6f95cebd
Add native Windows cursor overlay to screen broadcasts
2026-10-16 23:50:52 +02:00
evgeny
49d55a25a1
Poll stream image thread cleanup from GUI loop
2026-10-16 23:09:29 +02:00
evgeny
1e21912dc6
Trace stream image worker and GUI shutdown waits
2026-10-16 22:45:58 +02:00
evgeny
a63af43e59
Handle AMF periodic keyframes
2026-10-16 21:52:10 +02:00
evgeny
98d0040b27
Fix AMF live encoder startup probe
2026-10-16 21:26:58 +02:00
evgeny
2a439754ba
Fix Windows FFmpeg configure link flags
2026-10-16 19:42:47 +02:00
evgeny
4401c4b1e4
Fix libaom build with NASM 3
2026-10-16 19:27:51 +02:00
evgeny
8cb656dbdc
Minimize FFmpeg features for ChatGUI
2026-10-16 19:08:53 +02:00
evgeny
eb98d2c724
Fetch x265 tags before configuring version metadata
2026-10-16 19:04:25 +02:00
evgeny
f90cbae94a
Enable AMD AMF in Windows ChatGUI FFmpeg build
2026-10-16 18:50:42 +02:00
evgeny
5116496565
Record thread exit evidence from latest Windows stream log
2026-10-16 18:09:51 +02:00
evgeny
7a2fa9e199
Move captured frame conversion to persistent worker
2026-10-16 18:08:42 +02:00
evgeny
5c9bf9e47c
Log capture conversion thread and completion
2026-10-16 18:05:58 +02:00
evgeny
8d7ab6a1a6
Keep a converted frame for encoder reconfiguration
2026-10-16 18:05:07 +02:00
evgeny
97e20d2f1c
Keep Qt video frame conversion off the publisher worker
2026-10-16 18:04:27 +02:00
evgeny
c27ee36cfb
Record passing publisher lifecycle regression suite
2026-10-16 17:39:12 +02:00
evgeny
37eccd06ea
Record adaptive audio validation and confirmed stream startup failure
2026-10-16 17:38:32 +02:00
evgeny
16e547d15d
Drain publisher while asynchronous microphone teardown completes
2026-10-16 17:34:21 +02:00
evgeny
114c0b3e2f
Aggregate recurring audio glitch logs between buffer changes
2026-10-16 17:33:32 +02:00
evgeny
688d559787
Wait for native thread exit outside GUI and cover FIN drain in tests
2026-10-16 17:31:20 +02:00
evgeny
0f5a5580c5
Test publisher shutdown with GUI-dependent thread-local cleanup
2026-10-16 17:27:15 +02:00
evgeny
85101765eb
Keep GUI responsive until publisher threads finish resource cleanup
2026-10-16 17:26:30 +02:00
evgeny
fb2a615165
Reproduce Android audio startup deadlock with real Opus playback
2026-10-16 17:25:19 +02:00
evgeny
c03fe3da71
Prime late stream audio without waiting for its playback clock
2026-10-16 17:24:25 +02:00
evgeny
0c26daf3f5
Document adaptive buffer limits and preserve failed-open backoff
2026-10-16 17:18:13 +02:00
evgeny
b463fc3309
Keep adaptive requests above baseline and test backend fault events
2026-10-16 17:17:22 +02:00
evgeny
e37b3be7da
Defer new shared subscribers during microphone buffer resizing
2026-10-16 17:15:51 +02:00
evgeny
ca09073a52
Test gradual audio buffer adaptation and nonblocking microphone stop
2026-10-16 17:13:59 +02:00
evgeny
efe9e8311c
Detach shared capture safely while its audio buffer is resizing
2026-10-16 17:12:51 +02:00
evgeny
3c73c7d645
Keep microphone buffer resizing outside the GUI close path
2026-10-16 17:11:57 +02:00
evgeny
0b58bf3c87
Increase audio buffer gradually after repeated backend glitches
2026-10-16 17:10:31 +02:00
evgeny
360d5dddaa
Expose WASAPI and Linux audio buffer glitches to device owners
2026-10-16 17:08:55 +02:00
evgeny
38eae06161
Document microphone watchdogs and pending stream diagnostics
2026-10-16 17:04:46 +02:00
evgeny
c37be1c3e8
Trace stream audio startup demand and link Windows COM cleanup
2026-10-16 16:58:01 +02:00
evgeny
014a110fd5
Verify stopping during asynchronous microphone cleanup
2026-10-16 16:53:10 +02:00
evgeny
69cee1bec4
Check continuing H265 screen video and avoid waiting on failed input
2026-10-16 16:51:43 +02:00
evgeny
2de9ac85a2
Test missing microphone PCM in calls and radio without GUI stalls
2026-10-16 16:50:44 +02:00
evgeny
cb84d1049f
Translate call and radio microphone timeout messages
2026-10-16 16:49:47 +02:00
evgeny
91357ebf90
Show microphone timeout errors in call and radio controls
2026-10-16 16:49:09 +02:00
evgeny
110af9b0c5
Keep normal capture lifecycle synchronous after healthy input
2026-10-16 16:49:09 +02:00
evgeny
432f2dcf00
Stop radio transmission when microphone PCM stops arriving
2026-10-16 16:48:34 +02:00
evgeny
26f6e2ee83
Disable stalled call microphones and close capture asynchronously
2026-10-16 16:48:10 +02:00
evgeny
48cb101047
Expose microphone PCM timeout to shared capture consumers
2026-10-16 16:48:10 +02:00
evgeny
05f1fe485c
Trace stream video progress and detect missing microphone PCM
2026-10-16 16:47:25 +02:00
evgeny
349869f732
Record stream startup validation and Windows follow-up
2026-10-16 16:21:11 +02:00
evgeny
230687d155
Wait for asynchronous microphone release in stream tests
2026-10-16 16:19:02 +02:00
evgeny
de71617e9f
Initialize COM for capture cleanup and release completed leases
2026-10-16 16:19:02 +02:00
evgeny
543c9decba
Exclude retiring capture sessions from new subscriptions
2026-10-16 16:15:20 +02:00
evgeny
9629e9311c
Defer CPU rejection until dialog destruction completes
2026-10-16 16:15:07 +02:00
evgeny
21f4de492c
Test stream startup consent and nonblocking microphone failure
2026-10-16 16:13:35 +02:00
evgeny
7a660688af
Translate stream startup failures and CPU confirmation
2026-10-16 16:12:37 +02:00
evgeny
9500581e0b
Gate stream encoding on microphone input and CPU consent
2026-10-16 16:11:04 +02:00
evgeny
3ba7601ba4
Close failed stream capture without blocking the GUI
2026-10-16 16:03:14 +02:00
evgeny
86da11b2e1
Separate hardware and software live encoder selection
2026-10-16 15:58:25 +02:00
evgeny
903568d9d6
Apply the selected language immediately in first-run setup
2026-10-16 15:34:31 +02:00
evgeny
debfccd7fa
Add language selection to the ChatGUI first-run setup
2026-10-16 15:34:20 +02:00
evgeny
91620cec4e
Add nickname setup on the first ChatGUI launch
2026-10-16 15:32:33 +02:00
evgeny
5074bad57c
Fix Android avatar viewer bounds around system bars
2026-10-16 15:17:12 +02:00
evgeny
0475df8412
Close Android stream viewer after playback ends
2026-10-16 15:03:31 +02:00
evgeny
7454bebb14
Verify PipeWire node addressing with both cursor modes
2026-10-16 14:51:46 +02:00
evgeny
ea971b0856
Preserve packed RGB formats and fix PipeWire test setup
2026-10-16 14:50:50 +02:00
evgeny
5725cfb686
Document PipeWire dependency and translate capture status
2026-10-16 14:38:45 +02:00
evgeny
3228cce0fb
Test Wayland portal lifecycle and real PipeWire video delivery
2026-10-16 14:38:28 +02:00
evgeny
44c9c3bcaf
Use native portal capture for Wayland broadcasts
2026-10-16 14:35:33 +02:00
evgeny
ce0fa1f063
Add portal and PipeWire capture with embedded cursor support
2026-10-16 14:34:47 +02:00
evgeny
cf3c8c7c34
Test X11 cursor placement and live visibility controls
2026-10-16 14:16:12 +02:00
evgeny
ae1682bbe2
Document XFixes dependency and translate cursor controls
2026-10-16 14:14:37 +02:00
evgeny
7c1955f029
Add a persistent cursor toggle to X11 broadcast controls
2026-10-16 14:14:04 +02:00
evgeny
5753177f29
Include the cursor in X11 stream frames by default
2026-10-16 14:14:03 +02:00
evgeny
e24ab45725
Add native X11 cursor composition for screen frames
2026-10-16 14:13:10 +02:00
evgeny
d60f8e4b1b
Preserve stream capture settings and refine audio playback
2026-10-16 14:05:54 +02:00
evgeny
198ebc0acb
Restore the current preview when reopening stream controls
2026-10-16 14:02:30 +02:00
evgeny
00e9ed227a
Capture the selected X11 monitor through QScreen
2026-10-16 14:00:56 +02:00
evgeny
ac8e701406
Keep live capture bound to the selected monitor instance
2026-10-16 13:57:57 +02:00
evgeny
3d2f90e8ae
Distinguish monitors with identical Qt screen names
2026-10-16 13:56:57 +02:00
evgeny
218249f9a5
Apply measured screen geometry through the GUI configuration path
2026-10-16 13:54:40 +02:00
evgeny
9bacde3bc1
Select proportional screen and advertised camera stream modes
2026-10-16 13:53:33 +02:00
evgeny
6228873ce2
Resolve desktop capture modes from source capabilities
2026-10-16 13:51:38 +02:00
evgeny
ea46c56bc1
Define source-specific desktop stream video modes
2026-10-16 13:50:03 +02:00
evgeny
bb5759728a
Record live SM wake and reconnect verification on colo2
2026-10-16 13:12:01 +02:00
evgeny
fc526d16c0
Test stream announcements after foreground wake and packet reordering
2026-10-16 12:55:10 +02:00
evgeny
919c3d76fe
Fix peer standby cancellation on normal keepalive from a new link
2026-10-16 12:46:27 +02:00
evgeny
700034eec8
Add broadcast RS settings to desktop and Android
2026-10-16 09:49:58 +02:00
evgeny
6cdc2ce4dc
Allow Android audio toggles during capture startup and test native control
2026-10-16 01:56:43 +02:00
evgeny
8f71a1161b
Release stream radio suppression on END and test shared PCM mute
2026-10-16 01:55:28 +02:00
evgeny
7e7d86e4d3
Add Android live stream audio switch and document radio behavior
2026-10-16 01:54:32 +02:00
evgeny
e3fb8377ab
Track Android stream audio state independently of microphone ownership
2026-10-16 01:53:56 +02:00
evgeny
c4fc4e9b1e
Mute only the Android stream PCM branch during live publication
2026-10-16 01:52:31 +02:00
evgeny
25d27bfffe
Add Android native control for source audio state
2026-10-16 01:51:37 +02:00
evgeny
559d66ae20
Test stream audio toggles and viewer scoped radio suppression
2026-10-16 01:49:30 +02:00
evgeny
2a572af2bb
Label stream audio controls in English and Russian
2026-10-16 01:48:50 +02:00
evgeny
e47ff579b3
Keep desktop stream mute controls synchronized with publication
2026-10-16 01:48:39 +02:00
evgeny
f4d4b6033e
Expose stream audio control to the desktop publisher
2026-10-16 01:48:39 +02:00
evgeny
c9c1bb7cf1
Publish live audio toggles through the shared stream actor
2026-10-16 01:48:07 +02:00
evgeny
db7264e271
Suppress source radio playback only while viewing audible streams
2026-10-16 01:47:44 +02:00
evgeny
d14f9233ed
Separate effective radio silence from stored member mute
2026-10-16 01:47:11 +02:00
evgeny
0f2e81bd0f
Advertise stream audio state in signed source options
2026-10-16 01:46:39 +02:00
evgeny
d766a50447
Keep Android capture ownership until device release and update busy messages
2026-10-16 01:34:37 +02:00
evgeny
829e4d41fa
Document shared microphone ownership and test distinct desktop inputs
2026-10-16 01:29:55 +02:00
evgeny
b523282e8e
Allow simultaneous stream publication and radio in Android UI
2026-10-16 01:28:59 +02:00
evgeny
2038e33d8d
Reset radio detector after Android capture queue discontinuities
2026-10-16 01:21:36 +02:00
evgeny
051d453c2d
Validate Android input routes and isolate capture queue diagnostics
2026-10-16 01:20:34 +02:00
evgeny
9d69cce8e8
Connect Android stream and radio to shared capture and preserve stream audio mode
2026-10-16 01:18:26 +02:00
evgeny
4a49c830d1
Add bounded Android microphone subscriptions with independent ownership
2026-10-16 01:13:23 +02:00
evgeny
d4eb1da233
Test shared microphone lifecycle and stream priority
2026-10-16 01:06:59 +02:00
evgeny
95942382bc
Share desktop publisher microphone with radio while preserving stream format
2026-10-16 01:06:09 +02:00
evgeny
05ed516cf5
Use shared capture subscription for desktop radio
2026-10-16 01:05:14 +02:00
evgeny
6d7b3e8e02
Add shared desktop microphone sessions with stream profile priority
2026-10-16 00:25:25 +02:00
evgeny
7c5b76b482
Add minimized Windows autostart and preserve terminal output
2026-10-15 21:27:32 +02:00
evgeny
abdca1acc7
Load chat background from embedded resources
2026-10-15 20:47:51 +02:00
evgeny
3e4d5d235f
Isolate video call camera capture from the GUI process
2026-10-15 20:16:59 +02:00
evgeny
0b136ae2ab
Fix Windows deployment classification of AVRT.dll
2026-10-15 18:55:35 +02:00
evgeny
b88d76a8ab
Fix Windows stream test and compact Android call diagnostics
2026-10-15 18:35:08 +02:00
evgeny
7477da42a5
Reduce Linux voice capture latency and verify device timing
2026-10-15 17:26:09 +02:00
evgeny
3276204196
docs: record live video flush latency and remaining clock gaps
2026-10-15 16:48:04 +02:00
evgeny
612fb7816d
docs: record bounded video flush lifecycle and validation
2026-10-15 16:44:57 +02:00
evgeny
9886bc2fde
call: continue bounded video flush without waiting for media ticks
2026-10-15 16:38:49 +02:00
evgeny
ff51e30a55
Record final video timing measurements and identify fragment budget continuation gap
2026-10-15 16:30:13 +02:00
evgeny
a373180c10
Document video playout timing contract tests and remaining live cadence issues
2026-10-15 16:24:02 +02:00
evgeny
717d965fec
Keep Android wake deadlines absolute and report causes of the largest video gaps
2026-10-15 16:22:18 +02:00
evgeny
0d65c5bb74
Exercise delayed receive workers UI stalls and call restart with real video decoding
2026-10-15 16:14:51 +02:00
evgeny
b211da9a04
Use shared video playout on Android without blocking decoder input while waiting
2026-10-15 16:13:48 +02:00
evgeny
5255133f27
Pace desktop call video independently and coalesce immediate UI publication
2026-10-15 15:58:33 +02:00
evgeny
eb43876bb6
Timestamp video availability before receive worker scheduling
2026-10-15 15:57:05 +02:00
evgeny
408c0be021
Test video cadence against data stalls scheduler delays and audio corrections
2026-10-15 15:56:31 +02:00
evgeny
7f9eef8579
Add shared absolute video playout scheduler with bounded audio phase
2026-10-15 15:54:53 +02:00
evgeny
2ff14519fa
Record measured desktop Android video latency and presentation timing limits
2026-10-15 15:25:07 +02:00
evgeny
24ba454821
Trace receive decode and UI publication for the reverse video direction
2026-10-15 15:18:35 +02:00
evgeny
d7788b87ac
Distinguish TextureView update notifications from committed frames
2026-10-15 15:18:35 +02:00
evgeny
d1dae1ac2a
Measure Android video decode audio wait and surface presentation separately
2026-10-15 15:06:24 +02:00
evgeny
e2102bbbcc
Trace sampled video frames through desktop encoding and transport
2026-10-15 15:04:51 +02:00
evgeny
19a135d552
Document live low latency route tests and Samsung headset MMAP fallback
2026-10-15 14:58:17 +02:00
evgeny
23c8a190dd
Use AudioTrack for headsets whose physical MMAP routing is unreliable
2026-10-15 14:56:24 +02:00
evgeny
29b01237aa
Keep call headset hotplug automatic after selecting speaker manually
2026-10-15 14:52:41 +02:00
evgeny
8add40ec00
Reopen call output on confirmed routes and recompute AEC from physical latency
2026-10-15 14:46:03 +02:00
evgeny
a165372bbe
Preserve device timestamp offsets across output reopen and counter wrap
2026-10-15 14:46:03 +02:00
evgeny
3226865ad7
Test route-local retry policy and output position continuity
2026-10-15 14:42:04 +02:00
evgeny
075ffc4d3b
Add bounded AAudio voice output with AudioTrack fallback
2026-10-15 14:40:41 +02:00
evgeny
a3854f2836
Allow call playback to invalidate a replaced hardware clock
2026-10-15 14:36:25 +02:00
evgeny
f836ba67ce
Expose device clock suspension without resetting jitter buffer
2026-10-15 14:36:25 +02:00
evgeny
0a56c01e29
Suspend hardware clock during output replacement without resetting media
2026-10-15 14:36:03 +02:00
evgeny
ede911e7e4
Use bounded AAudio write pacing in probe and trace audio controls
2026-10-15 14:36:00 +02:00
evgeny
7a6ecf700c
Trace headset endpoint changes and bound AAudio probe queue
2026-10-15 14:30:59 +02:00
evgeny
9d422dd798
Probe AAudio nonblocking writes alongside callback output
2026-10-15 14:27:21 +02:00
evgeny
43522936ff
Record Android low latency output probe and route recovery results
2026-10-15 14:23:23 +02:00
evgeny
e68df70aad
Extend audio probe with route roundtrip and 40 ms control buffer
2026-10-15 14:19:03 +02:00
evgeny
11a3a20655
Add isolated Android AudioTrack and AAudio voice output probe
2026-10-15 14:14:48 +02:00
evgeny
9d948d399e
Record live call results and Samsung voice output FAST rejection
2026-10-15 14:05:57 +02:00
evgeny
54e672420c
Record measured output latency and validation of low-latency call output
2026-10-15 14:02:03 +02:00
evgeny
1a97219c43
Invalidate output measurements across concurrent Android route changes
2026-10-15 13:59:54 +02:00
evgeny
b3ed8b06e7
Back off PCM reserve probes after starvation and exclude output pauses
2026-10-15 13:59:01 +02:00
evgeny
9c71115363
Localize output latency metrics and synchronize worker assertion
2026-10-15 13:57:41 +02:00
evgeny
e1bb12d16a
Expose desktop output latency and verify hardware clock transitions
2026-10-15 13:57:03 +02:00
evgeny
3083cc05dc
Account for complete output callbacks and test adaptive PCM reserve
2026-10-15 13:56:38 +02:00
evgeny
cfa3ed1f61
Adapt desktop call PCM reserve to output period and underruns
2026-10-15 13:55:49 +02:00
evgeny
cb9852e8d5
Use Android low-latency output and presentation timestamps for call clocks
2026-10-15 13:55:49 +02:00
evgeny
b6b0726bfe
Document shared delay processing and verified frame alignment
2026-10-15 13:36:18 +02:00
evgeny
c244808b77
Support Android C++11 in shared delay processor
2026-10-15 13:24:04 +02:00
evgeny
b7b043777b
Exercise network recovery and changing device block sizes
2026-10-15 13:23:28 +02:00
evgeny
26c91e6295
Test phase alignment after device silence and keep diagnostics current
2026-10-15 13:22:24 +02:00
evgeny
6896038f30
Include device silence in delay control timing
2026-10-15 13:20:50 +02:00
evgeny
22a03c5880
Report PCM mode, exact tempo and frame phase in call diagnostics
2026-10-15 13:19:39 +02:00
evgeny
c1cc3c459b
Specify jitter reserve at startup and expose delay diagnostics
2026-10-15 13:19:39 +02:00
evgeny
aaff1a5494
Integrate delay processing with call jitter and verify PCM handoffs
2026-10-15 13:18:18 +02:00
evgeny
5f9262dd9a
Register shared delay processor and its test target
2026-10-15 13:14:30 +02:00
evgeny
3f13860eac
Align direct playback to source frames using bounded acceleration
2026-10-15 13:14:30 +02:00
evgeny
962067c2ac
Add shared PCM delay processor with lossless mode boundaries
2026-10-15 13:10:45 +02:00
evgeny
ff16adda17
Expose SoundTouch starvation with a 20 ms jitter reserve
2026-10-15 12:39:00 +02:00
evgeny
f1aec9bb2d
Lower shared call jitter reserve floor to 20 ms
2026-10-15 12:36:54 +02:00
evgeny
39c5274819
Record call teardown regression coverage and verified builds
2026-10-15 12:28:54 +02:00
evgeny
92f62a0121
Validate terminal call packets and document end acknowledgements
2026-10-15 12:26:40 +02:00
evgeny
e6954b4152
Acknowledge call termination across router epoch changes
2026-10-15 12:24:55 +02:00
evgeny
3f41676a3d
Define acknowledged call termination and enable route tracing
2026-10-15 12:18:47 +02:00
evgeny
59fb020711
Cancel stale video port commands and expose hangup regression
2026-10-15 12:15:07 +02:00
evgeny
1b07a8a708
Keep call metrics visible outside settings on both clients
2026-10-15 12:06:27 +02:00
evgeny
7d75afd4c5
Fix false queue-full detection in audio diagnostics
2026-10-15 11:52:07 +02:00
evgeny
233056a83a
Document call latency measurements and capture period
2026-10-15 11:41:51 +02:00
evgeny
3c750d018c
Measure Android capture age and device startup stages
2026-10-15 11:40:43 +02:00
evgeny
4cc7d5eaf4
Report call audio processing and send queue timing
2026-10-15 11:38:47 +02:00
evgeny
4476e875ab
Measure call audio processing and send queue residence
2026-10-15 11:38:36 +02:00
evgeny
dba813e8c5
Report desktop voice queue and capture processing latency
2026-10-15 11:36:58 +02:00
evgeny
96725caf03
Request 20 ms call capture and test output latency reports
2026-10-15 11:35:53 +02:00
evgeny
378d4103a8
Measure backend playback latency outside audio callbacks
2026-10-15 11:35:26 +02:00
evgeny
91030de5ea
Cover immediate buffer probe failures and document tuning
2026-10-15 11:11:45 +02:00
evgeny
50bcf5539a
Adapt Android call output buffer to device underruns
2026-10-15 11:10:08 +02:00
evgeny
cbc7b296bb
Add tested adaptive playback device buffer policy
2026-10-15 11:07:39 +02:00
evgeny
92a942ea8b
Document continuous capture timing and device queue tuning scope
2026-10-15 03:37:45 +02:00
evgeny
80f6997e1b
Keep capture PCM timestamps continuous across backend timing updates
2026-10-15 03:35:59 +02:00
evgeny
6765cf186d
Handle headset routing and cancel pending endpoint requests on shutdown
2026-10-15 03:16:03 +02:00
evgeny
d944418676
Test capture clock diagnostics and document routing ownership
2026-10-15 03:13:19 +02:00
evgeny
1da19276e5
Trace raw capture timing and PulseAudio latency without callback logging
2026-10-15 03:12:16 +02:00
evgeny
a7c67ee488
Activate Telecom before call audio and adopt late connections
2026-10-15 03:11:45 +02:00
evgeny
9c4219d837
Use Telecom as the sole route owner for Android calls
2026-10-15 03:11:05 +02:00
evgeny
a439b222da
Bound Android call AudioTrack working buffer and pace PCM by device
2026-10-15 03:04:43 +02:00
evgeny
a82c2ede6a
Clarify audio diagnostic timing and reporter lifetime
2026-10-15 02:58:42 +02:00
evgeny
b51e2c0817
Move AudioTrack diagnostic queries off playback and time operations separately
2026-10-15 02:58:42 +02:00
evgeny
ac2029c82b
Document audio trace fields and verify diagnostic reads preserve jitter events
2026-10-15 02:49:01 +02:00
evgeny
c5efa56939
Move repetitive successful video key validation logs to trace
2026-10-15 02:47:45 +02:00
evgeny
b4092d1bd6
Record bounded call audio traces and report event windows off playback thread
2026-10-15 02:47:33 +02:00
evgeny
39dbfa7673
Expose filtered Android call buffer diagnostics over JNI
2026-10-15 02:46:15 +02:00
evgeny
f341d1db4b
Provide call audio diagnostics without consuming stats events
2026-10-15 02:44:35 +02:00
evgeny
e53ea2e04a
Expose non-destructive jitter buffer diagnostic snapshots
2026-10-15 02:44:10 +02:00
evgeny
d1cbb64884
Reduce Android call playback startup buffering and log output queue
2026-10-15 02:37:15 +02:00
evgeny
4c2d8aa4cc
Prevent delayed camera startup from shifting video into the future
2026-10-15 02:32:35 +02:00
evgeny
ac3801761e
Keep video latency diagnostics within their clock domains
2026-10-15 02:29:34 +02:00
evgeny
15e4fcb710
Measure capture clock offset and video audio-barrier latency
2026-10-15 02:29:09 +02:00
evgeny
4447f25e37
Record live camera FPS diagnosis and guard ownership
2026-10-15 02:21:16 +02:00
evgeny
f84b24806e
Keep UVC camera frame rate stable during video calls
2026-10-15 02:20:32 +02:00
evgeny
459b1ecc01
Display every new desktop call preview frame
2026-10-15 02:18:54 +02:00
evgeny
55293483da
Document video timeout diagnosis and independent Android rotation
2026-10-15 02:14:14 +02:00
evgeny
fc0559c974
Preserve fractional frame budget when downsampling cameras
2026-10-15 02:13:42 +02:00
evgeny
f8e960c844
Retain jitter tolerance across desktop camera phase drift
2026-10-15 02:12:16 +02:00
evgeny
5666da8859
Bound Android bitrate wait by requested keyframe cadence
2026-10-15 02:11:45 +02:00
evgeny
0c214dfca0
Rotate call video independently of Android call controls
2026-10-15 02:11:23 +02:00
evgeny
78246e249e
Document measured call FPS loss and bounded audio synchronization queue
2026-10-15 02:07:04 +02:00
evgeny
fe2ccb07e1
Keep 60 fps downsampling away from half-period ties
2026-10-15 02:05:29 +02:00
evgeny
ee9af6533d
Avoid accumulated rounding in call frame pacing
2026-10-15 02:05:08 +02:00
evgeny
f3eed42c3f
Preserve desktop camera cadence under timestamp jitter
2026-10-15 02:04:26 +02:00
evgeny
209f2ceb7c
Queue video frames while awaiting matching audio timestamps
2026-10-15 02:04:25 +02:00
evgeny
95ab911caf
Track desktop video frame flow and update call preview geometry
2026-10-15 01:59:59 +02:00
evgeny
b665191b9e
Render Android call camera preview directly through Camera2
2026-10-15 01:59:42 +02:00
evgeny
572392511b
Measure call video throughput and audio gating losses
2026-10-15 01:58:25 +02:00
evgeny
4f91f575a1
Document Android call video navigation and preview limits
2026-10-15 01:53:47 +02:00
evgeny
5cd2df9125
Opt in to stable system bar inset measurements
2026-10-15 01:53:12 +02:00
evgeny
964c17f1bf
Add Android call controls navigation and expandable video thumbnails
2026-10-15 01:52:38 +02:00
evgeny
64f1fe4dfb
Add call video navigation labels
2026-10-15 01:51:35 +02:00
evgeny
129f809b7b
Ignore stale proximity events after listener replacement
2026-10-15 01:44:08 +02:00
evgeny
e7ff764ed0
Document video orientation and proximity-gated speaker activation
2026-10-15 01:43:24 +02:00
evgeny
f61e1c0a9f
Defer video speaker activation until the phone is away from the ear
2026-10-15 01:42:17 +02:00
evgeny
1b3d9ff8ee
Distinguish unknown proximity from confirmed far before speaker changes
2026-10-15 01:42:17 +02:00
evgeny
97e3b3e9ef
Match Android call screen orientation to the received video
2026-10-15 01:39:08 +02:00
evgeny
a58cfcedc6
Document separate video and call controls windows
2026-10-15 01:37:11 +02:00
evgeny
170a6b0d57
Translate separate call video window actions
2026-10-15 01:36:33 +02:00
evgeny
9f8fb64e6e
Show call video in a separate resizable desktop window
2026-10-15 01:36:14 +02:00
evgeny
401ca96d7d
Record hardware bitrate verification and final call video checks
2026-10-15 01:31:40 +02:00
evgeny
e1b29af8ce
Keep queued video frames during in-place bitrate changes
2026-10-15 01:30:55 +02:00
evgeny
1376f9f059
Validate bitrate ceilings and recovery without requiring filler data
2026-10-15 01:29:20 +02:00
evgeny
eeb3ca5927
Avoid uncached per-pixel chroma writes in codec probe
2026-10-15 01:26:35 +02:00
evgeny
5e22da3098
Document call video layout and clock discontinuity fixes
2026-10-15 01:25:22 +02:00
evgeny
13feaca674
Use bounded contrast and bulk YUV writes in hardware rate probe
2026-10-15 01:23:34 +02:00
evgeny
607952b709
Verify hardware rate changes on continuous noisy video
2026-10-15 01:14:27 +02:00
evgeny
1b0b429835
Exercise asynchronous rate changes with continuous video output
2026-10-15 01:13:54 +02:00
evgeny
0dec628e49
Prepare call video bitrate encoders without pausing capture
2026-10-15 01:13:36 +02:00
evgeny
152d89f0dc
Apply Android call bitrate changes in place on validated keyframes
2026-10-15 01:11:02 +02:00
evgeny
8582d2e2b0
Log call video surface lifetime and preview visibility
2026-10-15 00:50:36 +02:00
evgeny
5c6f71c602
Keep Camera2 frames when timestamp jitter crosses nominal frame duration
2026-10-15 00:49:52 +02:00
evgeny
6ff21c12ef
Regress video playback across repeated audio clock epoch changes
2026-10-15 00:49:08 +02:00
evgeny
b1390a9542
Ignore stale Android call surfaces during activity replacement
2026-10-15 00:48:12 +02:00
evgeny
1c5ef12c8f
Keep call display format internal to the Android application
2026-10-15 00:47:42 +02:00
evgeny
b6961f5fbc
Localize Android call video settings
2026-10-15 00:46:38 +02:00
evgeny
2db038beee
Separate Android full screen call video from controls and settings
2026-10-15 00:46:26 +02:00
evgeny
898154b2b6
Keep desktop video in a resizable window and retain decoder on audio clock updates
2026-10-15 00:45:22 +02:00
evgeny
21c22bd911
Preserve Android video decoder across audio clock corrections and expose previews
2026-10-15 00:44:45 +02:00
evgeny
a0db643acb
Place camera thumbnail inside remote picture and document call layout
2026-10-15 00:34:07 +02:00
evgeny
87a2075dec
Keep call diagnostics in settings and translate video controls
2026-10-15 00:32:40 +02:00
evgeny
434b59b1c7
Show remote calls full screen with camera picture in picture
2026-10-15 00:31:50 +02:00
evgeny
4a7d64b2aa
Expose call camera preview and clear inactive remote video
2026-10-15 00:31:03 +02:00
evgeny
21ab48b6c3
Document desktop call encoder locale regression and validation
2026-10-15 00:07:07 +02:00
evgeny
ef397a6b48
Fix call encoder levels under comma decimal locales
2026-10-15 00:06:20 +02:00
evgeny
faee775dff
Record the incomplete cross-device AVC decoder probe accurately
2026-10-14 23:45:34 +02:00
evgeny
8b4b278f3c
Document the corrected video contract and verified hardware matrix
2026-10-14 23:45:01 +02:00
evgeny
61bcf28720
Verify Android hardware bitstreams through the production Qt decoder
2026-10-14 23:40:48 +02:00
evgeny
5d115c3dac
Add cross-device decoding to the explicit debug video probe
2026-10-14 23:40:47 +02:00
evgeny
6910e07c31
Surface failed video configuration and camera capture stalls
2026-10-14 23:40:01 +02:00
evgeny
5f16c79559
Preserve bitrate bounds on format changes and discard late desktop pictures
2026-10-14 23:19:18 +02:00
evgeny
047927a7a5
Check VPS HRD and log actual codec constraints on rejection
2026-10-14 23:19:18 +02:00
evgeny
005d891fb4
Bound video send debt and test decoder acceptance and rejection
2026-10-14 23:18:40 +02:00
evgeny
634ef222a4
Fallback desktop video on decoder rejection and verify receive-only codecs
2026-10-14 23:17:25 +02:00
evgeny
f47b7167a2
Fallback Android video after explicit decoder rejection
2026-10-14 23:16:55 +02:00
evgeny
8703e2678a
Expose remote video decoder acceptance to Android workers
2026-10-14 23:16:55 +02:00
evgeny
afe9437c49
Deliver decoder results through the thread-safe call video port
2026-10-14 23:16:20 +02:00
evgeny
d32c8ed6e3
Report decoder acceptance separately from keyframe recovery
2026-10-14 23:16:20 +02:00
evgeny
31a0c4f1a3
Validate HEVC progressive VUI and signaled HRD limits
2026-10-14 23:15:12 +02:00
evgeny
aad77cf415
Share normative HRD limits with the bitstream validator
2026-10-14 23:15:11 +02:00
evgeny
ea5ef4abc2
Probe hardware rate transitions and clear stale call port commands
2026-10-14 23:13:45 +02:00
evgeny
96e8f6c0ac
Test real decoder fixtures and malformed video parameter sets
2026-10-14 23:13:25 +02:00
evgeny
2f1de49e87
Negotiate actual Android modes and replace single encoder on IDR
2026-10-14 23:13:01 +02:00
evgeny
fe16509293
Advertise desktop decoder capabilities independently of encoders
2026-10-14 23:12:15 +02:00
evgeny
47cca28d39
Probe Android encoders and decoders independently with actual formats
2026-10-14 23:12:00 +02:00
evgeny
4eece00a2d
Add independent AVC and HEVC decoder probe bitstreams
2026-10-14 23:11:00 +02:00
evgeny
5e15fc0d3f
Expose common bitstream inspection and actual format checks to Android
2026-10-14 23:10:12 +02:00
evgeny
68e5905d9e
Adapt call transport tests and desktop setup to profile negotiation
2026-10-14 23:09:51 +02:00
evgeny
3063270a67
Cover directional profiles and normative DPB limits in video tests
2026-10-14 23:09:30 +02:00
evgeny
c7184b55d8
Validate desktop call IDRs with the common bitstream contract
2026-10-14 23:08:47 +02:00
evgeny
ce2560ef4b
Wire shared video validator and log negotiated profiles
2026-10-14 23:08:46 +02:00
evgeny
53c6437301
Add shared video parameter set and independent IDR validation
2026-10-14 23:08:10 +02:00
evgeny
520f7a29a7
Separate video profiles and network bitrate from encoder VBV
2026-10-14 23:06:40 +02:00
evgeny
a06bbc34df
Record platform video integration and verified hardware contract blockers
2026-10-14 22:52:15 +02:00
evgeny
b2c6500fea
Test platform video port over a real bidirectional call transport
2026-10-14 22:50:25 +02:00
evgeny
b01d54a431
Request constrained AVC explicitly and diagnose hardware SPS limits
2026-10-14 22:49:31 +02:00
evgeny
156b250432
Exercise production call decoder across real bitrate transitions
2026-10-14 22:46:18 +02:00
evgeny
9becdac331
Add explicit device instrumentation for call codec verification
2026-10-14 22:46:10 +02:00
evgeny
ba2a66341a
Add Android call video display and live camera codec bitrate controls
2026-10-14 22:45:34 +02:00
evgeny
a59ebcd6db
Own Android call video in the foreground call service
2026-10-14 22:45:34 +02:00
evgeny
04f4d29e4f
Add Android call camera and keyframe encoder replacement worker
2026-10-14 22:44:32 +02:00
evgeny
edf7e4d2c5
Render Android call video against the audio playback clock
2026-10-14 22:43:12 +02:00
evgeny
5dbc5bcf59
Probe Android call encoders through real YUV encode and decode
2026-10-14 22:42:16 +02:00
evgeny
c986221cb6
Expose shared video negotiation and bounded queues to Android JNI
2026-10-14 22:40:48 +02:00
evgeny
d01bc395fa
Use current FFmpeg profile constants and qualify video port status
2026-10-14 22:39:56 +02:00
evgeny
af35d03399
Add live call video controls and display to the desktop call window
2026-10-14 22:39:13 +02:00
evgeny
e682f30ca9
Expose active call bitrate range through the shared video port
2026-10-14 22:38:39 +02:00
evgeny
cabae34791
Connect desktop camera workers to negotiated call video and audio clock
2026-10-14 22:37:50 +02:00
evgeny
b091aa0df2
Decode call video with bounded input and verified output metadata
2026-10-14 22:36:32 +02:00
evgeny
57a59df983
Bind shared call video port to desktop and Android core lifetime
2026-10-14 22:36:03 +02:00
evgeny
5e37aaa2fb
Add bounded cross-thread video port for platform call workers
2026-10-14 22:35:25 +02:00
evgeny
65d7ec875e
Record final codec envelope builds and regression results
2026-10-14 22:27:48 +02:00
evgeny
78d3511174
Document negotiated video envelopes and remaining platform integration
2026-10-14 22:27:16 +02:00
evgeny
f055f8a9df
Use fresh capture PTS after discarded video and diagnose rejected frames
2026-10-14 22:22:02 +02:00
evgeny
8c12dfc02f
Verify pending video is discarded when peer capabilities shrink
2026-10-14 22:14:30 +02:00
evgeny
ea65d87ec1
Round-trip real codecs using the negotiated level and reject invalid envelopes
2026-10-14 22:10:42 +02:00
evgeny
3f61549769
Open desktop call encoders from the shared negotiated video format
2026-10-14 22:10:21 +02:00
evgeny
534f319d86
Test directional codec envelopes and reject out-of-cap video in live calls
2026-10-14 22:08:48 +02:00
evgeny
fa53139163
Bind call rate control and frame admission to negotiated codec envelopes
2026-10-14 22:07:04 +02:00
evgeny
d4e6bc5980
Negotiate call video level and bitrate VBV envelopes in the shared protocol
2026-10-14 22:05:55 +02:00
evgeny
2a22d625e1
Record validated desktop call encoder and remaining integration boundaries
2026-10-14 22:01:47 +02:00
evgeny
cab992228c
Preserve explicit VBV and report inactive call encoder state
2026-10-14 21:57:58 +02:00
evgeny
0f570edbd0
Exercise real H264 and H265 calls across delayed bitrate switches
2026-10-14 21:55:11 +02:00
evgeny
327478475c
Bound encoder rate requests by the negotiated mode ceiling
2026-10-14 21:46:53 +02:00
evgeny
3b3ba3c495
Add verified call profiles and defer bitrate replacement until IDR
2026-10-14 21:46:13 +02:00
evgeny
43a90ff23b
Build shared live video library independently from stream publication
2026-10-14 21:44:16 +02:00
evgeny
45720ebaba
Use shared live encoder types in stream publication
2026-10-14 21:44:16 +02:00
evgeny
dca1adc173
Extract live video encoder naming for reuse by calls and broadcasts
2026-10-14 21:43:54 +02:00
evgeny
f89494fb4f
Specify deferred bitrate changes and validate IDR before releasing old encoder
2026-10-14 21:39:24 +02:00
evgeny
abf7ccf566
Probe x265 bitrate switching at scheduled IDR with encoder replacement
2026-10-14 21:38:05 +02:00
evgeny
e20f4113a4
Record x265 reconfiguration defect and validated dependency patch
2026-10-14 21:33:41 +02:00
evgeny
5d8c6b8ff3
Add measured x265 bitrate adaptation probe for call backends
2026-10-14 21:32:02 +02:00
evgeny
4b414deb6e
Record successful bitrate range regression checks
2026-10-14 21:21:21 +02:00
evgeny
a6b8594219
Document call bitrate range settings and validation
2026-10-14 21:19:11 +02:00
evgeny
6980bc7a88
Expose the adaptive call video range in Android audio settings
2026-10-14 21:17:46 +02:00
evgeny
cc341221d4
Verify live bitrate range changes and incompatible codec limits
2026-10-14 21:10:12 +02:00
evgeny
f04e3fd995
Persist the Android call video bitrate range atomically
2026-10-14 21:10:12 +02:00
evgeny
6cbb13d11d
Translate call bitrate range settings
2026-10-14 21:08:13 +02:00
evgeny
0fe9a779f0
Add call video bitrate range controls to desktop settings
2026-10-14 21:07:50 +02:00
evgeny
03d8f71be4
Test video adaptation from poor connectivity to the 4 Mbps ceiling
2026-10-14 21:07:08 +02:00
evgeny
4abc5ef6e7
Apply live call bitrate range within the codec ceiling
2026-10-14 21:06:26 +02:00
evgeny
5789a83ea2
Define atomic call video bitrate range with 300–4000 kbps defaults
2026-10-14 21:06:07 +02:00
evgeny
6b409a5006
Record video transport validation and codec negotiation gap
2026-10-14 20:59:51 +02:00
evgeny
ed848f94eb
Bound video encoder commands and verify generation-safe feedback
2026-10-14 20:53:53 +02:00
evgeny
23bd954b79
Drive call video rate control from endpoint delivery snapshots
2026-10-14 20:52:41 +02:00
evgeny
2c9904c345
Handle video capability exchange racing with call acceptance
2026-10-14 20:50:32 +02:00
evgeny
996d4a89f5
Exercise video switching and backpressure in a real call
2026-10-14 20:49:54 +02:00
evgeny
b466ec30e3
Acknowledge video capabilities before sending frame data
2026-10-14 20:48:58 +02:00
evgeny
609221e384
Separate call audio and video from signaling queues
2026-10-14 20:48:27 +02:00
evgeny
14a56d9b33
Add bounded call video transport and capability exchange
2026-10-14 20:47:44 +02:00
evgeny
dffde9691d
Share call session ownership with the video transport
2026-10-14 20:46:02 +02:00
evgeny
b00c6a2b6d
Test call video negotiation and frame wire boundaries
2026-10-14 20:44:42 +02:00
evgeny
c8bbce6a94
Define call video capabilities and bounded frame assembly
2026-10-14 20:43:42 +02:00
evgeny
5fbea21482
Record call clock validation results
2026-10-14 19:42:56 +02:00
evgeny
120a865152
Record the implemented call timing protocol and next stages
2026-10-14 19:42:32 +02:00
evgeny
610773fa90
Document and log the call source clock contract
2026-10-14 19:38:59 +02:00
evgeny
4a55c30f95
Verify capture clock metadata over the call transport
2026-10-14 19:37:25 +02:00
evgeny
a978bb7b06
Exercise call clocks through Opus and jitter recovery
2026-10-14 19:36:51 +02:00
evgeny
e975d24a73
Track Android call capture and playback clocks
2026-10-14 19:36:11 +02:00
evgeny
023f3a335e
Pass call audio timing across Android JNI
2026-10-14 19:36:11 +02:00
evgeny
9fe5cd4c27
Test call capture timestamps and device progress
2026-10-14 19:35:56 +02:00
evgeny
c041882f5f
Observe capture timestamps and device progress in voice tests
2026-10-14 19:30:28 +02:00
evgeny
0195732b4e
Keep call audio regressions explicit about untimed sources
2026-10-14 19:29:05 +02:00
evgeny
2f3eb66c4c
Preserve measured versus estimated device timing in voice mixer
2026-10-14 19:29:04 +02:00
evgeny
39bfedca86
Drive desktop call clock from rendered PCM and capture timing
2026-10-14 19:28:38 +02:00
evgeny
7bac999d93
Handle source discontinuities and reject stale device epochs
2026-10-14 19:27:54 +02:00
evgeny
9aba8e278c
Preserve capture PTS and expose call playback clock to platforms
2026-10-14 19:27:03 +02:00
evgeny
ab283eebdc
Expose measured Opus codec delay for capture clock mapping
2026-10-14 19:26:09 +02:00
evgeny
96e7983128
Attach source PTS maps to call jitter and playback epochs
2026-10-14 19:25:30 +02:00
evgeny
dc3cf4f227
Update call transport tests for explicit capture metadata
2026-10-14 19:24:51 +02:00
evgeny
2e1908a52b
Preserve capture clock across call delivery and validate media peer
2026-10-14 19:24:51 +02:00
evgeny
ab04b14237
Carry capture timestamps and Opus delay in call media protocol
2026-10-14 19:24:22 +02:00
evgeny
fe2fa73cc0
Test audio timeline boundaries and sustained SoundTouch playback
2026-10-14 19:23:40 +02:00
evgeny
991d6bad43
Map produced audio to source PTS and bounded device progress
2026-10-14 19:22:32 +02:00
evgeny
b5bd45c4da
Define bounded audio timeline and playback clock contracts
2026-10-14 19:21:20 +02:00
evgeny
4939ee7fb0
Account for transposer prefill in source coordinates
2026-10-14 19:19:50 +02:00
evgeny
811b980883
Verify exact SoundTouch provenance and unchanged PCM output
2026-10-14 19:17:46 +02:00
evgeny
1d43578335
Expose optional live source tracking through SoundTouch
2026-10-14 19:16:45 +02:00
evgeny
edcd34d942
Report copied and overlapping source ranges from TDStretch
2026-10-14 19:16:03 +02:00
evgeny
ceb06bafcf
Define SoundTouch source spans and unity interpolation contract
2026-10-14 19:15:43 +02:00
evgeny
183e66e97d
Record video foundation checks and unresolved audio clock contract
2026-10-14 18:46:57 +02:00
evgeny
d441d9634d
Document measured SoundTouch clock drift before video integration
2026-10-14 18:44:15 +02:00
evgeny
05d9e3f22e
Check SoundTouch source time against identifiable audio samples
2026-10-14 18:42:46 +02:00
evgeny
801050bacb
Exercise video rate feedback with simulated channel changes
2026-10-14 18:41:33 +02:00
evgeny
f24a8ca6d3
Add video bitrate regulator with bounded debt feedback
2026-10-14 18:40:35 +02:00
evgeny
0bbd4d6c34
Verify router ACK accounting across retries and epoch resets
2026-10-14 18:34:33 +02:00
evgeny
6a1e7a90dd
Record video call implementation contracts and milestones
2026-10-14 18:33:42 +02:00
evgeny
859bb733af
Build and test router delivery history boundaries
2026-10-14 18:33:05 +02:00
evgeny
f87c6a93bc
Expose per-service payload backlog and acknowledged delivery
2026-10-14 18:32:28 +02:00
evgeny
61faca84d7
Add aligned router delivery metering for video adaptation
2026-10-14 18:31:52 +02:00
evgeny
0de5479e8e
Document live zoom validation and intermittent STCP test failure
2026-10-14 17:44:51 +02:00
evgeny
8eef506eed
Enable pinch zoom and bounded panning in Android live viewer
2026-10-14 17:41:12 +02:00
evgeny
c39610f079
Share video zoom geometry between Android viewers
2026-10-14 17:36:38 +02:00
evgeny
7ff95623c1
Document fullscreen live viewer behavior and SM checks
2026-10-14 17:31:08 +02:00
evgeny
931631a4a9
Show Android live streams fullscreen with automatic orientation and timed controls
2026-10-14 17:28:16 +02:00
evgeny
d912d53979
Record SM audio playback validation and native snapshot test flake
2026-10-14 17:21:10 +02:00
evgeny
ded0d401c7
Match stream audio queue to device buffer and document playback ownership
2026-10-14 17:19:04 +02:00
evgeny
0fdc6e435b
Fix Android stream audio backpressure without blocking video
2026-10-14 17:16:45 +02:00
evgeny
91d1a7994e
Record stream role lookup measurements and architecture decisions
2026-10-14 16:52:31 +02:00
evgeny
a4f508feed
Read stream supernode role directly by member ID
2026-10-14 16:49:40 +02:00
evgeny
d2f8e57118
Record keyframe recovery fixes and remaining architecture review
2026-10-14 16:34:30 +02:00
evgeny
7dd1176545
Document complete keyframe admission and shared media opening
2026-10-14 16:32:15 +02:00
evgeny
97fea6e809
Use shared media opening in desktop and Android viewers
2026-10-14 16:30:38 +02:00
evgeny
1809416dce
Add atomic media reader opening with selected epoch validation
2026-10-14 16:26:41 +02:00
evgeny
d75aea1a09
Remove unused media receiver and test the shared ring cursor
2026-10-14 16:24:32 +02:00
evgeny
d209ab94ba
Gate media cursor revision changes on a complete keyframe
2026-10-14 16:22:15 +02:00
evgeny
afa8fd307a
Reproduce media cursor revision admission inconsistency
2026-10-14 16:10:26 +02:00
evgeny
84472cc276
Clarify stream bootstrap and log bounded publisher drain
2026-10-14 16:05:17 +02:00
evgeny
d0ddc9ae8c
Fix partial stream bootstrap and release drained upstream flows
2026-10-14 16:02:24 +02:00
evgeny
1815de059e
Record direct preview verification and camera teardown ownership
2026-10-14 15:58:31 +02:00
evgeny
12ad2bf14b
Release all preview session outputs when the camera device closes
2026-10-14 15:44:08 +02:00
evgeny
117087d56b
Distinguish camera preview failure from a stopped stream
2026-10-14 15:43:24 +02:00
evgeny
2ee3103c8c
Avoid double sensor rotation in direct Android camera preview
2026-10-14 15:43:24 +02:00
evgeny
b8a2d7a555
Detach direct camera preview immediately when UI goes to background
2026-10-14 15:30:03 +02:00
evgeny
78054b2c1d
Measure direct preview frame age using camera timestamp clocks
2026-10-14 15:19:49 +02:00
evgeny
30dae7d7ed
Document direct Android camera preview and surface ownership
2026-10-14 15:14:42 +02:00
evgeny
548e64c963
Use direct camera preview instead of a local stream decoder
2026-10-14 14:58:03 +02:00
evgeny
e8a63ec40d
Send Android camera frames directly to preview surfaces
2026-10-14 14:58:03 +02:00
evgeny
5630bedc51
Record verified AV1 playback fix and regression coverage
2026-10-14 14:25:20 +02:00
evgeny
9ef18b6324
Release Android inflight state at decoder EOS before audio tail
2026-10-14 14:17:35 +02:00
evgeny
7b4dfc062a
Document demand driven playback and delayed decoder lifecycle
2026-10-14 14:10:36 +02:00
evgeny
8d0504c759
Exercise codec output delay explicitly in the desktop fixture
2026-10-14 14:04:45 +02:00
evgeny
5ce2877fc0
Bound desktop codec work and drain delayed frames through EOF
2026-10-14 13:57:58 +02:00
evgeny
c02222610b
Preserve observed decoder lead while its pipeline drains
2026-10-14 13:49:57 +02:00
evgeny
360a6efafc
Verify outstanding read replies and explicit video demand
2026-10-14 13:49:14 +02:00
evgeny
74c96ba5e9
Let desktop codecs read ahead while keeping presentation bounded
2026-10-14 13:43:23 +02:00
evgeny
049480408a
Test frozen clock decoding and single Android read responses
2026-10-14 13:37:43 +02:00
evgeny
31b10435d3
Use explicit video demand in ring and network reader tests
2026-10-14 13:36:38 +02:00
evgeny
9331c26b22
Distinguish Android decoder startup from waiting for a keyframe
2026-10-14 13:36:38 +02:00
evgeny
f72e2fca94
Drive Android decoding by codec readiness and bounded working frames
2026-10-14 13:36:38 +02:00
evgeny
223c9a153c
Request the next video frame through JNI without a time horizon
2026-10-14 13:36:38 +02:00
evgeny
5a3999fbdb
Prepare one Android media response per player request
2026-10-14 13:36:38 +02:00
evgeny
ac339bb61f
Prepare one desktop media response per player request
2026-10-14 13:27:10 +02:00
evgeny
33f8dacbfc
Expose demand driven video reads through the stream handle
2026-10-14 13:25:50 +02:00
evgeny
f317d3e989
Read the next live video frame independently of presentation time
2026-10-14 13:25:50 +02:00
evgeny
47119c73a4
Record completed desktop broadcast implementation and checks
2026-10-14 13:00:15 +02:00
evgeny
4e7b8f5c1a
Keep desktop stream failure visible after draining
2026-10-14 12:58:09 +02:00
evgeny
c3512b787e
Test fatal desktop audio failure after successful capture
2026-10-14 12:56:49 +02:00
evgeny
470001bbab
End desktop publication on fatal audio worker failure
2026-10-14 12:56:26 +02:00
evgeny
b25070acbd
Document shared live publisher and desktop capture lifecycle
2026-10-14 12:54:44 +02:00
evgeny
e99a1b9450
Verify live desktop codec changes preserve the audio epoch
2026-10-14 12:53:24 +02:00
evgeny
b5f84d4a9b
Include complete video frame type in the raw preview integration test
2026-10-14 12:45:44 +02:00
evgeny
16dc3a13aa
Verify live bitrate decoder continuity and capture installer completeness
2026-10-14 12:41:56 +02:00
evgeny
8fda2b0751
Format the isolated encoder capability and live setup passes
2026-10-14 12:38:41 +02:00
evgeny
7ad0aa61af
Update live x264 bitrate and exclude encoders without forced key support
2026-10-14 12:32:33 +02:00
evgeny
e4f9a48c2c
Reuse static screen frames across encoder changes and test rollback
2026-10-14 12:27:50 +02:00
evgeny
c08415a255
Translate capture termination and frame conversion errors
2026-10-14 12:11:36 +02:00
evgeny
2caa9504c9
Report capture termination and preserve explicit microphone selection
2026-10-14 12:11:36 +02:00
evgeny
ee54626de9
Describe own stream management and system screen selection
2026-10-14 12:08:01 +02:00
evgeny
80bd17a28e
Open own broadcast controls and keep rejected voice recording idle
2026-10-14 12:08:01 +02:00
evgeny
ba17f9908d
Render raw preview at 30 fps and preserve fallback audio sample timing
2026-10-14 12:06:45 +02:00
evgeny
27f3726124
Inspect capture plugin dependencies and recognize XWayland sessions
2026-10-14 11:49:04 +02:00
evgeny
97c460e2f1
Observe capture activation raw frames and encoder generations
2026-10-14 11:44:11 +02:00
evgeny
945c75ea07
Install capture dependencies and verify Multimedia plugin deployment
2026-10-14 11:26:50 +02:00
evgeny
7f7bb1c939
Verify forced keyframes and isolate encoder probes from live timestamps
2026-10-14 11:25:38 +02:00
evgeny
7720b7036d
Deploy Qt Multimedia dependencies with Windows broadcasts
2026-10-14 11:21:48 +02:00
evgeny
1b85406b13
Trace encoder responses to explicit random access frame requests
2026-10-14 11:21:11 +02:00
evgeny
f85f45fbd3
Validate publisher lifecycle in optional codec builds
2026-10-14 10:21:40 +02:00
evgeny
4a4397ace1
Start portal encoder deadlines after the first permitted capture frame
2026-10-14 10:20:50 +02:00
evgeny
240568870a
Test desktop codec round trips and real screen publication
2026-10-14 10:19:44 +02:00
evgeny
29313cce54
Reserve broadcast capture exclusively while preserving shared voice I/O
2026-10-14 10:17:48 +02:00
evgeny
386998598e
Restore bitrate controls and wait for explicit portal source selection
2026-10-14 02:58:45 +02:00
evgeny
d934978fb2
Translate desktop broadcast controls and capture diagnostics
2026-10-14 02:57:56 +02:00
evgeny
ce461521e4
Defer source failures and end calls that cannot reserve audio capture
2026-10-14 02:56:36 +02:00
evgeny
50fad4ceff
Preserve video color range and handle capture worker failures
2026-10-14 02:55:36 +02:00
evgeny
ce46677dfb
Keep voice recording from opening an already owned microphone
2026-10-14 02:54:30 +02:00
evgeny
b3c698be25
Prevent radio capture from competing with a broadcast microphone
2026-10-14 02:54:20 +02:00
evgeny
c1d7460254
Own publication independently of its window and reserve call capture
2026-10-14 02:54:19 +02:00
evgeny
ab01c6dc48
Expose broadcast setup even when a channel has no live sources
2026-10-14 02:53:22 +02:00
evgeny
c91bb2828f
Keep raw preview and source permissions independent of video encoding
2026-10-14 02:52:36 +02:00
evgeny
f96443e1a6
Add desktop broadcast controls and aggregate send indicators
2026-10-14 02:51:41 +02:00
evgeny
701a7d0eac
Capture camera screen and stereo microphone for desktop publication
2026-10-14 02:49:12 +02:00
evgeny
0055b86b19
Encode low latency desktop video with codec specific keyframes
2026-10-14 02:44:59 +02:00
evgeny
77acdb2d65
Expose radio compressor settings to publication workers
2026-10-14 02:35:55 +02:00
evgeny
125f740a5f
Use the shared publisher in Android and desktop stream bridges
2026-10-14 02:34:16 +02:00
evgeny
f5d112a712
Share bounded media publication and send telemetry across frontends
2026-10-14 02:32:14 +02:00
evgeny
a5f8b8431d
Verify video profile fallback without excluding a supported codec
2026-10-14 02:14:24 +02:00
evgeny
499ce21cfc
Use available encoder profiles when the preferred video profile is absent
2026-10-14 02:14:24 +02:00
evgeny
643420b644
Record codec and telemetry validation with precise decoder diagnostics
2026-10-14 02:11:59 +02:00
evgeny
49ca49fa1e
Assemble partial codec setup and test real out of band decoder configuration
2026-10-14 02:01:44 +02:00
evgeny
b4aeb1a3fd
Keep preview layout stable and document codec configuration exchange
2026-10-14 01:56:02 +02:00
evgeny
39297d1a07
Explain unavailable video decoders and restored capture settings
2026-10-14 01:47:32 +02:00
evgeny
de67de33df
Report codec capabilities and document the expanded Android media header
2026-10-14 01:45:50 +02:00
evgeny
bf12bd5b05
Count only current viewer media against the preparation limit
2026-10-14 01:43:44 +02:00
evgeny
990713c7a7
Retain complete codec parameter sets across separate configuration callbacks
2026-10-14 01:41:12 +02:00
evgeny
a4e6683c5b
Exercise modern codec playback and partial video queue telemetry
2026-10-14 01:32:40 +02:00
evgeny
06bd9947ce
Test codec keyframes and bitrate selection across camera changes
2026-10-14 01:21:04 +02:00
evgeny
305eacbe95
Verify all media codec IDs and key configuration bounds
2026-10-14 01:20:00 +02:00
evgeny
876a5a65ec
Test aggregate send windows with duplicate ACKs and connection teardown
2026-10-14 01:20:00 +02:00
evgeny
3e7197702b
Decode all supported video formats from uAV2 on desktop
2026-10-14 01:14:38 +02:00
evgeny
c815d06ab0
Add video codec and bitrate controls with aggregate send buffer indicators
2026-10-14 01:13:28 +02:00
evgeny
7a5a94bb64
Keep ten hertz publication telemetry separate from preview state
2026-10-14 01:12:31 +02:00
evgeny
1ac7a40432
Capture and play codec specific access units with live bitrate changes
2026-10-14 01:11:49 +02:00
evgeny
d209049f71
Enumerate supported surface encoders and model codec specific keyframes
2026-10-14 01:10:43 +02:00
evgeny
5677e8ec5f
Initialize the publication media format with the selected codec
2026-10-14 01:09:30 +02:00
evgeny
cd8a5392d5
Expose source codec selection and aggregate send telemetry through JNI
2026-10-14 01:09:30 +02:00
evgeny
8b6c72b704
Publish bounded 100 ms send telemetry from the Android media actor
2026-10-14 01:08:20 +02:00
evgeny
4d03a2db53
Expose pending source deliveries without counting ETCP inflight twice
2026-10-14 01:06:57 +02:00
evgeny
b6652c7c7f
Record unique acknowledged packets at the instance transport boundary
2026-10-14 01:06:56 +02:00
evgeny
ac89601fc5
Add instance lifetime ACK windows and exclusive ETCP send queue snapshots
2026-10-14 01:06:32 +02:00
evgeny
7e693fcc97
Define uAV2 codec IDs and signed keyframe configuration envelopes
2026-10-14 01:06:32 +02:00
evgeny
84246bea89
Record adaptive playback validation and ring reader lifecycle
2026-10-14 00:13:08 +02:00
evgeny
2aafe172d6
Reject large audio timestamp jumps before narrowing PLC packet counts
2026-10-14 00:11:31 +02:00
evgeny
359770ecb4
Await all relay ACCEPTs through the bounded pending-buffer retry
2026-10-14 00:09:12 +02:00
evgeny
366cf94e15
Describe shared ring playback, corrected reserve history and stereo catchup
2026-10-14 00:07:52 +02:00
evgeny
c0c4310f08
Clarify desktop demand reader ownership and preparation bounds
2026-10-14 00:06:23 +02:00
evgeny
ef0fc85eb9
Document bounded read continuation and retained source ownership after FIN
2026-10-14 00:05:49 +02:00
evgeny
88a2b66050
Keep prior network race fixtures independent of the playback scenario clock
2026-10-14 00:04:52 +02:00
evgeny
be7c3c5811
Bound desktop decoder work and drain Android codec with monotonic EOS timestamps
2026-10-14 00:04:08 +02:00
evgeny
9c01535c78
Exercise paused ring readers and graceful source close across live nodes
2026-10-14 00:02:59 +02:00
evgeny
3649e45087
Reseek on media discontinuities and bound disabled track timestamps
2026-10-14 00:01:57 +02:00
evgeny
35521fe188
Verify bounded assembly of large retained frames without new packets
2026-10-13 23:46:30 +02:00
evgeny
5937904b4a
Test delayed readers without frontend queue growth and isolate codec fixtures
2026-10-13 23:41:10 +02:00
evgeny
98655284b2
Discard stale playback snapshots before reseeking a media cursor
2026-10-13 23:39:45 +02:00
evgeny
6743f84146
Verify stereo playback tempo, pitch and original media clock mapping
2026-10-13 23:35:13 +02:00
evgeny
3010fe25db
Hold video only playback clocks on starvation and drain finished audio
2026-10-13 23:32:27 +02:00
evgeny
a12665bbd1
Drive desktop ring playback from corrected history and physical audio time
2026-10-13 23:30:06 +02:00
evgeny
e1abcb5d69
Observe actual silent device intervals when adapting playback history
2026-10-13 23:26:55 +02:00
evgeny
5c75487446
Continue bounded media assembly without waiting for new network data
2026-10-13 23:24:04 +02:00
evgeny
f3bc2909e1
Initialize Android playback before handling its first media packet
2026-10-13 23:18:43 +02:00
evgeny
acf374df4e
Use adaptive ring backed playback and stereo tempo on Android
2026-10-13 23:16:06 +02:00
evgeny
e6e276aed3
Expose shared playback timing and stereo time stretch to Android
2026-10-13 23:03:29 +02:00
evgeny
541518db81
Keep finished source data alive until delayed media readers close
2026-10-13 22:53:38 +02:00
evgeny
9781f138ed
Switch Android media delivery to demand reads from the shared RS ring
2026-10-13 22:53:13 +02:00
evgeny
f655f2c1d5
Keep playback audio compatible with the Android voice build
2026-10-13 22:46:02 +02:00
evgeny
8d317dbb85
Keep viewer snapshots scoped and normalize Opus packet cadence
2026-10-13 22:45:07 +02:00
evgeny
650b65078a
Switch desktop media delivery to bounded demand reads from the shared ring
2026-10-13 22:42:16 +02:00
evgeny
2c7bd78a64
Track stereo time stretched audio through the device playback timeline
2026-10-13 22:37:09 +02:00
evgeny
9f37c54a3c
Expose demand based audio and video reads on local stream handles
2026-10-13 22:30:47 +02:00
evgeny
866ca0923d
Give audio device lead and video decode lead independent read limits
2026-10-13 22:30:47 +02:00
evgeny
75bd6f1ce1
Notify media readers when indexed playback data becomes available
2026-10-13 22:29:24 +02:00
evgeny
5c12ba253e
Test independent playback readers over one authenticated stream ring
2026-10-13 22:21:29 +02:00
evgeny
485e655fd8
Separate media reader cursors from live stream receive progress
2026-10-13 22:15:00 +02:00
evgeny
dc7cebaa65
Register indexed media reads and retain only two working blocks
2026-10-13 22:12:51 +02:00
evgeny
126aa9df10
Read media on demand through indexed cursors over the RS ring
2026-10-13 22:09:46 +02:00
evgeny
4ae8fc7c45
Reuse authenticated immutable RS subsets for playback reads
2026-10-13 22:04:55 +02:00
evgeny
2fac28b7e9
Build and register the shared stream playback controller test
2026-10-13 22:04:16 +02:00
evgeny
8e3ec4cb84
Test adaptive playback against a delayed audio device queue
2026-10-13 22:04:16 +02:00
evgeny
b2645aed9d
Add a shared playback reserve clock with corrected minute history
2026-10-13 21:56:10 +02:00
evgeny
05f2a3602a
Record signed variable RS batch implementation and validation
2026-10-13 20:35:53 +02:00
evgeny
3b922ced78
Cover early BOUND in the delayed helper confirmation regression
2026-10-13 20:28:56 +02:00
evgeny
43a600c5a5
Test immediate relay forwarding and log batch authentication
2026-10-13 20:25:40 +02:00
evgeny
01d7fd5bef
Document embedded batch signatures and resize pressure fixtures
2026-10-13 20:20:17 +02:00
evgeny
98d1e40bf3
Validate short media batches with an embedded source signature
2026-10-13 20:14:06 +02:00
evgeny
e96b813fcb
Test batch authentication after losses and recovery after rejection
2026-10-13 20:13:45 +02:00
evgeny
f15c97d11a
Size Android publisher buffers for the signed batch format
2026-10-13 20:09:14 +02:00
evgeny
6a5bb84d71
Centralize default stream input capacity with batch overhead
2026-10-13 20:09:14 +02:00
evgeny
0e9478d033
Account variable stream parts and continue after rejected batches
2026-10-13 20:08:07 +02:00
evgeny
47b713ea69
Publish actual part lengths and expose rejected batch status
2026-10-13 20:07:02 +02:00
evgeny
cee5b26c13
Sign stream batches before RS and authenticate reconstructed data
2026-10-13 20:06:29 +02:00
evgeny
7c8470f44a
Define variable stream parts with a signed RS batch envelope
2026-10-13 20:03:08 +02:00
evgeny
3477a8844c
Allow RS batches to choose their block size from input length
2026-10-13 19:59:57 +02:00
evgeny
3f6cc5da52
Document callback-driven supplier discovery and verification
2026-10-13 18:16:37 +02:00
evgeny
f2c5187ef1
Retry pending supplier buffers without resetting error backoff
2026-10-13 18:06:58 +02:00
evgeny
da0a9ad316
Wake stream supplier discovery on Merkle and BGP callbacks
2026-10-13 17:55:19 +02:00
evgeny
fec21ab5c5
Record live startup cancellation diagnosis and relay ownership
2026-10-13 17:27:41 +02:00
evgeny
ccc9210232
Retain selected relay issuance before delayed READY and ACCEPT
2026-10-13 17:20:36 +02:00
evgeny
325abd8d6f
Document verified 100ms stream bootstrap and aligned playback
2026-10-13 16:47:39 +02:00
evgeny
1d7f70b31c
Preserve Opus preroll state across timestamp jitter and short gaps
2026-10-13 16:39:37 +02:00
evgeny
eda8dfbc91
Cover paused sources and duplicate relay controls during startup
2026-10-13 16:32:53 +02:00
evgeny
8206e53b5c
Warm Android Opus preroll and start audio at the first keyframe
2026-10-13 16:30:41 +02:00
evgeny
79701feef1
Drain startup audio on END and validate Opus fixture failures
2026-10-13 16:27:12 +02:00
evgeny
f42b085e12
Align desktop audio startup with the first decoded video frame
2026-10-13 16:26:11 +02:00
evgeny
60aaa16327
Confirm relay readiness after reconstructing first FEC batch
2026-10-13 16:22:00 +02:00
evgeny
ad20f954c5
Race initial stream suppliers with relay delay of 100ms
2026-10-13 16:14:35 +02:00
evgeny
e708117259
Send relay state transitions without retry delays
2026-10-13 16:09:13 +02:00
evgeny
5def12351f
Wake stream selection on validated control responses
2026-10-13 16:06:26 +02:00
evgeny
44cfebf898
Record repeated stream delivery stall during stereo verification
2026-10-13 15:30:59 +02:00
evgeny
63ccff67a2
Record stereo and rotation verification on SM and desktop
2026-10-13 15:22:56 +02:00
evgeny
50005b108f
Generate continuous stereo Opus in live playback regression
2026-10-13 14:39:08 +02:00
evgeny
727106f4e9
Document stereo live audio and compact rotation controls
2026-10-13 14:30:07 +02:00
evgeny
c251de4f77
Verify stereo media format and AGC channel balance
2026-10-13 14:24:59 +02:00
evgeny
8bee8c10ff
Replace stream rotation menu with three marked toggle buttons
2026-10-13 14:24:59 +02:00
evgeny
214a98efb1
Play live stereo on desktop and verify channel separation
2026-10-13 14:17:26 +02:00
evgeny
e06e9b0e22
Capture encode and play stereo audio in Android live streams
2026-10-13 14:15:44 +02:00
evgeny
22b62699ac
Describe stereo Opus in live media blocks
2026-10-13 14:14:24 +02:00
evgeny
5f0fff5fd6
Record CAMCORDER and live radio compressor verification
2026-10-13 14:06:12 +02:00
evgeny
2a2394b34d
Verify live stream compression and document shared radio AGC
2026-10-13 13:46:24 +02:00
evgeny
2e0eb89ad3
Capture CAMCORDER audio and apply radio AGC changes live
2026-10-13 13:40:08 +02:00
evgeny
6bd14c53b5
Compress stream audio before Opus using radio settings
2026-10-13 13:39:12 +02:00
evgeny
149e4d43e5
Record live desktop playback verification after queue fix
2026-10-13 13:22:51 +02:00
evgeny
c72a66ba06
Record desktop shutdown remaining after core teardown
2026-10-13 13:07:51 +02:00
evgeny
736fb92ed7
Document live playback queue bounds and latency regression
2026-10-13 12:57:37 +02:00
evgeny
ef67e3ed2c
Preserve video frames until audio clock reaches their PTS
2026-10-13 12:55:56 +02:00
evgeny
1d984f0d0b
Reproduce live video starvation behind audio output latency
2026-10-13 12:51:42 +02:00
evgeny
cff92f3dac
Remove obsolete debug option from configuration fixture
2026-10-13 12:18:01 +02:00
evgeny
f953ab5a8f
Test all debug categories and record Android settings fixes
2026-10-13 12:12:30 +02:00
evgeny
5f5d4f964a
Preserve Android debug level and accept all core categories
2026-10-13 12:10:38 +02:00
evgeny
7fa7a42673
Expose native debug categories and fix Android level fields
2026-10-13 12:10:08 +02:00
evgeny
df400a90aa
Record partial stream recovery failure from SM and colo2 logs
2026-10-13 11:36:40 +02:00
evgeny
14e2cdc23d
Document supernode stream assistance and completed validation
2026-10-13 10:18:44 +02:00
evgeny
bbd13215a4
Apply router backpressure and preserve reusable relay attempts
2026-10-13 09:42:46 +02:00
evgeny
e73fab0a73
Verify relay handoff expiry, replay protection and complete teardown
2026-10-13 09:38:50 +02:00
evgeny
035a2eb6d0
Retain and release media replication connection ownership
2026-10-13 09:28:51 +02:00
evgeny
57d2828496
Separate stream routing from member files and scope relay activation
2026-10-13 09:14:06 +02:00
evgeny
8dbfb4d297
Exercise supernode relay delivery and preserve ended receive handles
2026-10-13 01:28:23 +02:00
evgeny
29d91d4b19
Activate supernode stream relays on demand and release idle owners
2026-10-13 01:20:24 +02:00
evgeny
661cf032fe
Define routed stream relay requests and generation-scoped replies
2026-10-13 01:15:09 +02:00
evgeny
cd5e658fb9
Add internal ownership for exact-epoch stream relays
2026-10-13 01:15:09 +02:00
evgeny
8883002e3f
Distinguish relay-only stream subscriptions in member profiles
2026-10-13 01:15:09 +02:00
evgeny
2cc9834e4c
Use integral scores to select stream suppliers
2026-10-13 01:14:38 +02:00
evgeny
83c652a810
Merge remote-tracking branch 'origin/master'
2026-10-13 01:08:11 +02:00
evgeny
3a6dacf378
Add stream camera controls and preserve playback on changes
2026-10-13 01:00:53 +02:00
evgeny
72bcbd98e8
Handle SIGPIPE during TCP stream test teardown
2026-10-13 00:58:40 +02:00
evgeny
6a92eec983
Log stream probe backoff and pending bootstrap state
2026-10-13 00:56:18 +02:00
evgeny
3adc4a0be4
Isolate stream bootstrap teardown from shared test events
2026-10-13 00:55:12 +02:00
evgeny
bf0b90d362
Exercise initial stream reinit on a single TCP link
2026-10-13 00:51:36 +02:00
evgeny
00b78fd629
Preserve pending stream requests across session reinit
2026-10-13 00:40:53 +02:00
evgeny
5ddfc582f7
Merge remote-tracking branch 'origin/master'
2026-10-12 22:38:49 +02:00
evgeny
db2771e8de
Fix Windows interface macro collision in NCD test
2026-10-12 22:38:23 +02:00
evgeny
29a8fb2531
Check source discovery requested before desktop startup
2026-10-12 22:31:28 +02:00
evgeny
061eb0f0f8
Preserve initial channel watches until desktop core attaches
2026-10-12 22:30:38 +02:00
evgeny
17606c66b8
Document reactive stream discovery and desktop playback ownership
2026-10-12 22:29:00 +02:00
evgeny
34349bd663
Require selected epochs and verify multiple live publishers
2026-10-12 22:28:15 +02:00
evgeny
e9982a2db6
Verify live Opus output and volume with real null audio devices
2026-10-12 22:26:41 +02:00
evgeny
dd034a9d42
Cover channel closure and keep stream selection usable for long lists
2026-10-12 22:21:10 +02:00
evgeny
cacd377d55
Use only shared source events in Android streaming UI and tests
2026-10-12 22:20:28 +02:00
evgeny
dad67360b9
Remove obsolete Android stream polling and simplify lifecycle tests
2026-10-12 22:20:28 +02:00
evgeny
6e596f34a5
Notify viewers when channels close and refresh resumed playback state
2026-10-12 22:18:04 +02:00
evgeny
4e1c36955a
Test desktop stream discovery, playback, pressure and teardown
2026-10-12 22:16:31 +02:00
evgeny
e5d37f6e74
Translate desktop live stream controls and playback states
2026-10-12 22:15:11 +02:00
evgeny
7addfb5aa3
Keep live decoding low latency and preserve publisher stop controls
2026-10-12 22:15:11 +02:00
evgeny
b4ebaa8863
Open desktop stream playback windows from channel sources
2026-10-12 22:12:41 +02:00
evgeny
fe7734b9e0
Show live sources and select a stream in desktop channel headers
2026-10-12 22:12:41 +02:00
evgeny
10f197c817
Decode and play desktop live H264 and Opus streams
2026-10-12 22:11:35 +02:00
evgeny
0a5b9b50f1
Connect desktop stream bridge to core lifecycle and events
2026-10-12 22:09:39 +02:00
evgeny
d9821fa89c
Add bounded desktop live media bridge and source lifecycle tests
2026-10-12 22:07:35 +02:00
evgeny
e3d9ac9d31
Report Android stream close reasons and epoch changes
2026-10-12 22:01:38 +02:00
evgeny
d5ed19ee34
Open Android live streams from the channel header
2026-10-12 22:01:38 +02:00
evgeny
ba3dd70f6c
Keep Android live sources in reactive channel state
2026-10-12 22:00:12 +02:00
evgeny
ba3dfa9fcc
Watch Android stream sources and validate selected epochs
2026-10-12 21:58:56 +02:00
evgeny
f91894aa1b
Expose verified stream sources and channel watch events
2026-10-12 21:57:20 +02:00
evgeny
90d3206071
Confirm new TCP sessions and bound reciprocal challenge retries
...
Negotiate new TCP sessions even when the peer epoch is known, and let the retry timer send reciprocal challenges to avoid feedback loops when confirmations are lost.
Cover peer restarts, simultaneous connects, REALITY, confirmation loss, second links, stale confirmations and deadlines. Remove forced client resets and count only validated test payloads in the UDP reconnect test.
Validation: 149 tests passed; proxy, burst and load integration tests passed; Android assembleDebug succeeded.
2026-10-12 21:29:41 +02:00
evgeny
d372438b6e
Reuse automatically completed profiles in the NAT fixture
2026-10-12 20:57:29 +02:00
evgeny
d2b96d1340
Release cold priority after a completed partial measurement
2026-10-12 20:48:33 +02:00
evgeny
a32eef9ed1
Wait for the actual DOWN timer in the owner-release test
2026-10-12 20:46:43 +02:00
evgeny
c7be1ebbbe
Preserve cold NAT trials in the real network fixture
2026-10-12 20:43:39 +02:00
evgeny
391059c967
Refresh signed socket metadata when changing the failure-test profile
2026-10-12 20:33:31 +02:00
evgeny
bea9ca88a6
Publish the test peer profile through the instance-owned snapshot
2026-10-12 20:33:16 +02:00
evgeny
1b659335b9
Test failure recheck eligibility and coalescing on a blocked UDP peer
2026-10-12 20:33:03 +02:00
evgeny
61e3ad9d24
Start a cold measurement when automatic detection is enabled
2026-10-12 20:31:45 +02:00
evgeny
406f569989
Protect cold ingress before the third routed node is announced
2026-10-12 20:29:33 +02:00
evgeny
3294f67dbf
Log cold candidate eligibility and reservation changes
2026-10-12 20:27:34 +02:00
evgeny
2dc7e8d206
Document failure recheck limits and validate requested endpoints
2026-10-12 20:26:12 +02:00
evgeny
3b894753b1
Trigger NAT rechecks after direct timeout and exhausted reverse
2026-10-12 20:25:42 +02:00
evgeny
952fbe68e2
Schedule bounded endpoint rechecks after compatible UDP failure
2026-10-12 20:25:20 +02:00
evgeny
99382cf823
Cancel UDP route probes with their contexts before socket teardown
2026-10-12 20:21:02 +02:00
evgeny
ceab874abc
Wait for complete NAT cycles and test an indirect private helper
2026-10-12 20:18:21 +02:00
evgeny
2354e94347
Expose pending NAT candidate cycles in local diagnostic status
2026-10-12 20:17:44 +02:00
evgeny
2ba011d3fd
Document grouped control, isolated helper ports and ingress correlation
2026-10-12 20:07:49 +02:00
evgeny
179aa0ef35
Release received packets when cold NAT priority defers PONG
2026-10-12 20:05:47 +02:00
evgeny
bb01f243fe
Allow routed observers in the NAT integration assertions
2026-10-12 19:54:39 +02:00
evgeny
3635bcf3a9
Keep connection-manager background pings out of cold NAT trials
2026-10-12 19:44:28 +02:00
evgeny
e60b03916a
Test automatic detection in another group over a TCP routed helper
2026-10-12 19:30:42 +02:00
evgeny
9a24ac6bdf
Try controlled ingress before asking the broker for helper mapping
2026-10-12 19:27:58 +02:00
evgeny
f71e94c9d8
Trace the first UDP contacts that affect cold NAT classification
2026-10-12 19:17:06 +02:00
evgeny
8906e29102
Keep background PONG replies from contaminating cold ingress checks
2026-10-12 19:01:13 +02:00
evgeny
9bd113054c
Defer reachability probes while the first NAT ingress is protected
2026-10-12 18:50:08 +02:00
evgeny
9324b8af8c
Give initial NAT measurements bounded priority without opening filters
2026-10-12 18:50:08 +02:00
evgeny
585834ffbe
Isolate helper traffic from the measured working sockets
2026-10-12 18:47:54 +02:00
evgeny
96fa1990b0
Keep detection attempt counters and network fixtures group-aware
2026-10-12 18:20:47 +02:00
evgeny
0ee431b490
Prefer untouched helper IPs and exercise NAT through real groups
2026-10-12 18:13:29 +02:00
evgeny
8990574c1d
Complete grouped NAT control and cancel tasks with group lifetime
2026-10-12 18:08:47 +02:00
evgeny
a0a4493ef2
Measure helper endpoints and protect controlled UDP ingress trials
2026-10-12 17:57:22 +02:00
evgeny
77ca1ec3dd
Select NAT candidates across groups and route authenticated control
2026-10-12 17:50:45 +02:00
evgeny
2e7da4f3cc
Define grouped NAT probe tags and a routed control service
2026-10-12 17:43:27 +02:00
evgeny
a97589e4a6
Check desktop address rendering with compact NAT profiles
2026-10-12 17:18:23 +02:00
evgeny
53c32e5669
Document compact NAT profiles and stable measurement lifetime
2026-10-12 17:13:22 +02:00
evgeny
5429431567
Invalidate changed endpoints and verify the Android address contract
2026-10-12 17:11:56 +02:00
evgeny
6272c8a4ad
Verify compact address snapshots, migration and Android JSON
2026-10-12 17:10:48 +02:00
evgeny
89f031f4f9
Keep STUN round diagnostics separate from published NAT profiles
2026-10-12 17:07:35 +02:00
evgeny
ba29adf6ef
Test stable published profiles across repeated NAT measurements
2026-10-12 17:06:35 +02:00
evgeny
61132a3e84
Align socket monitoring with compact address profiles
2026-10-12 17:05:23 +02:00
evgeny
db8a5ee2df
Retain stable NAT results and compact the address database
2026-10-12 17:04:59 +02:00
evgeny
e47ae480f5
Remove time-dependent profile matching from connection setup
2026-10-12 17:01:28 +02:00
evgeny
f900cda9c0
Use the last published address profile without a time limit
2026-10-12 17:01:02 +02:00
evgeny
38eaae8bb6
Remove measurement IDs and timestamps from NODEINFO profiles
2026-10-12 17:00:38 +02:00
evgeny
d2e62874bb
Fix Android member details layout and address formatting
2026-10-12 16:40:40 +02:00
evgeny
a96d5926c7
Fix Android external network monitoring and startup readiness
...
Select frontend network callbacks for auto_sockets=android instead of opening a denied netlink monitor. Preserve monitor descriptor ownership, keep native monitoring failures fatal, and release caller config on failed Android core creation and restart.
Register ConnectivityManager before requesting startup, report readiness after SERVICE_STARTED, and refresh addresses after initialization with serialized updates and generation checks. Add regression coverage for denied netlink, socket failures, address updates, and fd=0 preservation. Record the separate cancellation issue for startup before readiness.
Validation: full check.sh passed, including proxy/burst/load integrations. Clean Android build installed successfully on SM-A525F and Q8; logcat confirms both cores initialized and entered the poll loop with external monitoring and post-start address refresh.
2026-10-12 16:01:26 +02:00
evgeny
72e2c89e3b
Fix sockless TCP keepalive and require complete UTUN initialization
...
Receive keepalive through the owning ETCP link, preserve RX deadlines, and report routing metrics without TUN. Use independent netlink requests and track installed routes for rollback. Reject incomplete resource initialization and release partially constructed cores while preserving caller config ownership.
Validated startup failure and rollback, padded keepalive, standby, STCP traffic, transport lifecycle, dynamic sockets, and daemon startup. Real TUN/netlink checks passed in an isolated Linux network namespace; modified modules passed FreeBSD compilation checks.
2026-10-12 14:24:32 +02:00
evgeny
bb256dccdc
Extend Android playback counters across long running streams
2026-10-12 12:54:13 +02:00
evgeny
a043dc9a42
Bound audio writes and release codecs after failed initialization
2026-10-12 11:49:09 +02:00
evgeny
98dcaae853
Close viewers on malformed media and release terminal owners immediately
2026-10-12 11:46:13 +02:00
evgeny
eee67ac9d9
Close local preview when its publication ends
2026-10-12 11:36:07 +02:00
evgeny
af580d9d90
Record Android viewer lifecycle and persisted snapshot diagnostics
2026-10-12 11:31:26 +02:00
evgeny
039c0f71f5
Pause viewers in the background and keep visible playback awake
2026-10-12 11:30:36 +02:00
evgeny
150b3c3bdb
Explain invalid media metadata and codec transitions in logs
2026-10-12 11:26:27 +02:00
evgeny
1dcf6a79ce
Reject overlapping core ownership of Android stream handles
2026-10-12 11:26:27 +02:00
evgeny
18661f0ef0
Constrain live preview while keeping stream controls visible
2026-10-12 11:21:30 +02:00
evgeny
ef76ca5de3
Document audiovisual stream format and Android ownership contracts
2026-10-12 07:24:13 +02:00
evgeny
dac5f98052
Select local preview from the verified source snapshot
2026-10-12 07:22:43 +02:00
evgeny
c2c202e716
Mute local preview and clear Android media queues at detach
2026-10-12 07:22:43 +02:00
evgeny
c1b1713ab1
Verify Android AVC normalization and keyframe configuration
2026-10-12 02:47:15 +02:00
evgeny
e8adf03826
Preserve stream control events when discarding delayed media
2026-10-12 02:42:01 +02:00
evgeny
1209d8e4b7
Keep video clock moving through audio underruns and drain final playback
2026-10-12 02:30:36 +02:00
evgeny
e09ee919a5
Release capture before service ownership and report startup failures
2026-10-12 02:29:26 +02:00
evgeny
c9743ee85d
Exercise Android stream queues and teardown against a live core
2026-10-12 02:29:08 +02:00
evgeny
0c613eacbc
Show verified source snapshots without borrowing core pointers
2026-10-12 02:28:02 +02:00
evgeny
6c692399c2
Build verified live source snapshots in the core thread
2026-10-12 02:27:44 +02:00
evgeny
4fc1f31651
Prevent competing Android capture while broadcasting
2026-10-12 02:07:04 +02:00
evgeny
d4ca812578
Open live streams from Android channel navigation
2026-10-12 02:07:04 +02:00
evgeny
8502d6f2d7
Add localized Android stream controls and player screen
2026-10-12 02:06:27 +02:00
evgeny
ee851b4aa6
Play live streams with bounded queues and audio clock synchronization
2026-10-12 02:04:38 +02:00
evgeny
f2a5dde761
Declare stream camera permissions and cancel capture at core restart
2026-10-12 02:02:48 +02:00
evgeny
e4f2e647d7
Own live camera sessions in an Android foreground service
2026-10-12 02:02:48 +02:00
evgeny
c50d5066a9
Capture Android AVC and Opus on a shared monotonic timeline
2026-10-12 02:01:09 +02:00
evgeny
2f707366f3
Expose session scoped Android stream operations
2026-10-12 01:51:10 +02:00
evgeny
6f544b4ca2
Add Android JNI transport and independent stream Opus codecs
2026-10-12 01:51:10 +02:00
evgeny
0ee1163a0b
Bind Android media queues to core lifetime and source epochs
2026-10-12 01:50:07 +02:00
evgeny
938289a6f0
Include Android streaming bridge and refine malformed wire tests
2026-10-12 01:49:40 +02:00
evgeny
36fceec6b2
Bridge Android live streams through bounded session queues
2026-10-12 01:49:07 +02:00
evgeny
fc3518f5ba
Test media boundaries FEC losses and keyframe recovery
2026-10-12 01:46:06 +02:00
evgeny
5c23c10c04
Register audiovisual stream sources and regression target
2026-10-12 01:46:06 +02:00
evgeny
1389bac261
Define FEC protected audiovisual blocks and frame assembly
2026-10-12 01:45:08 +02:00
evgeny
47caca82a1
Expose atomic publication of stream batches
2026-10-12 01:43:31 +02:00
evgeny
baeaef3ab1
Preserve logical block boundaries in stream sources
2026-10-12 01:43:21 +02:00
evgeny
4f9fefe9e5
Test and document NCD ownership protecting CM direct probes beyond down timeout
2026-10-12 01:34:44 +02:00
evgeny
fdaa20977d
Recheck expired down lifetime when the last NCD owner releases it
2026-10-12 01:34:44 +02:00
evgeny
11f1a14063
Retain down ETCP connections while local NCD handles exist
2026-10-12 01:34:44 +02:00
evgeny
0d7f7630b0
Expose actual NCD handle ownership for an ETCP transport
2026-10-12 01:34:44 +02:00
evgeny
6704a18897
Clarify independent RX watchdog and sleep-aware graceful close deadlines
2026-10-12 01:34:44 +02:00
evgeny
24c64967fd
Propagate remote UDP link DOWN to the connection expiry timer
2026-10-12 01:34:44 +02:00
evgeny
85b4af5b1d
Shorten RX deadline immediately when a sleeping peer wakes
2026-10-12 01:34:44 +02:00
evgeny
2e66cdb122
Preserve cancellation of pending outgoing attempts and size packet fixture correctly
2026-10-12 01:34:44 +02:00
evgeny
b57221f6b5
Document ETCP down retention and separate RX lifetime from keepalive sending
2026-10-12 01:34:44 +02:00
evgeny
1c53ef597d
Register lifecycle regressions and cancel timers owned by synthetic fixtures
2026-10-12 01:34:44 +02:00
evgeny
0ba8380db4
Test incoming ETCP expiry, reconnect, sleep and graceful close
2026-10-12 01:34:44 +02:00
evgeny
f090d697c4
Initialize inbound graceful close and honor remote transport ownership
2026-10-12 01:34:44 +02:00
evgeny
3cfdb9e6ec
Keep a finite RX deadline while ETCP keepalive sending is suspended
2026-10-12 01:34:44 +02:00
evgeny
034be69ac1
Expire ETCP transports after 30 seconds continuously down
2026-10-12 01:34:44 +02:00
evgeny
b852058501
Record validated STUN fallback, sanitizer checks and IPv6 follow-up
2026-10-12 01:31:29 +02:00
evgeny
b3830e0264
Document signed profile source and reproducible isolated STUN bench
2026-10-12 01:28:49 +02:00
evgeny
c19f835334
Document implemented interface STUN fallback and provenance semantics
2026-10-12 01:27:40 +02:00
evgeny
9f907d0f31
Stop NAT detectors before service callbacks and verify STUN restart isolation
2026-10-12 01:25:59 +02:00
evgeny
152ebfef48
Release retained STUN port history during final core destruction
2026-10-12 01:24:00 +02:00
evgeny
3d5f009380
Keep STUN port history owned by the core across configuration reloads
2026-10-12 01:24:00 +02:00
evgeny
3735b78328
Verify STUN cache expiry and preserve partial ETCP measurement priority
2026-10-12 01:20:56 +02:00
evgeny
709b0a3271
Wait for the real observer link and distribute STUN bench scripts
2026-10-12 01:15:31 +02:00
evgeny
8c5e4ab691
Exercise STUN fallback and ETCP promotion with real namespace NAT
2026-10-12 01:14:09 +02:00
evgeny
a581cb2086
Add isolated STUN fallback scenario and equivalent NAT for test ports
2026-10-12 01:12:28 +02:00
evgeny
f433413c49
Test deduplicated STUN groups and fallback promotion through real ETCP
2026-10-12 01:01:11 +02:00
evgeny
164a3a1f0f
Keep connection attempts available for STUN hints and verify signed provenance
2026-10-12 00:58:50 +02:00
evgeny
9aa56e6b56
Show NAT profile origin and recheck interface STUN from control
2026-10-12 00:58:50 +02:00
evgeny
76d2e58f19
Expose ETCP and STUN profile provenance in monitor protocol
2026-10-12 00:58:32 +02:00
evgeny
01b0992c39
Select interface STUN fallback only when ETCP lacks independent observers
2026-10-12 00:57:54 +02:00
evgeny
735ac36579
Sign endpoint profile provenance and restrict external-address publication
2026-10-12 00:56:43 +02:00
evgeny
6beae21ec4
Group STUN probes by interface path and refresh independent-port results
2026-10-12 00:55:29 +02:00
evgeny
8b8b73983b
Plan interface STUN profiles as fallback for unavailable ETCP probes
2026-10-12 00:42:14 +02:00
evgeny
37e897d0d2
Plan unified STUN and ETCP endpoint measurements
2026-10-12 00:09:13 +02:00
evgeny
5c83aac96e
Adapt STUN diagnostics to endpoint profiles and helper sockets
2026-10-12 00:03:07 +02:00
evgeny
39dd038831
Record ASAN validation of endpoint detector lifecycle
2026-10-12 00:01:40 +02:00
evgeny
ff69552a61
Measure owned endpoint mapping and inbound reachability separately
2026-10-12 00:01:40 +02:00
evgeny
b54307a0df
Ignore local hardware directory
2026-10-12 00:01:40 +02:00
evgeny
65f05c86ed
Save workspace state before address detection redesign
2026-10-12 00:01:40 +02:00
evgeny
5eb1c86acf
Include stream bench validation notes in source distribution
2026-10-12 00:01:40 +02:00
evgeny
b8f8818eef
Record validated stream bench runs and explicit RPC error diagnostics
2026-10-12 00:01:40 +02:00
evgeny
89c6482a96
Record clean NAT startup and monotonic restart contract in stream specification
2026-10-12 00:01:40 +02:00
evgeny
d44b4bc682
Test repeated restart before deferred GAP and prohibit replay under overload
2026-10-12 00:01:40 +02:00
evgeny
802134c846
Preserve delivered cursor when stream restarts from a stale supplier
2026-10-12 00:01:40 +02:00
evgeny
1969ca5535
Require monotonic consumer cursor across stream receive restart
2026-10-12 00:01:40 +02:00
evgeny
5084670820
Recreate bench network after calibration to clear NAT and conntrack state
2026-10-12 00:01:40 +02:00
evgeny
e78eaf45f7
Document namespace stream bench and completion after consumer drain
2026-10-12 00:01:40 +02:00
evgeny
a877ba8a73
Keep automatic stream recovery active until signed END is drained
2026-10-12 00:01:40 +02:00
evgeny
a4e899807c
Clear closed fixture handles before terminal stream regression
2026-10-12 00:01:40 +02:00
evgeny
d99b0e5525
Reproduce automatic stream stall after early END with incomplete FEC batch
2026-10-12 00:01:40 +02:00
evgeny
46ac9a03b9
Add forced TCP bench mode and verify observed source timestamp wraps
2026-10-12 00:01:40 +02:00
evgeny
57bf4e490d
Bound namespace startup and measure LAN quality before stream tests
2026-10-12 00:01:40 +02:00
evgeny
649be77fa3
Use core clock for stream metrics and require new data after WAN recovery
2026-10-12 00:01:40 +02:00
evgeny
5c1bb06294
Expose source clock and stream metrics in bench snapshots
2026-10-12 00:01:40 +02:00
evgeny
284b603e6e
Account initial GAP independently of first delivered stream record
2026-10-12 00:01:40 +02:00
evgeny
e92e08e5cc
Document stream lab and test namespace isolation guards
2026-10-12 00:01:40 +02:00
evgeny
3dc682087a
Wait for verified Merkle profiles as well as BGP reachability
2026-10-12 00:01:40 +02:00
evgeny
ebe3232268
Apply optional load collection only to peer queue telemetry
2026-10-12 00:01:40 +02:00
evgeny
0eae531706
Include local BGP presence and make queue diagnostics opt-in
2026-10-12 00:01:40 +02:00
evgeny
e9e93ef26b
Wire live stream scenarios into isolated bench launcher
2026-10-12 00:01:40 +02:00
evgeny
fe4791d6f5
Add sixteen-node live JOIN and streaming scenarios
2026-10-12 00:01:39 +02:00
evgeny
6332e75e61
Add real uTun stream bench node with payload and latency validation
2026-10-12 00:01:39 +02:00
evgeny
856fbc61b1
Keep NAT probes independent of cached conntrack and DHCP timers
2026-10-12 00:01:39 +02:00
evgeny
47948fe847
Add rootless isolated stream bench launcher
2026-10-12 00:01:39 +02:00
evgeny
0b1a081e34
Implement isolated stream bench networking and NAT calibration
2026-10-12 00:01:39 +02:00
evgeny
0172aa3081
Create dedicated stream network-namespace bench topology
2026-10-12 00:01:39 +02:00
evgeny
4096691eb2
Record full-suite and final sanitizer verification for automatic streaming
2026-10-12 00:01:39 +02:00
evgeny
fc63b801f9
Clarify generation discovery on every stream INFO probe
2026-10-12 00:01:39 +02:00
evgeny
af1f3cc007
Document nonce-bound unilateral stream generation recovery
2026-10-12 00:01:39 +02:00
evgeny
6b18ad45ea
Restore automatic suppliers after proven resynchronization and test unilateral generation changes
2026-10-12 00:01:39 +02:00
evgeny
a8cd802aad
Resynchronize unilateral peer generations through nonce-bound INFO without epoch ping-pong
2026-10-12 00:01:39 +02:00
evgeny
9a648219cf
Document automatic stream selection, wire v3, active-mode ownership and verified behavior
2026-10-12 00:01:39 +02:00
evgeny
6749d09025
Enforce distinct manual and automatic upstream ownership
2026-10-12 00:01:39 +02:00
evgeny
0d2d7c913d
Keep optimizer diagnostic format strings within repository line limits
2026-10-12 00:01:39 +02:00
evgeny
090964a786
Log provider offers and measured reasons for confirmed stream migrations
2026-10-12 00:01:39 +02:00
evgeny
fcbdbd6002
Test probe burst, second-level admission and complete-cycle timing boundaries
2026-10-12 00:01:39 +02:00
evgeny
c6bf960eec
Isolate monotonic probe scheduling policy for precise boundary checks
2026-10-12 00:01:39 +02:00
evgeny
ab4b75986d
Reopen closed peer ownership and drive reverse requests from current stream attempts
2026-10-12 00:01:39 +02:00
evgeny
7144bbe694
Verify deferred standby restoration and END-only automatic streams
2026-10-12 00:01:39 +02:00
evgeny
03814b9660
Tie active-mode holds to stream ownership and deliver signed END for empty live sources
2026-10-12 00:01:39 +02:00
evgeny
bccf8c6b38
Preserve frontend activity requests while stream owners hold the core active
2026-10-12 00:01:39 +02:00
evgeny
1308e8201e
Verify direct, reverse-only and incompatible NCD capability checks without side effects
2026-10-12 00:01:39 +02:00
evgeny
aa3fb9cac7
Admit reverse-capable providers without requiring an outgoing-compatible address
2026-10-12 00:01:39 +02:00
evgeny
22342b310c
Bound stale offer storage, detect initial DATA stalls and report verified FEC protection
2026-10-12 00:01:39 +02:00
evgeny
2d9616eca5
Refresh matching active path RTT through probes and isolate integration event counters
2026-10-12 00:01:39 +02:00
evgeny
7db3008e5c
Wait for the actual automatic stream source in Merkle subscription checks
2026-10-12 00:01:39 +02:00
evgeny
31d0db939a
Include NCD compatibility API in automatic stream integration test
2026-10-12 00:01:39 +02:00
evgeny
bc49b452f9
Exercise automatic stream selection, INFO-only probes and verified overlap failover
2026-10-12 00:01:39 +02:00
evgeny
99359f987c
Use observed provider quality and keep empty-source queue accounting bounded
2026-10-12 00:01:39 +02:00
evgeny
cb9ef94501
Keep protocol and overload fixtures under explicit manual upstream control
2026-10-12 00:01:39 +02:00
evgeny
94c482ed35
Handle empty sources and next-batch tail subscriptions without startup races
2026-10-12 00:01:39 +02:00
evgeny
ef48fa2a37
Enable automatic upstream selection for subscriptions with lifecycle-safe cleanup
2026-10-12 00:01:39 +02:00
evgeny
576c79657b
Implement stream supplier probe cycles, FEC-aware selection and overlap migration
2026-10-12 00:01:39 +02:00
evgeny
3db2130b56
Define per-stream automatic selection settings and diagnostic manual mode
2026-10-12 00:01:39 +02:00
evgeny
0b9b395879
Keep SUBSCRIBE deadlines and prevent ambiguous pending INFO correlation
2026-10-12 00:01:39 +02:00
evgeny
35ad47c653
Implement DATA-free stream probes with ranges, paths and load offers
2026-10-12 00:01:39 +02:00
evgeny
984153b90a
Expose monotonic age of verified substream progress
2026-10-12 00:01:39 +02:00
evgeny
9cd285ddb0
Define INFO-only stream probes and provider offer snapshots
2026-10-12 00:01:39 +02:00
evgeny
ca5a374042
Expose side-effect-free NCD transport compatibility using shared link matching
2026-10-12 00:01:39 +02:00
evgeny
ee8baae160
Record full and sanitizer checks for stream overload delivery
2026-10-12 00:01:39 +02:00
evgeny
f10078e482
Document timestamp metrics and negotiated stream overload cuts
2026-10-12 00:01:39 +02:00
evgeny
0282fe7e17
Keep newer INFO probes alive when old queued probes expire
2026-10-12 00:01:39 +02:00
evgeny
4142c7691a
Expire stale stream control without retaining orphan issuances
2026-10-12 00:01:39 +02:00
evgeny
223bb145e6
Compare overload request history when checking CPU-only load
2026-10-12 00:01:39 +02:00
evgeny
c9ce8d3a74
Expose overload admission recovery and wait for it in tests
2026-10-12 00:01:39 +02:00
evgeny
bee7bdaa70
Expose stream load and network APIs with C linkage
2026-10-12 00:01:39 +02:00
evgeny
695741d9d3
Exclude stale growth and pending cuts from global overload budgets
2026-10-12 00:01:39 +02:00
evgeny
01324d2ebb
Avoid an extra FEC cut for a marginal overload safety reserve
2026-10-12 00:01:39 +02:00
evgeny
3d6c843958
Verify global stream pressure requires backlog as well as CPU
2026-10-12 00:01:39 +02:00
evgeny
97495377b2
Assert rate-based parity cuts rather than a fixed close count
2026-10-12 00:01:39 +02:00
evgeny
1174d71a06
Wait for CLOSED delivery after unblocking overload control
2026-10-12 00:01:39 +02:00
evgeny
108e97b550
Validate partial overload cuts preserve six FEC data streams
2026-10-12 00:01:39 +02:00
evgeny
a4e080da91
Prefer FEC parity cuts and refresh receive progress on inspection
2026-10-12 00:01:39 +02:00
evgeny
f11592be3e
Exercise stream overload under real ETCP backpressure
2026-10-12 00:01:39 +02:00
evgeny
61df1204f8
Expect expired arrival intervals to leave the load window
2026-10-12 00:01:39 +02:00
evgeny
df474a33d0
Check stream pressure timing, accounting and wide metric fields
2026-10-12 00:01:39 +02:00
evgeny
c10e0c7e3c
Negotiate frozen-rate stream cuts with bounded overload grace
2026-10-12 00:01:39 +02:00
evgeny
a07c53a397
Measure stream issuances, probe RTT and pending data demand
2026-10-12 00:01:39 +02:00
evgeny
921340ae60
Track signed timestamp progress in each local stream subflow
2026-10-12 00:01:39 +02:00
evgeny
fabd7ac91f
Define stream pressure negotiation and timestamp metric snapshots
2026-10-12 00:01:39 +02:00
evgeny
fec1916a58
Observe stream cache arrivals and exact pending block age
2026-10-12 00:01:39 +02:00
evgeny
e90ad5acbd
Account stream demand and confirm sustained queue pressure
2026-10-12 00:01:39 +02:00
evgeny
ddc386d16c
Record ASAN and full checks for live NCD stream delivery
2026-10-12 00:01:39 +02:00
evgeny
007f5d21b2
Document live NCD stream delivery, wire format and limits
2026-10-12 00:01:39 +02:00
evgeny
67152f6b7b
Verify independent stream groups share one direct ETCP session
2026-10-12 00:01:39 +02:00
evgeny
ee36c578e2
Reject premature stream completion and failed ACCEPT enqueue
2026-10-12 00:01:39 +02:00
evgeny
0b202bb3e7
Bound stream path allocations and validate wire rejection cases
2026-10-12 00:01:39 +02:00
evgeny
fc80186043
Restart stream receives and expose confirmed delivery gaps
2026-10-12 00:01:39 +02:00
evgeny
d6f935d779
Locate recoverable stream batches when skipping delivery gaps
2026-10-12 00:01:39 +02:00
evgeny
109936f846
Revalidate stream peers and respect asynchronous ETCP reset
2026-10-12 00:01:39 +02:00
evgeny
09e86a16f6
Exercise live stream relay, common start, leases and epochs
2026-10-12 00:01:39 +02:00
evgeny
d83e85b8ca
Report stream ring bounds and handle expired and final cursors
2026-10-12 00:01:39 +02:00
evgeny
c2179b3959
Implement NCD stream issuances, ring cursors and routed reverse
2026-10-12 00:01:39 +02:00
evgeny
36c4ff6050
Connect local stream lifetime and signed END to network delivery
2026-10-12 00:01:39 +02:00
evgeny
b31aa9f71d
Retain stream block paths and locate gaps in ring delivery
2026-10-12 00:01:39 +02:00
evgeny
18fe51ad25
Define direct stream messages, paths and signed completion
2026-10-12 00:01:39 +02:00
evgeny
12c0de503d
Document installer builds and register packaging checks
2026-10-12 00:01:39 +02:00
evgeny
804007c997
Test Windows installer contents and build error propagation
2026-10-12 00:01:39 +02:00
evgeny
6d3c555ac4
Record successful full stream integration checks
2026-10-12 00:01:39 +02:00
evgeny
fa79b7d30c
Document stream CHAT integration and signed member option format
2026-10-12 00:01:39 +02:00
evgeny
5f9cb86ff0
Package only imported DLLs and log firewall command output
2026-10-12 00:01:39 +02:00
evgeny
a62540800b
Cancel local streams when signed membership is invalidated
2026-10-12 00:01:39 +02:00
evgeny
c250e703f7
Create VibeChat installer from Windows BAT entry points
2026-10-12 00:01:39 +02:00
evgeny
197696075c
Release owned BGP path entries before removing their queues
2026-10-12 00:01:39 +02:00
evgeny
78e0312fee
Validate stream lifecycle and Merkle BGP integration
2026-10-12 00:01:39 +02:00
evgeny
1b406202b5
Integrate installer generation into Windows build scripts
2026-10-12 00:01:39 +02:00
evgeny
2e70c3baed
Add VibeChat Windows installer and runtime packaging
2026-10-12 00:01:39 +02:00
evgeny
30106c8f93
Attach stream subscriptions to CHAT lifecycle and member profiles
2026-10-12 00:01:39 +02:00
evgeny
b14f00a4b2
Check Windows ChatGUI config writability directly
2026-10-12 00:01:38 +02:00
evgeny
753aa4217d
Use LocalAppData fallback for Windows ChatGUI storage
2026-10-12 00:01:38 +02:00
evgeny
b6f80668d1
Define signed stream member options and BGP eligibility
2026-10-12 00:01:38 +02:00
evgeny
a33666b778
Add atomic updates for signed member profile options
2026-10-12 00:01:38 +02:00
evgeny
ec82d95a03
Add signed FEC stream core and source buffering
2026-10-12 00:01:38 +02:00
evgeny
2c5deafe56
Add independent STUN NAT probes with RFC 5780 discovery
2026-10-11 23:35:47 +02:00
evgeny
9cc996b775
Document Reed-Solomon module and update streaming design
2026-10-10 19:45:14 +02:00
evgeny
2967d2fb71
Fix matrix inverse syntax and make bounded conversions explicit
2026-10-10 19:38:08 +02:00
evgeny
d9d4a7807f
Test Reed-Solomon recovery and integrate codec into builds
2026-10-10 19:37:07 +02:00
evgeny
831018f161
Add batch Reed-Solomon codec with caller-owned buffers
2026-10-10 19:35:10 +02:00
evgeny
84a171dcac
tests: keep build script regressions outside the regular check
2026-10-10 17:48:20 +02:00
evgeny
8de64174bb
tests: remove unnecessary barriers from parallel checks
2026-10-10 17:42:31 +02:00
evgeny
69a99c7860
Merge remote-tracking branch 'origin/master'
...
# Conflicts:
# tests/Makefile.am
2026-10-10 17:25:40 +02:00
evgeny
c85a8116ef
tests: run checks in parallel with available CPU count by default
2026-10-10 17:14:29 +02:00
evgeny
b16da44e42
tests: assign STCP ping and REALITY fallback ports at bind
2026-10-10 16:54:56 +02:00
evgeny
7ae2f74643
tests: discover live endpoints in forked JOIN and network polls
2026-10-10 16:51:38 +02:00
evgeny
482d2787fb
tests: retain automatically assigned endpoints across restart
2026-10-10 16:48:19 +02:00
evgeny
12d4e2433e
dummynet: route between explicit independently bound endpoints
2026-10-10 16:46:19 +02:00
evgeny
70b55e4626
tests: assign CM phase listeners and failure endpoints dynamically
2026-10-10 16:40:56 +02:00
evgeny
e836090a02
tests: allocate live and blackhole multilink endpoints dynamically
2026-10-10 16:39:17 +02:00
evgeny
4b499a076a
tests: derive NCD fixture addresses from bound sockets
2026-10-10 16:37:36 +02:00
evgeny
b0ca182fc5
tests: preserve diagnostic filters when wiring peer endpoints
2026-10-10 16:35:07 +02:00
evgeny
45a6320b5e
tests: assign JOIN, member files and DM endpoints dynamically
2026-10-10 16:31:54 +02:00
evgeny
e4fe534382
tests: isolate media delivery endpoints and scratch files
2026-10-10 16:23:09 +02:00
evgeny
336b6871f3
tests: allocate broadcast, avatar and invite listeners dynamically
2026-10-10 16:14:53 +02:00
evgeny
e25d5cc220
tests: use bound endpoints for CM and database synchronization
2026-10-10 16:11:00 +02:00
evgeny
101266d1a7
tests: assign independent CM and chat sync listener ports
2026-10-10 16:07:43 +02:00
evgeny
efdfb1d835
tests: inherit the ready echo listener on an automatic port
2026-10-10 16:06:07 +02:00
evgeny
4e2cc0e35a
tests: hold OS-assigned HTTP and SOCKS listener ports
2026-10-10 16:04:19 +02:00
evgeny
08865b2909
tests: allocate UDP proxy and NAT transport ports automatically
2026-10-10 15:56:28 +02:00
evgeny
0af9a3092b
tests: allocate ports independently in every STCP scenario
2026-10-10 15:55:28 +02:00
evgeny
dc0dbbf720
headless: expose OS-assigned control and audio listener ports
2026-10-10 15:51:04 +02:00
evgeny
91909fbb1e
tests: use independent ports for radio and call topologies
2026-10-10 15:45:38 +02:00
evgeny
ce8144b79e
tests: assign independent ports to BGP topology listeners
2026-10-10 15:44:00 +02:00
evgeny
0c09252dd6
tests: assign Merkle and DM media fixture ports dynamically
2026-10-10 15:40:34 +02:00
evgeny
98529b3268
tests: allocate STCP traffic and link listener ports automatically
2026-10-10 15:32:47 +02:00
evgeny
0dcecdd7b2
tests: remove PID ports and allocate SOCKS listeners dynamically
2026-10-10 15:30:48 +02:00
evgeny
44522027e7
tests: use ephemeral ports for ETCP traffic fixtures
2026-10-10 15:29:46 +02:00
evgeny
3f4a67f552
tests: assign NAT and route ping ports through bind zero
2026-10-10 15:28:48 +02:00
evgeny
4afd5df55f
tests: use bound ephemeral ports for ETCP and IPv6 peers
2026-10-10 15:27:47 +02:00
evgeny
991fc0a2c1
transport: publish ports assigned by the operating system
2026-10-10 15:26:08 +02:00
evgeny
4908cb7e19
Document shared FreeBSD builds and locate Bash through PATH
2026-10-10 15:25:58 +02:00
evgeny
c16334d551
Run build regressions with native FreeBSD tools and Windows binaries
2026-10-10 15:25:58 +02:00
evgeny
e0ba199e20
Share incremental builds on FreeBSD and select portable hardening flags
2026-10-10 15:25:58 +02:00
evgeny
d6c6a4d111
Use verified incremental builds instead of mandatory clean
2026-10-10 15:25:58 +02:00
evgeny
62a853e73c
Detect compiler path changes and verify safe configuration cleanup
2026-10-10 15:25:58 +02:00
evgeny
ff2eae2efb
Verify build mode transitions and propagate GUI job counts
2026-10-10 15:25:58 +02:00
evgeny
ff9d205d5b
Track build configuration and preserve incremental header dependencies
2026-10-10 15:25:58 +02:00
evgeny
6437665a53
tests: accelerate session, recovery and SOCKS retry timers
2026-10-10 15:11:26 +02:00
evgeny
aec9536522
tests: await proxy server readiness and retain worker failures
2026-10-10 15:10:09 +02:00
evgeny
f843b553c7
tests: accelerate proxy regression event waits
2026-10-10 15:08:47 +02:00
evgeny
d9c8e006b5
tests: accelerate standby phases and group connection retries
2026-10-10 15:06:56 +02:00
evgeny
361c7df812
tests: accelerate radio timers and run it among short checks
2026-10-10 14:55:53 +02:00
evgeny
a1fdca09f6
tests: accelerate Merkle setup and drain waits
2026-10-10 14:54:39 +02:00
evgeny
7506da41f0
tests: keep Merkle stress records changing and verify final versions
2026-10-10 14:53:37 +02:00
evgeny
17777c540b
tests: finish CPU load phases after a complete real window
2026-10-10 14:51:59 +02:00
evgeny
91081fc5c7
tests: accelerate autosocket waits and payload verification
2026-10-10 14:49:42 +02:00
evgeny
3eee716b50
tests: run short checks before slow and load scenarios
2026-10-10 14:22:06 +02:00
evgeny
0448a84286
tests: replace slow disk sleep with six-second clock-driven gate
2026-10-10 14:19:27 +02:00
evgeny
3baaa42c82
tests: accelerate BGP waits and require single-link DOWN and UP
2026-10-10 14:17:21 +02:00
evgeny
39594ad800
tests: accelerate DM retries and TTL with synchronized clocks
2026-10-10 14:14:03 +02:00
evgeny
414d40c00c
tests: accelerate JOIN waits and verify timeout boundaries
2026-10-10 13:55:04 +02:00
evgeny
cb32aa5aac
tests: accelerate connection manager phase and recovery waits
2026-10-10 13:52:27 +02:00
evgeny
069ecc900a
tests: accelerate router fault timers with real I/O clock driver
2026-10-10 13:46:50 +02:00
evgeny
ec66a7e4f5
tests: detect avatar BUSY ACK repeats with ACK counter
2026-10-10 13:29:47 +02:00
evgeny
2a9a92cc34
tests: finish wrong-key STCP case when handshake closes
2026-10-10 13:27:27 +02:00
evgeny
9b879d6ced
tests: wait for avatar backpressure and shorten NCD timeout fixture
2026-10-10 13:25:46 +02:00
evgeny
5805edc3dc
tests: shorten mock NTP and DNS shutdown waits
2026-10-10 13:25:04 +02:00
evgeny
3f9edc88c4
Make privilege, port and fd handling reliable in tests
2026-10-10 13:09:45 +02:00
evgeny
5a9e61164b
Measure uasync CPU load and display it in desktop and Android GUIs
...
Sample thread CPU usage without waking idle loops, expose a one-second moving average, and refresh compact GUI indicators at 3 Hz while visible on Android. Add load and bridge regression coverage, streaming notes, and task list cleanup.
2026-10-10 12:31:13 +02:00
evgeny
8bd6e4fb2d
Remove obsolete trailing space after channel moc cleanup
2026-10-10 11:18:59 +02:00
evgeny
e8a4b8dd4e
Translate the group header menu labels
2026-10-10 11:18:34 +02:00
evgeny
61f2ca7a88
Remove group row icons and give titles the freed space
2026-10-10 11:18:17 +02:00
evgeny
bfdd9cde15
Remove inline action hit targets from channel rows
2026-10-10 11:17:32 +02:00
evgeny
b14bfa95c2
Collect group actions in the conversation header menu
2026-10-10 11:17:00 +02:00
evgeny
42efbbc7da
Remove the file manager button from the channel footer
2026-10-10 11:07:02 +02:00
evgeny
8f908c320a
Open own group files from the conversation header
2026-10-10 11:06:45 +02:00
evgeny
5ed813fe06
Record recursive removal checks and the receipt cache limit
2026-10-10 11:03:44 +02:00
evgeny
7eefb499f3
Cover recursive confirmation and storage receipt exhaustion
2026-10-10 11:02:31 +02:00
evgeny
b4a9339459
Test recursive removal against real disk storage
2026-10-10 10:59:58 +02:00
evgeny
afc54eae00
Confirm recursive deletion and localize removal progress
2026-10-10 10:58:45 +02:00
evgeny
7244f22722
Remove directory trees after a complete preflight scan
2026-10-10 10:58:25 +02:00
evgeny
973c734226
Defer closing until batch cancellation and cleanup finish
2026-10-10 09:38:35 +02:00
evgeny
4a6765c49a
Wait for the file manager to finish copying every entry
2026-10-10 09:37:44 +02:00
evgeny
db91bccda3
Keep deferred drag results owned by their operation
2026-10-10 01:58:13 +02:00
evgeny
11fc932905
Restore keyboard focus and test changed-tree cleanup
2026-10-10 01:57:28 +02:00
evgeny
f7ff2df9a7
Place the native drag fixture beside the file manager
2026-10-10 01:43:06 +02:00
evgeny
3a6d075cbb
Add an opt-in native file manager drag integration test
2026-10-10 01:42:42 +02:00
evgeny
f0e68edad1
Translate batch file and directory operations
2026-10-10 01:41:42 +02:00
evgeny
1ed467d236
Validate batch snapshots and freeze deletion confirmation context
2026-10-10 01:41:42 +02:00
evgeny
8785fc358a
Test range selection and recursive file tree transfers
2026-10-10 01:40:39 +02:00
evgeny
400b9fa93c
Adapt browser regressions to asynchronous batch completion
2026-10-10 01:39:43 +02:00
evgeny
2e9babe73b
Build batch transfers and wait for cancellation on close
2026-10-10 01:38:54 +02:00
evgeny
7bfa75b32c
Connect multi-selection and folder transfers to the browser
2026-10-10 01:38:28 +02:00
evgeny
884eb4b412
Add cancellable file tree batch operations
2026-10-10 01:37:14 +02:00
evgeny
ac17ffda54
Honor the expected file version before downloading
2026-10-10 01:35:28 +02:00
evgeny
468aeeebc7
Test Android file wire formats and nonempty directory status
2026-10-10 01:27:34 +02:00
evgeny
11b6f78924
Share exported files safely and show background transfer progress
2026-10-10 01:27:34 +02:00
evgeny
a630401d10
Localize file operations and refine transfer notifications
2026-10-10 01:27:17 +02:00
evgeny
4abfbc3e9c
Open Android file browser from channels and members
2026-10-10 01:27:17 +02:00
evgeny
6a3def3c9a
Add a mobile member file browser with safe file actions
2026-10-10 01:27:17 +02:00
evgeny
e97885eb22
Expose member file commands through Android JNI
2026-10-10 01:15:32 +02:00
evgeny
51e7f821e9
Own Android file transfers and core activity independently of UI
2026-10-10 01:15:32 +02:00
evgeny
6e5f86b2b5
Share Android file codecs and request IDs with avatars
2026-10-10 01:11:55 +02:00
evgeny
e0a287d797
Report nonempty member file directories precisely
2026-10-10 01:11:54 +02:00
evgeny
39946e3cd9
Reactivate offscreen browser after confirmation dialogs
2026-10-10 00:45:49 +02:00
evgeny
eb9d379efc
Wait for modal focus restoration in file shortcut test
2026-10-10 00:44:42 +02:00
evgeny
93a6277ca4
Keep file navigation focused and open entries with Enter
2026-10-10 00:41:18 +02:00
evgeny
043257cabf
Add Delete and Backspace shortcuts to group files
2026-10-10 00:40:25 +02:00
evgeny
6d8c28f228
Verify delayed file MIME across success failure and cancellation
2026-10-10 00:22:22 +02:00
evgeny
c61a6da884
Translate file manager export actions and status
2026-10-10 00:20:28 +02:00
evgeny
9640a18b03
Test file manager copy and deferred drag completion
2026-10-10 00:20:27 +02:00
evgeny
4049a3f884
Deliver remote file drags in one gesture using deferred MIME
2026-10-10 00:19:08 +02:00
evgeny
e8ca27b590
Export group files through the clipboard and native file drags
2026-10-10 00:16:46 +02:00
evgeny
7d6b45ba5d
Accept file drops inside the Group files window
2026-10-10 00:13:33 +02:00
evgeny
04e8a18c9a
Translate file drop and upload queue messages
2026-10-09 23:32:47 +02:00
evgeny
17f5c0ecbd
Cover footer file drops and upload queue lifecycle
2026-10-09 23:32:29 +02:00
evgeny
d4cef49f88
Validate dropped file sources outside the GUI thread
2026-10-09 23:31:27 +02:00
evgeny
49ee66d49c
Accept file drops across the channel footer
2026-10-09 23:30:33 +02:00
evgeny
b631c4ed72
Add sequential member file uploads with destination locking
2026-10-09 23:29:56 +02:00
evgeny
91a3a621d0
Translate the own files button tooltip
2026-10-09 22:58:05 +02:00
evgeny
2e4ed0347b
Add own files button to the channel list footer
2026-10-09 22:58:01 +02:00
evgeny
7f3247bfcc
radio: add activation controls, live VAD meters and signal diagnostics
2026-10-09 16:11:11 +02:00
evgeny
fddbba217d
android: add level-triggered radio and inline activation settings
2026-10-09 00:06:55 +02:00
evgeny
44af542f61
chatgui: add radio activation by signal level with hysteresis
2026-10-08 17:53:16 +02:00
evgeny
2845270016
Add diagnostics for stalled PTT shortcut recording
2026-10-08 15:00:25 +02:00
evgeny
d149bad5fc
radio: keep drain diagnostics at burst boundaries and test queued PCM
2026-10-08 14:33:09 +02:00
evgeny
f054f9c8d9
test: cover radio receive guard timing and playback progress
2026-10-08 14:30:21 +02:00
evgeny
a1e8bfe80a
android: keep radio VAD blocked until AudioTrack plays the receive tail
2026-10-08 14:28:08 +02:00
evgeny
06c35839ef
chatgui: report radio output progress with device timing
2026-10-08 14:27:05 +02:00
evgeny
fe7aabb44a
radio: gate automatic VAD through receive and playback drain
2026-10-08 14:27:05 +02:00
evgeny
c7c47d5ca3
android: use larger adaptive launcher icon with full background
2026-10-08 10:39:40 +02:00
evgeny
dff2da0522
test: exercise Android replies through native bridge and media workers
2026-10-08 10:29:30 +02:00
evgeny
1ab51f3da1
android: translate channel reply actions and errors
2026-10-08 10:29:30 +02:00
evgeny
161af93347
android: connect channel reply navigation and camera context
2026-10-08 10:29:30 +02:00
evgeny
f72fb177ba
android: add reply menu and preserve drafts until submission completes
2026-10-08 10:29:30 +02:00
evgeny
30102f5f42
android: render reply quotes and support message long press
2026-10-08 10:29:30 +02:00
evgeny
d28b7062d2
android: track saved replies and navigate original messages
2026-10-08 10:29:30 +02:00
evgeny
22e3c1b0a5
android: model channel reply drafts and native message references
2026-10-08 10:29:29 +02:00
evgeny
368f629948
android: expose reply submission and anchored history in bridge
2026-10-08 10:29:29 +02:00
evgeny
5f79d00f7a
android: pass reply context through video preparation
2026-10-08 10:29:29 +02:00
evgeny
7aada92be9
android: preserve reply context while recording voice
2026-10-08 10:29:29 +02:00
evgeny
721160fbd9
android: carry channel reply references through file and photo sends
2026-10-08 10:29:08 +02:00
evgeny
4463f8870a
Keep the viewed reply target stable until returning to latest messages
2026-10-08 00:50:17 +02:00
evgeny
fde359b4af
Set speaking state in the radio button color test fixture
2026-10-08 00:38:04 +02:00
evgeny
ba0b21b999
Preserve newer composer edits when a reply finishes sending
2026-10-08 00:36:52 +02:00
evgeny
adf1e9507a
Fill reply history windows at boundaries and preserve read position
2026-10-08 00:36:52 +02:00
evgeny
3ea830fa00
Verify signed reply references across two peers over real PUSH
2026-10-08 00:32:06 +02:00
evgeny
ec0666ca2a
Keep quote activation separate from text selection gestures
2026-10-08 00:31:27 +02:00
evgeny
484d6f2fa4
Test signed replies, media completion and old-history lookup
2026-10-08 00:31:13 +02:00
evgeny
a9e407a39f
Test reply draft acknowledgements and quote clicks across content types
2026-10-08 00:30:08 +02:00
evgeny
c6390575ad
Translate channel reply actions and unavailable-message states
2026-10-08 00:30:07 +02:00
evgeny
7773a0c648
Keep return-to-latest action available in historical message windows
2026-10-08 00:27:02 +02:00
evgeny
38257a7f54
Connect reply sending, quote resolution and history navigation
2026-10-08 00:27:02 +02:00
evgeny
49e898b6f3
Deliver channel submission acknowledgements to the desktop composer
2026-10-08 00:24:35 +02:00
evgeny
562901c84f
Add reply composer with cancellation and correlated send results
2026-10-08 00:24:20 +02:00
evgeny
eebef4d14f
Render clickable compact replies for text and media messages
2026-10-08 00:23:16 +02:00
evgeny
68df26d4a5
Read reply references and bounded history around message IDs
2026-10-08 00:21:58 +02:00
evgeny
e811ac395a
Preserve channel reply context through attachment preparation
2026-10-08 00:20:48 +02:00
evgeny
68037b25a5
Store signed replies by message ID and confirm channel submissions
2026-10-08 00:20:48 +02:00
evgeny
99e9b1ae85
Define channel reply references and submission result events
2026-10-08 00:19:35 +02:00
evgeny
efebf8c5e8
Fix settings drafts, enlarge avatars, and show desktop version
2026-10-08 00:04:41 +02:00
evgeny
f408abcf4e
android: move advanced settings into a developer tab
2026-10-07 23:50:36 +02:00
evgeny
3aa0cd4c06
tests: add standalone Merkle sync reconnect and triangle stress test
2026-10-07 23:50:02 +02:00
evgeny
34a151e4cb
chatgui: translate PTT latch and release hints
2026-10-07 21:44:14 +02:00
evgeny
e4a84fd997
chatgui: verify latched PTT ownership and channel reset
2026-10-07 21:44:13 +02:00
evgeny
37485820b5
chatgui: latch radio PTT on double click and release on next press
2026-10-07 21:42:40 +02:00
evgeny
653853588a
logging: preserve system diagnostics and inherit Android debug level
2026-10-07 21:21:33 +02:00
evgeny
1bb885fd11
logging: explain failed probes and RTT persistence errors
2026-10-07 21:15:39 +02:00
evgeny
7eb6d6ee68
logging: move socket mechanics and periodic probe decisions to trace
2026-10-07 21:14:38 +02:00
evgeny
15d460ee7c
logging: explain BGP readiness, route selection and peer removal
2026-10-07 21:13:53 +02:00
evgeny
a74a62079e
logging: include REALITY handshake stage in connection failures
2026-10-07 21:11:34 +02:00
evgeny
6d54a7c102
logging: distinguish STCP probes from data link lifecycle
2026-10-07 21:11:12 +02:00
evgeny
adc8b2a670
logging: describe STCP state and endpoint on timeout and close
2026-10-07 21:10:29 +02:00
evgeny
b16a4995b7
logging: quiet routine audio and route polling, report audio recovery
2026-10-07 21:09:46 +02:00
evgeny
e85a8c8310
logging: scope member file polling and worker traces to media
2026-10-07 21:09:27 +02:00
evgeny
f3b1300628
Record Android radio speaker rollout and headless build issue
2026-10-07 19:35:46 +02:00
evgeny
2c407540a0
Test Android radio talk lifecycle and translate speaker status
2026-10-07 19:33:53 +02:00
evgeny
e95fc090df
Render Android speaker waves independently of local radio mute
2026-10-07 19:33:53 +02:00
evgeny
bcda9b82f4
Track Android radio speakers and actual transmission by group
2026-10-07 19:33:53 +02:00
evgeny
d5174262d8
Show speaking waves for locally muted radio members
2026-10-07 19:16:15 +02:00
evgeny
61818572cc
Verify speaker timeout and record completed radio indication
2026-10-07 19:10:49 +02:00
evgeny
6496448569
Verify radio speaker icons through the bridge and actual PTT/VAD
2026-10-07 19:03:48 +02:00
evgeny
70fd5c077f
Translate radio speaker status tooltips
2026-10-07 19:01:53 +02:00
evgeny
e61fc8e392
Show silent, speaking and muted radio speakers in member rows
2026-10-07 19:01:53 +02:00
evgeny
5cbab70035
Track radio speakers independently of member list refreshes
2026-10-07 19:01:13 +02:00
evgeny
376695e410
Avoid Windows poll macro collision in activity monitor
2026-10-07 18:35:11 +02:00
evgeny
c3468987cb
Handle poll questions rendered as a standalone emoji
2026-10-07 17:33:26 +02:00
evgeny
b6d8e822b4
Verify poll clicks preserve selection and message controls
2026-10-07 17:18:40 +02:00
evgeny
ddcc36aa26
Open desktop chat polls with a single left click
2026-10-07 17:11:43 +02:00
evgeny
7e88d15e1d
Validate unmanaged notification overlay independently of EWMH
2026-10-07 16:58:40 +02:00
evgeny
4a7f37b920
Use independent X11 notification overlay across desktops
2026-10-07 16:57:01 +02:00
evgeny
bd163fffff
Reapply all-desktop scope after notification mapping
2026-10-07 16:50:12 +02:00
evgeny
e96e6b7751
Make desktop scope test independent of current workspace changes
2026-10-07 16:43:52 +02:00
evgeny
0d618964a7
Test popup remapping and keep headless input tests isolated
2026-10-07 16:38:33 +02:00
evgeny
d62fae9e88
Verify notification desktop scope with a real window manager
2026-10-07 16:38:33 +02:00
evgeny
247479e411
Show Linux message notifications on all X11 desktops
2026-10-07 16:35:29 +02:00
evgeny
1108c773dc
Own the independent popup and handle all keyboard mouse input
2026-10-07 16:05:34 +02:00
evgeny
bc42df12f5
Keep notification independent of main window minimization
2026-10-07 16:05:33 +02:00
evgeny
2caa653f02
Trace cancellation of pending desktop activity queries
2026-10-07 16:02:10 +02:00
evgeny
16a9094770
Test live message metadata and document notification limits
2026-10-07 16:01:22 +02:00
evgeny
c6cb3f0e8e
Test notification timing, replacement, and activity fallbacks
2026-10-07 15:58:10 +02:00
evgeny
1da667b09e
Complete notification translation and activity watcher cleanup
2026-10-07 15:57:15 +02:00
evgeny
f2e35da1fe
Wire notification platform dependencies and event diagnostics
2026-10-07 15:55:39 +02:00
evgeny
33c98a014f
Notify about live incoming channel and direct messages
2026-10-07 15:54:25 +02:00
evgeny
261198ab47
Expose initial synchronization in channel message events
2026-10-07 15:53:39 +02:00
evgeny
77f2cdc34c
Add message popup that expires after first user activity
2026-10-07 15:52:54 +02:00
evgeny
40b8e1a740
Add desktop user activity monitoring with platform fallbacks
2026-10-07 15:51:43 +02:00
evgeny
3279aa86ce
Fix Windows system DLL detection in chatgui deployment
2026-10-07 14:07:32 +02:00
evgeny
e5d8c34514
Fix desktop uasync readiness for radio member mute requests
2026-10-07 13:49:06 +02:00
evgeny
7e19cbaf3a
Add local per-member radio mute controls on desktop and Android
2026-10-07 13:35:25 +02:00
evgeny
a069d11ef9
Protect REALITY STCP traffic with authenticated TLS-like records
2026-10-07 12:30:45 +02:00
evgeny
a49cf5434e
Add randomized ETCP padding and isolate STCP CTR streams per connection
2026-10-07 10:45:42 +02:00
evgeny
1f5b42845b
Document horizontal pickers and the signed single-reaction rule
2026-10-07 08:24:25 +02:00
evgeny
b1bf094bfd
Verify signed multi-reaction rejection and document the single-choice rule
2026-10-07 08:17:52 +02:00
evgeny
066fa8552d
Display the reaction picker as one horizontal row in both clients
2026-10-07 08:14:50 +02:00
evgeny
0f14abd6c8
Test single reaction replacement, cancellation and multi-emoji rejection
2026-10-07 08:12:32 +02:00
evgeny
a444f28134
Enforce one reaction per author and replace the previous emoji atomically
2026-10-07 08:12:32 +02:00
evgeny
87501a24fe
Document reactions inside the timestamp row and device validation state
2026-10-07 02:06:01 +02:00
evgeny
033c24881c
Verify reaction rows remain inside bubbles and grow with live updates
2026-10-07 02:00:13 +02:00
evgeny
3dbbe02f69
Keep desktop reactions and timestamp inside the bubble bottom row
2026-10-07 01:53:18 +02:00
evgeny
1f4266f8b1
Move Android reactions inside bubbles beside the timestamp
2026-10-07 01:45:43 +02:00
evgeny
2cf0f9c928
Document transparent reaction controls and verified desktop interactions
2026-10-07 01:35:13 +02:00
evgeny
aaa05e761e
Check reaction clicks against downloadable media and portable preview paths
2026-10-07 01:30:04 +02:00
evgeny
4f0870b961
Verify transparent reaction footer clicks across text and media layouts
2026-10-07 01:28:56 +02:00
evgeny
fc79fa7345
Keep message footer layout and click gesture states consistent
2026-10-07 01:27:04 +02:00
evgeny
f71e5531e0
Open reaction picker from desktop heart and toggle existing reactions
2026-10-07 01:22:34 +02:00
evgeny
00ca006d26
Render and hit-test reaction footer for every desktop message type
2026-10-07 01:21:52 +02:00
evgeny
29ee55d751
Enlarge desktop chat and member avatars
2026-10-07 01:18:31 +02:00
evgeny
aa58c7fd3d
Place transparent outline reaction heart below Android message bubbles
2026-10-07 01:16:33 +02:00
evgeny
f8d0acb38d
Record root certificate repair and pending SM device verification
2026-10-07 00:56:41 +02:00
evgeny
0218ea9ddd
Require channel signatures for root feedback authors and verify profile copies
2026-10-07 00:47:32 +02:00
evgeny
9299c95f10
Verify root formation and invitation certificate replication
2026-10-07 00:46:36 +02:00
evgeny
a9a65d53bf
Preserve invitation certificates and accept confirmed roots without profile changes
2026-10-07 00:44:50 +02:00
evgeny
7cddb47edc
Record verified SM and local history repair
2026-10-07 00:33:52 +02:00
evgeny
8cd54f9802
Verify restored schema constraints and legacy index fixture
2026-10-07 00:27:35 +02:00
evgeny
a014d518bf
Test atomic history schema repair and preserved message data
2026-10-07 00:26:59 +02:00
evgeny
2f5a49b011
Repair existing chat history tables with stable message IDs
2026-10-07 00:25:11 +02:00
evgeny
918a3cc061
Merge chat polls and reactions into master
2026-10-06 23:08:07 +02:00
evgeny
1f026baf45
Show a circular crop preview in the desktop avatar editor
2026-10-06 23:05:21 +02:00
evgeny
a8c81f7e2b
Record verified poll implementation and completed checks
2026-10-06 22:56:31 +02:00
evgeny
255853dd76
Document complete poll protocol and verified recovery behavior
2026-10-06 22:47:06 +02:00
evgeny
587a980081
Document poll creation, voting and reaction commands
2026-10-06 22:43:13 +02:00
evgeny
bbc8b7693a
Restart member and feedback synchronization over existing transports
2026-10-06 22:40:47 +02:00
evgeny
9edc76e5eb
Fix Android avatar crop layout and circular preview
...
Keep the crop actions inside the available dialog window, show a circular mask, and clamp gesture limits to prevent float rounding crashes.
2026-10-06 22:37:04 +02:00
evgeny
7f4a1a66fa
Include transport state definitions in poll network regression
2026-10-06 22:33:52 +02:00
evgeny
0c16c2b09a
Wait for authenticated bootstrap transport before opening group requests
2026-10-06 22:33:35 +02:00
evgeny
67d1718450
Measure proxy test durations with a monotonic clock
2026-10-06 22:31:53 +02:00
evgeny
e86de44259
Test poll synchronization through three nodes and chat restart
2026-10-06 22:30:52 +02:00
evgeny
4966600d52
Localize desktop interaction errors
2026-10-06 22:21:13 +02:00
evgeny
6686dd1815
Translate desktop poll and reaction controls
2026-10-06 22:21:13 +02:00
evgeny
8dc7595e46
Preserve Android feedback state and supplementary Unicode characters
2026-10-06 22:15:44 +02:00
evgeny
1d05ff34c6
Connect Android poll screens and localize interaction controls
2026-10-06 22:15:04 +02:00
evgeny
44e0b7849e
Add Android poll voting, results and message reaction components
2026-10-06 22:14:29 +02:00
evgeny
0a615913eb
Drive Android feedback commands and live updates through the core thread
2026-10-06 21:45:59 +02:00
evgeny
8f8c8c267f
Add typed poll and reaction states to Android message models
2026-10-06 21:45:59 +02:00
evgeny
2c31e3fe03
Expose UTF-8 feedback commands and full message identities on Android
2026-10-06 21:43:21 +02:00
evgeny
39e94fdfd3
Add message reaction menus and distinguish own reactions
2026-10-06 21:39:14 +02:00
evgeny
cf869770fb
Add desktop poll creation, voting and live result dialogs
2026-10-06 21:39:13 +02:00
evgeny
b0933eb282
Keep avatar cache pruning tied to the originating Android account
2026-10-06 21:37:18 +02:00
evgeny
ebc96712a2
Track feedback by message identity in desktop UI
2026-10-06 21:36:43 +02:00
evgeny
c1048686d1
Route feedback state and command results to the desktop thread
2026-10-06 21:34:38 +02:00
evgeny
0a05a2095e
Read stable message identities and decode escaped text in desktop
2026-10-06 21:34:38 +02:00
evgeny
52f4628fe0
Bound avatar manifest sizes before numeric conversion
2026-10-06 21:34:15 +02:00
evgeny
e068fe5d3a
Test poll codecs, voting rules and delayed source messages
2026-10-06 21:31:20 +02:00
evgeny
da2c13dcf1
Add CLI poll creation, voting and emoji reaction commands
2026-10-06 21:26:37 +02:00
evgeny
f99a8c1da2
Expose polls and reactions through headless control safely
2026-10-06 21:26:37 +02:00
evgeny
ef476bf4e2
Use canonical reaction and answer payloads in feedback tests
2026-10-06 21:24:53 +02:00
evgeny
48d7f2b21b
Build poll modules and adapt media insertion callbacks
2026-10-06 21:24:53 +02:00
evgeny
17444b8c8a
Evaluate delayed answers after their source message arrives
2026-10-06 21:24:14 +02:00
evgeny
60b4870549
Pass stable identities to insertion callbacks and bound signed bodies
2026-10-06 21:24:13 +02:00
evgeny
865e4cda59
Log delayed answer validation and keep JSON percentages locale independent
2026-10-06 21:23:37 +02:00
evgeny
e6db9fef60
Validate feedback data and provide poll command snapshots
2026-10-06 21:23:37 +02:00
evgeny
0af35630d1
Expose full message data and stable identities in listings
2026-10-06 21:17:24 +02:00
evgeny
a4ca31f406
Return submitted message identity and encode JSON safely
2026-10-06 21:17:24 +02:00
evgeny
d0aa60fe1a
Define canonical poll, answer and reaction formats
2026-10-06 21:15:57 +02:00
evgeny
d40f58d79a
Add message identities and plan the remaining feedback work
2026-10-06 21:12:53 +02:00
evgeny
3e1cc8af85
Map avatar crop frames using full original dimensions on both clients
2026-10-06 21:10:24 +02:00
evgeny
8676893d59
Record feedback implementation milestone and remaining work
2026-10-06 20:17:48 +02:00
evgeny
04ff801531
Document Merkle v3 and signed feedback state contracts
2026-10-06 20:11:25 +02:00
evgeny
6437bf780b
Include feedback source in the core library source list
2026-10-06 20:09:48 +02:00
evgeny
4f4e63bb0b
Test feedback signatures, versions, cancellation and atomic pages
2026-10-06 20:08:53 +02:00
evgeny
f6cc3b6e53
Make feedback roots depend on signed state and validate rebuilt keys
2026-10-06 20:07:44 +02:00
evgeny
982e5a06ab
Integrate feedback tables with channel and sync lifecycle
2026-10-06 20:06:39 +02:00
evgeny
8121f93d2e
Build feedback model and expose committed state events
2026-10-06 20:06:38 +02:00
evgeny
641a8318a8
Add signed versioned feedback storage and Merkle adapter
2026-10-06 20:05:18 +02:00
evgeny
a0fbf51be0
Describe avatar object paths consistently
2026-10-06 20:04:40 +02:00
evgeny
17dd06221a
Log Android gallery selections and finish image gestures safely
2026-10-06 20:04:40 +02:00
evgeny
cdc5474279
Document avatar bundles, crop selection and original-image galleries
2026-10-06 20:02:45 +02:00
evgeny
cee3228e5f
Separate each Android gallery swipe from pinch and pan gestures
2026-10-06 20:02:45 +02:00
evgeny
864a250eea
Preserve input cursor when member page outputs alias it
2026-10-06 20:02:41 +02:00
evgeny
3f4df4233b
Keep member avatar drags separate from viewer clicks
2026-10-06 20:01:38 +02:00
evgeny
1f9dbd9dea
Open desktop message avatars only after a completed click
2026-10-06 20:01:38 +02:00
evgeny
7d69404532
Verify five centered previews while navigating six avatar originals
2026-10-06 20:00:58 +02:00
evgeny
49dc837df2
Correct all member dataset arguments in callers
2026-10-06 19:59:43 +02:00
evgeny
f0314ab51c
Test dataset isolation and colliding cursor prefixes
2026-10-06 19:59:00 +02:00
evgeny
3be5cdd365
Show Android preview loading states and retry failed neighbors
2026-10-06 19:58:37 +02:00
evgeny
96af98f063
Exercise avatar crop gestures, gallery navigation and EXIF originals
2026-10-06 19:58:36 +02:00
evgeny
f6bfd36a6c
Include dataset identity in Merkle diagnostics
2026-10-06 19:57:58 +02:00
evgeny
1350c95db6
Identify desktop crop controls for interaction checks
2026-10-06 19:57:32 +02:00
evgeny
bc7864466c
Offer retries for desktop avatar catalog and image failures
2026-10-06 19:57:32 +02:00
evgeny
fad96603a7
Display gallery loading and failure placeholders in the image viewer
2026-10-06 19:57:32 +02:00
evgeny
894b24698e
Update Merkle integration tests and channel index cleanup
2026-10-06 19:57:25 +02:00
evgeny
5e146f20bc
Adapt member sync and protocol tests to dataset cursors
2026-10-06 19:56:52 +02:00
evgeny
539bfd6db9
Extend Merkle sessions with datasets and full record cursors
2026-10-06 19:56:17 +02:00
evgeny
c36fd3bfc8
Remove obsolete Android PNG user-avatar preparation
2026-10-06 19:55:20 +02:00
evgeny
feccea21a5
Keep desktop crop workers owned until their dialog closes
2026-10-06 19:55:20 +02:00
evgeny
37b80b612b
Restore Android gallery selections and validate editor source formats
2026-10-06 19:55:20 +02:00
evgeny
5b4b17ae49
Keep selected Android originals while the catalog finishes loading
2026-10-06 19:51:54 +02:00
evgeny
43c300cba3
Release Android crop sources rejected after account changes
2026-10-06 19:51:53 +02:00
evgeny
cbe6da09ee
Translate desktop avatar editor and gallery controls
2026-10-06 19:51:53 +02:00
evgeny
27fd9ee62d
Share avatar metadata downloads and cancel closed desktop galleries
2026-10-06 19:48:24 +02:00
evgeny
6bd6ea540c
Cancel avatar transfers after their last Android viewer closes
2026-10-06 19:48:24 +02:00
evgeny
7e5b60aa10
Include WebP runtime dependencies and avatar test painter
2026-10-06 19:48:24 +02:00
evgeny
7d71b08def
Validate avatar object types and distinguish original downloads
2026-10-06 19:46:59 +02:00
evgeny
a221452cb6
Correct Kotlin types in avatar catalog and crop coordinates
2026-10-06 19:46:59 +02:00
evgeny
863441c418
Test Android avatar catalog pagination and updated member snapshots
2026-10-06 19:45:19 +02:00
evgeny
ab22277e7b
Test avatar originals, selected lossy crops and storage limits
2026-10-06 19:44:56 +02:00
evgeny
32eaf9df04
Translate Android avatar crop and empty-gallery states
2026-10-06 19:43:51 +02:00
evgeny
af6cd31e71
Open Android avatar galleries with originals and five previews
2026-10-06 19:43:27 +02:00
evgeny
87b8c6bd3a
Use exact image coordinates in the desktop crop editor
2026-10-06 19:42:22 +02:00
evgeny
5f3725b72f
Add Android avatar crop selection before publication
2026-10-06 19:42:22 +02:00
evgeny
d1080129d2
Publish complete Android avatar bundles after crop confirmation
2026-10-06 19:41:02 +02:00
evgeny
ea6b895df9
Load Android gallery objects and catalogs through the shared cache
2026-10-06 19:41:01 +02:00
evgeny
f27419165d
Preserve Android avatar originals and encode selected WebP crops
2026-10-06 19:38:40 +02:00
evgeny
6e9a50f2ec
Bridge Android avatar catalogs and per-object transfer limits
2026-10-06 19:37:45 +02:00
evgeny
07aa436380
Decode avatar manifests and paginated catalogs on Android
2026-10-06 19:37:45 +02:00
evgeny
c4c11ad813
Build avatar UI and deploy the desktop WebP codec
2026-10-06 19:36:35 +02:00
evgeny
fd8054bc7b
Open user avatar galleries from desktop member icons
2026-10-06 19:36:35 +02:00
evgeny
3a793e25b3
Open user avatar galleries from desktop messages
2026-10-06 19:36:34 +02:00
evgeny
9970b2235c
Show desktop avatar originals with five centered previews
2026-10-06 19:36:00 +02:00
evgeny
4134200b4e
Allow avatar galleries to display validated cached images
2026-10-06 19:35:59 +02:00
evgeny
ccae89fb60
Add desktop square crop editor before avatar upload
2026-10-06 19:35:59 +02:00
evgeny
1a936f33ef
Upload complete avatar bundles and page desktop galleries
2026-10-06 19:34:10 +02:00
evgeny
68fb29e385
Add avatar gallery sources and manifest-aware desktop cache
2026-10-06 19:33:24 +02:00
evgeny
f0cc198f72
Prepare avatar originals, WebP crops and hashed manifests
2026-10-06 19:32:22 +02:00
evgeny
17491082d4
Validate signed profile avatar manifest references
2026-10-06 19:29:42 +02:00
evgeny
c80e82d104
Define member avatar references as manifest objects
2026-10-06 19:29:37 +02:00
evgeny
50efddd5f0
Allow immutable avatar originals and manifests in storage
2026-10-06 19:29:17 +02:00
evgeny
40eafafe3d
chatgui: verify drag highlight cleanup and attachment file picker reuse
2026-10-06 19:11:12 +02:00
evgeny
348cd855b9
chatgui: detach file drop callbacks before composer child destruction
2026-10-06 19:06:37 +02:00
evgeny
a175129f93
chatgui: complete audio dependencies for composer integration tests
2026-10-06 19:04:31 +02:00
evgeny
9c7442544b
chatgui: add Qt integration tests for file drops and recipient changes
2026-10-06 19:02:04 +02:00
evgeny
cc8e47cfc8
chatgui: localize file drop hints and attachment rejection messages
2026-10-06 19:00:18 +02:00
evgeny
0279ed84a9
chatgui: stage dropped files through the attachment composer
2026-10-06 18:58:33 +02:00
evgeny
7b1143b9d4
android: hide download overlay on locally available photos
2026-10-06 17:57:36 +02:00
evgeny
27fb1426d9
android: cover decimal channel IDs from SM in avatar regression tests
2026-10-06 17:34:03 +02:00
evgeny
eae3ef5c32
android: parse decimal channel IDs for avatar requests and group keys
2026-10-06 17:32:43 +02:00
evgeny
b3c0a2fa7b
android: harden avatar cache reads and refresh current download sources
2026-10-06 16:39:26 +02:00
evgeny
15dbb6fe51
android: test avatar event framing, limits and member updates
2026-10-06 16:32:36 +02:00
evgeny
9c70eab075
android: cancel avatar operations before native teardown and bound image preparation
2026-10-06 16:30:54 +02:00
evgeny
15d0772a20
android: preserve avatar references in JSON refresh and live member snapshots
2026-10-06 16:29:06 +02:00
evgeny
57888f8d9e
android: display member avatars in conversations and member details
2026-10-06 16:27:35 +02:00
evgeny
c77066162a
android: show group icons and open properties from chat header
2026-10-06 16:25:51 +02:00
evgeny
b9d41d179d
android: add avatar editors and localized group properties dialog
2026-10-06 16:24:25 +02:00
evgeny
73019cfd83
android: add shared avatar components and guard picker account identity
2026-10-06 16:22:24 +02:00
evgeny
22aa5d47a5
android: load and cache user and signed group avatars asynchronously
2026-10-06 16:20:45 +02:00
evgeny
8efe075679
android: add asynchronous avatar JNI operations and wire models
2026-10-06 16:15:00 +02:00
evgeny
714370a1a2
Verify direct deployment after a failed Qt deployment tool
2026-10-06 15:53:03 +02:00
evgeny
f316554ca3
Retain deployment diagnostics and model executable runtime imports
2026-10-06 15:48:10 +02:00
evgeny
e7be94a3d2
Test Qt runtime deployment and missing plugin dependencies
2026-10-06 15:46:46 +02:00
evgeny
c4217a8aa6
Verify runtime dependencies and deploy matching Qt plugins every build
2026-10-06 15:44:58 +02:00
evgeny
3d277349be
Deploy the selected Qt version and recognize Windows system DLLs
2026-10-06 15:40:54 +02:00
evgeny
c81e8e5025
Link Winsock after uasync and include socket headers first
2026-10-06 15:11:16 +02:00
evgeny
e9e38ee029
Guard the file protocol against the Windows menu macro
2026-10-06 14:55:31 +02:00
evgeny
ed3815a406
Use the portable remove command in the browser and storage tests
2026-10-06 14:54:23 +02:00
evgeny
fe03feaf4a
Avoid the Win32 MF_REMOVE macro in the file protocol
2026-10-06 14:54:23 +02:00
evgeny
e8365fdec6
Upgrade group avatar columns before notifying database readiness
2026-10-06 14:04:49 +02:00
evgeny
5c772aeecf
Preserve channel identity in member adapter fixtures
2026-10-06 14:04:49 +02:00
evgeny
2bcba58131
Reject group avatar commands outside a running chat service
2026-10-06 13:59:17 +02:00
evgeny
b6a5f98d41
Document 16 KiB signed group avatars and 4 KiB wire blocks
2026-10-06 13:57:12 +02:00
evgeny
d0173e1b73
Test atomic schema upgrades and report precise avatar validation errors
2026-10-06 13:57:12 +02:00
evgeny
f8d95fcb25
Initialize avatar peers from the current group session epoch
2026-10-06 13:52:19 +02:00
evgeny
35ce2a2b93
Check group avatar encoding, rendering and key-based controls
2026-10-06 13:51:18 +02:00
evgeny
3b47a56076
Trace group avatar assembly resets and block mismatches
2026-10-06 13:49:54 +02:00
evgeny
46f4ce7091
Test real group avatar block delivery, permissions and recovery
2026-10-06 13:48:14 +02:00
evgeny
4062ecdfb1
Display group avatars and restrict editing to group key holders
2026-10-06 13:44:49 +02:00
evgeny
8e3ff6fd81
Deliver group avatar publication results through the GUI bridge
2026-10-06 13:44:49 +02:00
evgeny
2f9dd6a27b
Decode and prepare bounded group avatar images outside the GUI thread
2026-10-06 13:43:49 +02:00
evgeny
a816b842e5
Read group avatar metadata separately from image bytes
2026-10-06 13:43:49 +02:00
evgeny
56897368b3
Own group avatar synchronization in the chat service lifecycle
2026-10-06 13:41:55 +02:00
evgeny
f67f090b2a
Synchronize signed group avatars in bounded 4 KiB blocks
2026-10-06 13:41:29 +02:00
evgeny
e3745f279e
Store signed group avatars without replacing channel keys
2026-10-06 13:37:18 +02:00
evgeny
8173677475
Avoid refreshing avatar controls on unchanged member telemetry
2026-10-06 13:04:57 +02:00
evgeny
74bd4eed7c
Keep outdated avatar transfers from delaying new references
2026-10-06 13:03:53 +02:00
evgeny
ae461e746f
Update Android consumers for extended member snapshots
2026-10-06 13:02:01 +02:00
evgeny
8f83167c0f
Forward full join profiles and document canonical profile lengths
2026-10-06 12:58:00 +02:00
evgeny
6d3187db57
Keep profile controls consistent with the saved avatar server
2026-10-06 12:56:20 +02:00
evgeny
5276cd0fa0
Simplify profile updates and report database read failures
2026-10-06 12:54:44 +02:00
evgeny
80c81502fb
Protect avatar paths across platforms and initialize join fixture nodes
2026-10-06 12:53:05 +02:00
evgeny
9bfdf3ea41
Allow avatar replacement alongside downloads and correct join fixtures
2026-10-06 12:51:22 +02:00
evgeny
dc156c7f2b
Test bounded downloads and late completion after avatar replacement
2026-10-06 12:49:26 +02:00
evgeny
d946a1b93a
Finalize unsigned initial profiles before channel bootstrap
2026-10-06 12:48:20 +02:00
evgeny
cebd138190
Expose profile diagnostics in verbose join integration runs
2026-10-06 12:47:20 +02:00
evgeny
8b327a3f27
Bound upload cache growth and reject stale transfer completions
2026-10-06 12:46:32 +02:00
evgeny
972910c763
Verify profile signatures survive avatar and display name updates
2026-10-06 12:45:45 +02:00
evgeny
9842de7ab7
Document avatar storage, profile exchange and client caching
2026-10-06 12:45:13 +02:00
evgeny
c04f51d424
Use bounded 16-bit profile lengths in join member records
2026-10-06 12:44:18 +02:00
evgeny
76c02012eb
Preserve complete signed profiles in channel bootstrap messages
2026-10-06 12:44:18 +02:00
evgeny
c0a4bc7d89
Persist the desired avatar reference atomically
2026-10-06 12:43:11 +02:00
evgeny
9279ded7f3
Read complete signed profiles and escape initial display names
2026-10-06 12:43:11 +02:00
evgeny
3e1641aaf0
Persist avatar removal intent and prioritize profile changes
2026-10-06 12:41:05 +02:00
evgeny
f2d2e6be8f
Test avatar immutability, hash validation and quota accounting
2026-10-06 12:40:07 +02:00
evgeny
405755f06a
Reuse shared channel avatars in direct message conversations
2026-10-06 12:40:07 +02:00
evgeny
b8ddf0f52d
Translate avatar profile controls and operation statuses
2026-10-06 12:38:51 +02:00
evgeny
e642551dfe
Expose signed storage roles independently of route priority
2026-10-06 12:38:11 +02:00
evgeny
2fe5f34c5c
Trace avatar discovery and profile events for integration checks
2026-10-06 12:37:25 +02:00
evgeny
8fb9129300
Verify large signed profiles alongside full owner records
2026-10-06 12:36:35 +02:00
evgeny
eceb69c58e
Test avatar publication, channel replication and persistent cache
2026-10-06 12:35:46 +02:00
evgeny
7582509792
Protect pending avatar uploads while bounding disk cache retention
2026-10-06 12:35:45 +02:00
evgeny
1988afa84d
Notify profile changes with actual member properties
2026-10-06 12:33:26 +02:00
evgeny
247e3a2efe
Add avatar upload, preview and removal to profile settings
2026-10-06 12:33:00 +02:00
evgeny
694ed8e263
Display cached user avatars in member lists and chat messages
2026-10-06 12:32:33 +02:00
evgeny
78bed5efe4
Route avatar events alongside file browser events in ChatGUI
2026-10-06 12:32:02 +02:00
evgeny
8ae45e9e39
Manage avatar replication, background downloads and shared cache
2026-10-06 12:31:16 +02:00
evgeny
f91251be14
Add bounded persistent avatar cache and image normalization
2026-10-06 12:28:59 +02:00
evgeny
e8a3d5fa16
Bound avatar transfers and enforce immutable hashed uploads
2026-10-06 12:27:32 +02:00
evgeny
cbb1a03ccd
Define canonical avatar names and size limits
2026-10-06 12:27:32 +02:00
evgeny
61ef23b885
Include avatar references in member snapshots and change events
2026-10-06 12:27:07 +02:00
evgeny
4fbb1dafe1
Preserve profile attributes and publish signed avatar references
2026-10-06 12:26:38 +02:00
evgeny
8029b6e3f5
Extend signed member profiles to 1024 bytes
2026-10-06 12:25:21 +02:00
evgeny
02bd10b005
Document incremental object counts and quota protocol version 4
2026-10-06 11:36:30 +02:00
evgeny
9a06d19984
Test incremental counts, empty replacements and startup-only scans
2026-10-06 11:33:57 +02:00
evgeny
e6bf925a94
Translate file and directory statistics in the quota display
2026-10-06 11:29:43 +02:00
evgeny
64d46cdef0
Display file and directory totals in client quota snapshots
2026-10-06 11:29:43 +02:00
evgeny
d1034cb4ea
Maintain file and directory statistics incrementally per user
2026-10-06 11:25:18 +02:00
evgeny
c8236373b1
Extend quota snapshots with file and directory counts
2026-10-06 11:25:18 +02:00
evgeny
e76dc6cb82
Report actual directory creation separately from durability errors
2026-10-06 11:25:18 +02:00
evgeny
69f04dec87
Document per-user quotas and the client quota query
2026-10-06 00:29:28 +02:00
evgeny
092e3e3cdc
Validate quota scan failures and deny unauthorized quota queries
2026-10-06 00:29:28 +02:00
evgeny
fb9e7c3351
Translate quota display and reservation details
2026-10-06 00:25:07 +02:00
evgeny
db6acf8662
Test quota display, stale responses and startup directory retries
2026-10-06 00:25:07 +02:00
evgeny
594017ba5f
Test user quota isolation, reservations, restarts and wire queries
2026-10-06 00:22:17 +02:00
evgeny
4fdecb697b
Show live user storage quota in the member file browser
2026-10-06 00:18:00 +02:00
evgeny
359a327ec4
Enforce per-user reservations and initialize storage at startup
2026-10-06 00:16:20 +02:00
evgeny
3b641a2423
Add the file quota query and per-user quota configuration
2026-10-06 00:14:03 +02:00
evgeny
3354c0b374
Initialize per-user file quota accounts from the storage tree
2026-10-06 00:11:21 +02:00
evgeny
25e2ffeea7
Stream member files with router backpressure and parallel transfer handles
2026-10-05 23:36:49 +02:00
evgeny
f7e1752fc2
Document focused member file debug tracing
2026-10-05 21:52:12 +02:00
evgeny
977748b16c
Expose fork ownership errors in file debug traces
2026-10-05 21:43:44 +02:00
evgeny
c259a7330b
Trace file router sessions and crypto decisions in debug
2026-10-05 21:41:46 +02:00
evgeny
0706ccce8a
Trace browser state, transfer I/O and daemon PID
2026-10-05 21:36:43 +02:00
evgeny
aca10e8268
Trace file bridge callbacks and use scoped VAD test logs
2026-10-05 21:34:39 +02:00
evgeny
e913a27f0c
Trace file storage and worker lifecycle in debug
2026-10-05 21:33:04 +02:00
evgeny
8982bb034e
Move legacy sound and attachment errors to media
2026-10-05 21:30:37 +02:00
evgeny
0773a82342
Keep debug focused on file browser event delivery
2026-10-05 21:30:01 +02:00
evgeny
b771e95997
Clear legacy GUI bridge and list messages from debug
2026-10-05 21:28:45 +02:00
evgeny
5b78ec04f6
Move old radio and attachment diagnostics out of debug
2026-10-05 21:26:09 +02:00
evgeny
5dea9394bf
Trace member file requests in debug category
2026-10-05 21:25:02 +02:00
evgeny
5d1b8d26e7
Daemonize before creating core workers
2026-10-05 21:19:19 +02:00
evgeny
78a655bb05
Add asynchronous member file storage and desktop browser
2026-10-05 18:44:58 +02:00
evgeny
27d93ecaf9
Add English and Russian ChatGUI interface translations
2026-10-05 16:55:43 +02:00
evgeny
972c6b7f0a
Raise rlottie shape budget and log truncated animations
2026-10-05 16:48:00 +02:00
evgeny
7423133229
Build bundled rlottie automatically before Windows ChatGUI
2026-10-05 14:41:03 +02:00
evgeny
5e309c27ca
Vendor rlottie sources with CMake and MinGW build adjustments
2026-10-05 14:31:35 +02:00
evgeny
8feb7902b9
Search local rlottie build for its CMake package configuration
2026-10-05 14:15:25 +02:00
evgeny
bba44fbe11
Always copy rlottie DLL during ChatGUI runtime deployment
2026-10-05 13:55:43 +02:00
evgeny
bc6d372064
Treat imagehlp and bcryptprimitives as Windows system DLLs
2026-10-05 13:43:57 +02:00
evgeny
e4c591e1e6
Disable ZXing size optimization for MinGW GCC string link issue
2026-10-05 13:38:16 +02:00
evgeny
05064f7f3d
Refresh compiler runtime DLLs before Windows ChatGUI builds
2026-10-05 13:22:16 +02:00
evgeny
3cfa9f8da1
Compare cc1 startup across directories and inspect runtime DLLs
2026-10-05 13:12:11 +02:00
evgeny
586f62fd0a
Diagnose Opus bands compilation and replay native Ninja command
2026-10-05 13:07:55 +02:00
evgeny
2c5293bff0
Extend compiler diagnostics with standalone and CMake Opus checks
2026-10-05 13:02:08 +02:00
evgeny
a154bacffb
Add MSYS2 UCRT64 compiler diagnostic scripts
2026-10-05 12:58:40 +02:00
evgeny
9aaac3cb20
Exclude POSIX tcp_io test scenarios from Windows compilation
2026-10-05 12:27:15 +02:00
evgeny
577d1bd72f
Handle delayed TCP delivery in etcpmon regression checks
2026-10-05 12:22:39 +02:00
evgeny
d62916edf0
Validate etcpmon response strings and close failed streams
2026-10-05 12:20:25 +02:00
evgeny
45efaf095d
Add Windows regression coverage for etcpmon refresh lifecycle
2026-10-05 12:14:04 +02:00
evgeny
24906283fe
Refresh etcpmon connections and preserve selection by peer ID
2026-10-05 12:11:43 +02:00
evgeny
9465ed4939
Fix etcpmon response caches and pending request lifecycle
2026-10-05 12:08:05 +02:00
evgeny
0dbdd47130
Fix Windows IPv6 socket option and const link address
2026-10-05 12:00:10 +02:00
evgeny
341da73398
Fix Windows getsockopt argument in TCP error callback
2026-10-05 11:46:54 +02:00
evgeny
ba7146f90a
Fix HTTP proxy framing, keep-alive and stream lifecycle
2026-10-05 09:27:23 +02:00
evgeny
9005c67b8b
Skip Windows DLL deployment when runtimes are present
2026-10-05 09:27:11 +02:00
evgeny
0b72364f10
Recognize DirectWrite and spooler system imports
2026-10-04 23:00:23 +02:00
evgeny
be9a953136
Read Windows DLL import dumps through a temporary file
2026-10-04 22:49:17 +02:00
evgeny
6e4b1ae9c4
Trace Windows import parsing and dependency resolution
2026-10-04 22:41:08 +02:00
evgeny
ba2bafe56e
Diagnose Windows DLL scanning and recognize system imports
2026-10-04 22:25:11 +02:00
evgeny
d02c55dbcd
Document web link handling, validation and Q8 verification
2026-10-04 19:18:00 +02:00
evgeny
4fcf45d545
Accept browser URL paths on Android and drag within the tested link
2026-10-04 19:12:18 +02:00
evgeny
ec856cc73f
Verify web link geometry, full addresses, mixed schemes and drag copying
2026-10-04 19:08:39 +02:00
evgeny
4ce7e29a37
Share URL boundary fixtures between Android and Qt tests
2026-10-04 19:08:39 +02:00
evgeny
dc2b6c3d68
Keep invitation and gesture regressions on the generic link API
2026-10-04 19:07:11 +02:00
evgeny
2e41610693
Open Android web links from shared channel and PM message UI
2026-10-04 19:06:44 +02:00
evgeny
e2472cb5c3
Localize failures opening external message links
2026-10-04 19:06:44 +02:00
evgeny
c191b777b7
Annotate Android web links without altering addresses containing emoji
2026-10-04 19:06:44 +02:00
evgeny
0a060d04ca
Parse Android message links with matching punctuation rules
2026-10-04 19:05:09 +02:00
evgeny
a76ba87501
Open HTTP and HTTPS messages through the desktop URL handler
2026-10-04 19:05:08 +02:00
evgeny
01fa1bc552
Route message link activation through the Qt conversation view
2026-10-04 19:05:08 +02:00
evgeny
5b321c6304
Generalize Qt link gestures while preserving drag selection
2026-10-04 19:04:11 +02:00
evgeny
3482e4a327
Share Qt text layout for web links and invitations
2026-10-04 19:04:11 +02:00
evgeny
394ac93dc4
Extract message links with explicit schemes and punctuation boundaries
2026-10-04 19:03:11 +02:00
evgeny
93c0c5bdfc
Show channel member inviter in Android details
2026-10-04 18:34:17 +02:00
evgeny
b6fd489b8e
Record compact invitation validation and Q8 installation
2026-10-04 18:21:08 +02:00
evgeny
35266d2a31
Verify copy through Qt keyboard action and log Android invite presentation
2026-10-04 18:12:58 +02:00
evgeny
d14babea33
Create signed test channel with its final invitation title
2026-10-04 18:12:23 +02:00
evgeny
af27eaa33b
Size invitation JSON buffers to the escaping contract
2026-10-04 18:11:54 +02:00
evgeny
ec7ec2a229
Document localized invitation titles and compact link presentation
2026-10-04 18:11:08 +02:00
evgeny
f70d5c7460
Verify invitation title delivery and one-line full-link actions
2026-10-04 18:09:41 +02:00
evgeny
6ad89a4f6a
Elide Qt invitation links with consistent layout and full-address selection
2026-10-04 18:08:43 +02:00
evgeny
12e09cb0ed
Render one-line Android invitations and retain full links for copy
2026-10-04 18:07:46 +02:00
evgeny
0ce6e9e83a
Expose invitation group tags and localized Android titles
2026-10-04 18:06:55 +02:00
evgeny
306aaa94ba
Carry encrypted group name metadata in PM invitations
2026-10-04 18:06:26 +02:00
evgeny
be65962e96
Record final history recovery validation
2026-10-04 17:57:04 +02:00
evgeny
a6aea51ff3
Document invitation history recovery and device verification
2026-10-04 17:46:20 +02:00
evgeny
607bd5d475
Report history wait reasons and registration failures precisely
2026-10-04 17:20:07 +02:00
evgeny
387f95208d
Keep message content type alive through JSON serialization
2026-10-04 17:16:58 +02:00
evgeny
fb92f1a8c9
Verify history recovery when a group session loses readiness
2026-10-04 17:10:49 +02:00
evgeny
4cd52c27d5
Include transport definition in history fault injection test
2026-10-04 16:57:06 +02:00
evgeny
a5c616ba0f
Exercise history retry after a lost initial exchange
2026-10-04 16:56:24 +02:00
evgeny
65264137f8
Apply JOIN metadata through the transactional member model
2026-10-04 16:55:00 +02:00
evgeny
b390f3c28f
Cover pre-invitation history with both synchronization roles
2026-10-04 16:48:01 +02:00
evgeny
274f4f2d63
Prepare explicit group sessions in history protocol fixtures
2026-10-04 16:47:01 +02:00
evgeny
eaac611465
Gate history on member synchronization and group readiness
2026-10-04 16:45:47 +02:00
evgeny
6a67cc2038
Prepare channel history before enabling network synchronization
2026-10-04 16:40:32 +02:00
evgeny
865657b3bd
Expose group peer readiness transitions to subscribers
2026-10-04 16:39:19 +02:00
evgeny
5caa1131c8
Test Android member radio flags and update preservation
2026-10-04 16:10:41 +02:00
evgeny
cf77fffaeb
Keep the stroke import used by radio controls
2026-10-04 16:07:08 +02:00
evgeny
51467296c3
Test radio member snapshots, updates and route withdrawal
2026-10-04 16:05:40 +02:00
evgeny
334521ce3f
Display active radios in Android member rows
2026-10-04 16:02:57 +02:00
evgeny
47082c4e2e
Preserve Android radio presence across member refreshes
2026-10-04 16:02:57 +02:00
evgeny
658c248867
Request Android member snapshots on the core thread
2026-10-04 16:00:41 +02:00
evgeny
6c5c1ef0a0
Show enabled radios in desktop member rows
2026-10-04 15:59:45 +02:00
evgeny
0f9210e491
Share the desktop portable radio icon painter
2026-10-04 15:59:45 +02:00
evgeny
9dd2dffc80
Expose live radio subscriptions in member updates
2026-10-04 15:58:54 +02:00
evgeny
81d71690c2
Document PM invitation flow, lifetime and verification
2026-10-04 15:55:42 +02:00
evgeny
38c4c0772b
Use explicit cursor index type for Qt 5 and Qt 6
2026-10-04 15:54:06 +02:00
evgeny
69442dcbb8
Start wrapped-link selection test inside the first link line
2026-10-04 15:52:18 +02:00
evgeny
17179c9c4a
Use invite text layout for selection and wrapped emoji positions
2026-10-04 15:51:51 +02:00
evgeny
0e5778c013
Reuse PM automatic route resolution and check persistence after successful send
2026-10-04 15:50:38 +02:00
evgeny
f02894f164
Release pending invitation dialogs when Android chat stops
2026-10-04 15:46:35 +02:00
evgeny
2afb7268a1
Restore PM group route and verify messaging after invite JOIN
2026-10-04 15:46:14 +02:00
evgeny
efcc9a1761
Schedule member sync when joining over an existing transport
2026-10-04 15:43:15 +02:00
evgeny
c800d9253d
Trace group connection and membership after opening a received invitation
2026-10-04 15:39:06 +02:00
evgeny
92b41ec300
Test wrapped message links and per-member invitation button hit targets
2026-10-04 15:38:10 +02:00
evgeny
8e25ffb392
Wait for member replication after JOIN and include desktop diagnostics
2026-10-04 15:24:06 +02:00
evgeny
570e637795
Verify desktop invitation clicks preserve drag selection
2026-10-04 15:12:26 +02:00
evgeny
b9af72e71d
Test PM invitation cancellation, commit errors and joining another group
2026-10-04 15:12:26 +02:00
evgeny
f07a5b7a83
Keep invite hit testing in the message presenter and show link cursor
2026-10-04 15:10:02 +02:00
evgeny
149c397b7b
Include desktop diagnostic macros for invitation actions
2026-10-04 15:08:16 +02:00
evgeny
3c3f3896f7
Handle message invitation links in Android channel and PM screens
2026-10-04 15:04:14 +02:00
evgeny
68103d0aca
Make invite links clickable in Android text with inline animated emoji
2026-10-04 15:03:54 +02:00
evgeny
442a2a7b04
Complete Android invitation dialog imports and show share link lifetime
2026-10-04 15:03:53 +02:00
evgeny
d13663eb23
Add Android PM and member invitation buttons with group picker
2026-10-04 15:02:42 +02:00
evgeny
e5a87bd043
Track Android PM invitations and joining from message links in ViewModel
2026-10-04 15:02:27 +02:00
evgeny
f841c8eb8a
Localize PM invitation actions, lifetime and error messages
2026-10-04 15:00:45 +02:00
evgeny
81f8f6d4d0
Use asynchronous post API for invitation requests
2026-10-04 15:00:44 +02:00
evgeny
9bdfb93b50
Expose PM invitation operations and membership checks through JNI
2026-10-04 14:59:08 +02:00
evgeny
ef62a80eb8
Filter desktop invitation targets by local membership
2026-10-04 14:59:08 +02:00
evgeny
55d9e79983
Expose read-only channel membership for invitation UI
2026-10-04 14:59:07 +02:00
evgeny
fb21f9c1af
Show invitation lifetime and correlate desktop join results by group
2026-10-04 14:57:12 +02:00
evgeny
d369ff968d
Wire desktop invitation sending and joining from message links
2026-10-04 14:57:12 +02:00
evgeny
b7821121c3
Activate desktop invite links on clicks while preserving drag selection
2026-10-04 14:56:11 +02:00
evgeny
56fe1cab95
Render and hit-test wrapped invitation links in desktop messages
2026-10-04 14:56:10 +02:00
evgeny
01aa692a56
Add group invitation button to desktop PM header
2026-10-04 14:54:59 +02:00
evgeny
44e75e661e
Forward member invitation actions to main window
2026-10-04 14:54:58 +02:00
evgeny
fe23f4ca56
Add invitation action to desktop member rows
2026-10-04 14:54:58 +02:00
evgeny
6bc6d28e9e
Add desktop group picker for PM invitations with ten minute notice
2026-10-04 14:53:59 +02:00
evgeny
fb68e66ca4
Dispatch PM invitation results to desktop UI
2026-10-04 14:53:58 +02:00
evgeny
6f99ad3103
Add cancellable PM invitation operation with correlated results
2026-10-04 14:51:33 +02:00
evgeny
123b47c612
Improve Android VAD lifecycle, audio settings and diagnostics
2026-10-04 14:36:52 +02:00
evgeny
20a1211e09
Add GPLv3 licensing and bundle third-party notices
2026-10-04 14:18:18 +02:00
evgeny
a97e8bcc1f
docs: update file inventory and module header contracts
...
Refresh both AGENTS guides and clarify module purpose, usage, ownership, threading, return values and wire formats in headers. Remove the unused timeout_heap freed_count field and unimplemented getter.
2026-10-04 13:10:01 +02:00
evgeny
c19eff67f6
android chat: refine message bubble colors and shadows
2026-10-03 14:22:21 +03:00
evgeny
5c74b7cd3e
android radio: add plus and minus to volume PTT icon
2026-10-03 14:21:20 +03:00
evgeny
8358210241
docs: record Android volume PTT panel verification
2026-10-03 14:13:48 +03:00
evgeny
de54c2d059
android radio: add volume PTT toggle to radio panel
2026-10-03 14:08:17 +03:00
evgeny
40e6bd36c3
android radio: release volume PTT on focus loss and option disable
2026-10-03 14:08:17 +03:00
evgeny
1805b3dd27
android radio: track independent manual PTT owners
2026-10-03 14:08:17 +03:00
evgeny
163621ddfa
Document verified desktop radio panel and VAD controls
2026-10-03 13:34:50 +03:00
evgeny
c1bec9aca5
Wait for queued radio packets and verify persistent VAD settings
2026-10-03 13:29:33 +03:00
evgeny
33f276a69e
Cover radio panel shutdown and microphone recovery states
2026-10-03 13:19:45 +03:00
evgeny
a2bafb61c7
Own pending radio settings in cancellable uasync tasks
2026-10-03 13:18:09 +03:00
evgeny
312c2dd386
Test desktop VAD panel through Qt buttons and real audio workers
2026-10-03 13:16:15 +03:00
evgeny
8820e9a3c9
Build desktop radio panel and retain audio recovery coverage
2026-10-03 13:13:28 +03:00
evgeny
625846fa33
Apply shared audio changes without resetting saved preferences
2026-10-03 13:13:28 +03:00
evgeny
afbce0efeb
Load radio settings after core startup and apply from dialog
2026-10-03 13:12:17 +03:00
evgeny
9f41415dc7
Expose radio VAD thresholds and independent compressor gains
2026-10-03 13:11:54 +03:00
evgeny
d1e2220e54
Place radio controls above desktop chat messages
2026-10-03 13:10:38 +03:00
evgeny
fa70093866
Add desktop radio panel with device menus and VAD switch
2026-10-03 13:09:38 +03:00
evgeny
dcb07c9124
Add live desktop radio VAD settings and transmission state
2026-10-03 13:08:04 +03:00
evgeny
ffd26c56b4
Reduce radio VAD prefetch to 600 milliseconds
2026-10-03 11:32:34 +03:00
evgeny
6985a2cf18
Document Android radio toolbar VAD control
2026-10-03 11:28:23 +03:00
evgeny
9ff1f5645f
Move Android VAD activation to the radio toolbar
2026-10-03 11:18:04 +03:00
evgeny
099c9b7eac
Record successful VAD validation and full test results
2026-10-03 01:53:03 +03:00
evgeny
13b5136b92
Document radio VAD compressor behavior and validation
2026-10-03 01:50:31 +03:00
evgeny
c9131fff39
Ship deterministic speech fixture for VAD regressions
2026-10-03 01:48:37 +03:00
evgeny
50e276cb94
Include previous audio context in streaming Silero inference
2026-10-03 01:48:37 +03:00
evgeny
9c8f635e63
Test VAD compression, quiet speech and independent prefetch audio
2026-10-03 01:34:27 +03:00
evgeny
cd57597975
Expose radio VAD gain limit in Android settings
2026-10-03 01:30:31 +03:00
evgeny
cbee3da2c9
Add independent compressor branch before radio VAD
2026-10-03 01:30:31 +03:00
evgeny
389fca1de0
Expose compressor gain and register separate radio VAD limit
2026-10-03 01:27:42 +03:00
evgeny
1e9264735b
Fix desktop hover and emoji playback; share Android chat background
2026-10-02 23:19:13 +03:00
evgeny
35648a19ce
Avoid Windows poll macro collision in PTT hotkey manager
2026-10-02 17:32:46 +03:00
evgeny
23368a5bbe
Add Android boot startup, lazy settings, emoji and DM calls
...
Add battery optimization controls and configurable boot startup. Keep message sounds in the application and render general settings lazily to avoid ANRs. Add animated emoji controls and live BGP availability for direct-message calls on Android and desktop.
2026-10-02 17:18:24 +03:00
evgeny
66afcc8625
Add extensible Russian and English interface languages on Android
2026-10-02 16:05:33 +03:00
evgeny
df346fc097
Log standby retry transitions and await the actual wake phase
2026-10-02 12:04:34 +03:00
evgeny
7ec5f931bb
Defer automatic retries until Android standby wakes
2026-10-02 11:56:44 +03:00
evgeny
f12bab8676
Include concrete transport definitions for UP checks
2026-10-02 11:52:36 +03:00
evgeny
f4b273d0be
Cover UP-based chat peer selection and fallback transitions
2026-10-02 11:50:28 +03:00
evgeny
1d189195f9
Advertise desktop clients and log unknown automatic candidates
2026-10-02 11:47:24 +03:00
evgeny
dc34faaada
Route chat retries through automatic peer selection
2026-10-02 11:44:46 +03:00
evgeny
a7632cfee1
Select chat auto peers by device class and transport UP
2026-10-02 11:43:10 +03:00
evgeny
1c499dc230
Classify chat supernodes independently of address type
2026-10-02 11:37:09 +03:00
evgeny
01bc6e4cf0
Опиши контракты аудиотракта и результаты проверок
2026-10-02 10:22:47 +03:00
evgeny
bd082a26bf
Раздели аудиопотоки и привяжи AEC к фактическому общему выходу
2026-10-02 10:22:34 +03:00
evgeny
d7fb0c83f9
Fix bounds and unsigned decoding in ETCP packet dumps
2026-10-02 02:52:32 +03:00
evgeny
ac45554439
Fix ETCP INIT collision scope and backpressure regression tests
2026-10-02 02:25:40 +03:00
evgeny
217e5795bf
Раздели PCM-сессии и исправь частоту и перемотку звука
2026-10-02 02:00:50 +03:00
evgeny
40b974b29c
Исправь потоковый AGC и применяй mute после AEC
2026-10-02 01:56:10 +03:00
evgeny
bdcf8b5634
Сохрани накопленные исправления аудио, async и диагностики
2026-10-02 01:49:32 +03:00
evgeny
b1e3193899
Document typed PM media, shared preparation and completed validation
2026-10-01 19:22:06 +03:00
evgeny
7ae56f03b3
Keep Android video metadata truthful and remove obsolete composer imports
2026-10-01 19:16:27 +03:00
evgeny
203ae61eda
Share bounded thumbnail workers and keep PM downloads in DM transport
2026-10-01 19:12:25 +03:00
evgeny
c863b80917
Validate Android voice streams and keep playback cancellation off UI waits
2026-10-01 19:09:07 +03:00
evgeny
dd8041b30f
Retain picker cache ownership on native PM rejection
2026-10-01 19:06:19 +03:00
evgeny
fe9441d63b
Acknowledge Android PM file ownership only after native enqueue
2026-10-01 19:06:18 +03:00
evgeny
05476fb102
Test Qt voice file validation and decoder cancellation
2026-10-01 18:56:57 +03:00
evgeny
6ccf71b20d
Exercise separate conversations and codec format boundaries
2026-10-01 18:56:57 +03:00
evgeny
418329962d
Test pinned preparation targets, worker ownership and typed offline media
2026-10-01 18:55:34 +03:00
evgeny
f2ff3ee5ab
Report preparation rejection and release abandoned owned sources
2026-10-01 18:53:08 +03:00
evgeny
3b0609fe76
Reject corrupt voice containers and remove unused synchronous playback
2026-10-01 18:51:44 +03:00
evgeny
8e108425ae
Track Android video probing and clean rejected cache files
2026-10-01 18:50:32 +03:00
evgeny
20322e7ecb
Show PM voice and video delivery status in both shared renderers
2026-10-01 18:49:59 +03:00
evgeny
5092bdf9fe
Validate capture format and diagnose capture thread failures
2026-10-01 18:48:57 +03:00
evgeny
be8dbcf25e
Remove duplicate GUI voice encoding and keep shared worker codec
2026-10-01 18:48:09 +03:00
evgeny
72233d2365
Quiesce Android capture before detaching PCM and consume PM cache files
2026-10-01 18:41:17 +03:00
evgeny
79f0f2a07f
Keep Android media preparation status scoped to its conversation
2026-10-01 18:41:17 +03:00
evgeny
225e11265f
Connect Qt preparation notifications to the conversation view
2026-10-01 18:39:31 +03:00
evgeny
6da6471204
Apply task-scoped media preparation events to the shared Qt composer
2026-10-01 18:39:31 +03:00
evgeny
e4a57970f0
Show preparation state for the current Qt conversation only
2026-10-01 18:39:31 +03:00
evgeny
55b21fdcda
Forward pinned attachment preparation events to Qt
2026-10-01 18:37:49 +03:00
evgeny
51a820ac82
Track PM encryption preparation and clean cancelled source files
2026-10-01 18:37:23 +03:00
evgeny
c900adbc69
Report pinned preparation results and clean abandoned media outputs
2026-10-01 18:36:59 +03:00
evgeny
b1ee7857f7
Identify media preparation events by conversation and task UUID
2026-10-01 18:36:59 +03:00
evgeny
318d72708c
Preserve voice autoplay ordering while decoding in a worker
2026-10-01 18:29:43 +03:00
evgeny
172cc3a649
Update shared Qt playback controls after background decoding
2026-10-01 18:29:07 +03:00
evgeny
d4a27d1975
Decode voice files asynchronously before starting Qt playback
2026-10-01 18:27:44 +03:00
evgeny
c77cb9bb0a
Adopt decoded voice buffers without large copies on the Qt thread
2026-10-01 18:27:44 +03:00
evgeny
add016894b
Use bounded independent Android cache files for each attachment
2026-10-01 18:24:12 +03:00
evgeny
fd3fc971fa
Return Android video recording to its original channel or PM
2026-10-01 18:19:37 +03:00
evgeny
fef800ef7a
Use the same Android media interface for channels and PM
2026-10-01 18:19:12 +03:00
evgeny
1cd366c0e1
Share Android conversation composition attachments and message lists
2026-10-01 18:16:23 +03:00
evgeny
dbec6e75e8
Pin Android recording targets and stop capture outside the main thread
2026-10-01 18:13:35 +03:00
evgeny
80b4e6f3e9
Normalize PM voice and video into the Android message model
2026-10-01 18:12:14 +03:00
evgeny
6185869c6d
Use fixed conversation targets for Android media preparation
2026-10-01 18:11:54 +03:00
evgeny
038fd173c2
Detach Android recordings for shared background preparation
2026-10-01 18:01:45 +03:00
evgeny
14935378bb
Check queued worker completion cancellation and attachment codec tests
2026-10-01 18:00:02 +03:00
evgeny
0dc2b0135a
Test typed PM delivery and strict voice attachment metadata
2026-10-01 17:59:16 +03:00
evgeny
c58b92ecd7
Render typed PM media using shared Qt message roles
2026-10-01 17:57:43 +03:00
evgeny
a281165450
Keep channel download commands out of the shared message delegate
2026-10-01 17:56:29 +03:00
evgeny
4f76b4d765
Dispatch Qt attachments using the target captured by the composer
2026-10-01 17:54:48 +03:00
evgeny
d1f03f2f80
Enable shared Qt voice and video composition for PM
2026-10-01 17:53:41 +03:00
evgeny
0d3f2952c1
Move Qt recording buffers to background preparation without copies
2026-10-01 17:52:38 +03:00
evgeny
ba409427c6
Bound media worker concurrency and reject incomplete file copies
2026-10-01 17:51:09 +03:00
evgeny
1b3794e9f9
Include common attachment preparation in both core targets
2026-10-01 17:50:46 +03:00
evgeny
555b6fcf86
Prepare voice and video before dispatching to a fixed conversation
2026-10-01 17:49:52 +03:00
evgeny
1bd310c859
Detach recorder compressors while preserving capture settings
2026-10-01 17:47:39 +03:00
evgeny
20acf975d9
Return final video metadata from the preparation worker
2026-10-01 17:46:55 +03:00
evgeny
984b9e8123
Keep PM attachment kinds scoped to files voice and video
2026-10-01 17:43:53 +03:00
evgeny
c7310e1fad
Register shared voice encoding in core build targets
2026-10-01 17:43:10 +03:00
evgeny
a5f90ec207
Share voice file encoding and final PCM metadata across clients
2026-10-01 17:42:44 +03:00
evgeny
72d1d3f582
Validate PM attachment metadata before committing messages
2026-10-01 17:41:19 +03:00
evgeny
7b8e2cd96c
Transfer temporary source ownership before launching PM workers
2026-10-01 17:40:49 +03:00
evgeny
c1185b62c1
Carry typed encrypted metadata with PM file transfers
2026-10-01 17:39:48 +03:00
evgeny
7357a63fdf
Define bounded typed attachment metadata for PM and GUI
2026-10-01 17:38:25 +03:00
evgeny
adff64e483
Deliver media completions without polling or timer failure joins
2026-10-01 17:36:43 +03:00
evgeny
00e890e0c3
Reserve worker completions before starting background tasks
2026-10-01 17:36:12 +03:00
evgeny
142eefaf86
Record completed PM media integration and validation results
2026-10-01 17:00:55 +03:00
evgeny
7e780bb6a7
Document PM file custody, worker ownership and client integration
2026-10-01 16:44:38 +03:00
evgeny
ef5cd63d9f
Set injected control packet lengths so replay and quota checks execute
2026-10-01 16:40:53 +03:00
evgeny
7bd3e0d4de
Test PM media rollback, quota, snapshots and transfer cancellation
2026-10-01 16:35:55 +03:00
evgeny
18ee21cf93
Allow receipt-authorized custody cleanup after role revocation
2026-10-01 16:34:00 +03:00
evgeny
934f1ccd1f
Use the existing diagnostic macros for desktop PM errors
2026-10-01 16:32:14 +03:00
evgeny
a90274f24c
Test event-loop heartbeat during sustained PM file encryption
2026-10-01 16:31:51 +03:00
evgeny
dc1110af4d
Add Android PM attachment selection, saving and delivery labels
2026-10-01 16:29:12 +03:00
evgeny
1457275139
Update Android PM screens from asynchronous core events
2026-10-01 16:27:58 +03:00
evgeny
52e38ff5d6
Parse PM snapshots and delivery states in the Android repository
2026-10-01 16:27:58 +03:00
evgeny
8403697013
Post Android PM reads and file sends to the core event loop
2026-10-01 16:27:01 +03:00
evgeny
d9eee4e520
Bound and safely serialize PM conversation snapshots
2026-10-01 16:25:52 +03:00
evgeny
e562896d63
Define asynchronous conversation snapshots for PM clients
2026-10-01 16:25:52 +03:00
evgeny
7fee3ec551
Render asynchronous PM history and submit desktop file sends
2026-10-01 16:24:09 +03:00
evgeny
1ceb09062f
Show PM file delivery state without invoking group downloads
2026-10-01 16:22:54 +03:00
evgeny
570f3dfab3
Enable original file attachments in the desktop PM composer
2026-10-01 16:22:32 +03:00
evgeny
4cabbc32f5
Fit file chunks within the signed router packet limit
2026-10-01 16:22:07 +03:00
evgeny
3d6f9c1be4
Sign media test fixtures with the derived Ed25519 seeds
2026-10-01 16:14:39 +03:00
evgeny
76497481f7
Test direct and offline DM media with separate supernode and storage nodes
2026-10-01 16:04:35 +03:00
evgeny
139356bd18
Deliver DM history snapshots asynchronously as JSON events
2026-10-01 16:00:39 +03:00
evgeny
1cdead18de
Expose bounded DM history snapshots with text and media delivery state
2026-10-01 15:59:38 +03:00
evgeny
b47918fad5
Keep media publication and durable deletion off the event loop
2026-10-01 15:57:30 +03:00
evgeny
55c9d79a01
Integrate atomic media registration and orderly transfer/worker shutdown
2026-10-01 15:53:53 +03:00
evgeny
d7a12b24bf
Coordinate offline DM media custody and durable deletion on supernodes
2026-10-01 15:52:05 +03:00
evgeny
41fc5902be
Implement durable DM downloads, media-node custody, quota and expiry
2026-10-01 15:47:05 +03:00
evgeny
e47c7fb2ac
Allow file owners to revoke active transfers on custody expiry or deletion
2026-10-01 15:42:54 +03:00
evgeny
84c148acff
Prepare and publish target-encrypted DM files with exact media receipts
2026-10-01 15:42:02 +03:00
evgeny
d559cbf473
Add configurable seven-day DM custody TTL and reserved storage quota
2026-10-01 15:36:31 +03:00
evgeny
5e9a9059c8
Bind signed file descriptors to atomic DM enqueue and receive
2026-10-01 15:28:40 +03:00
evgeny
27fa3a4812
Define independent DM media metadata, receipts and custody contracts
2026-10-01 15:27:44 +03:00
evgeny
3d0ab35efe
Register file transfer and DM media services in the common core
2026-10-01 15:22:10 +03:00
evgeny
f39ba840b8
Add bounded signed file transfers with per-operation CM ownership
2026-10-01 15:21:44 +03:00
evgeny
6c86e380a8
Record DM stage validation and pending media delivery work
2026-10-01 15:06:08 +03:00
evgeny
c63343cf2b
Stop DM test event loops promptly on scenario failure
2026-10-01 14:51:37 +03:00
evgeny
bd550159f0
Verify DM queues drain beyond one delivery batch after restart
2026-10-01 14:48:37 +03:00
evgeny
43c89ca1ed
Document implemented DM guarantees and remaining media integration
2026-10-01 14:46:24 +03:00
evgeny
1740bec94f
Test mailbox admission, exact deletion and late PUT replay
2026-10-01 14:43:50 +03:00
evgeny
0e0f611d3c
Check atomic DM enqueue rollback and explain sequence conflicts
2026-10-01 14:41:33 +03:00
evgeny
bd05ab6d3a
Verify DM media record boundaries and corrupted artifacts
2026-10-01 14:35:43 +03:00
evgeny
467d2e7605
Prepare DM media as authenticated records using target key
2026-10-01 14:33:45 +03:00
evgeny
10de4f1c71
Commit DM activity timestamps together with message state
2026-10-01 14:28:47 +03:00
evgeny
794d7b70f3
Authorize DM custody by signed group role instead of NAT type
2026-10-01 14:27:54 +03:00
evgeny
e6c78c17b7
Keep DM test diagnostics focused on delivery state
2026-10-01 14:24:28 +03:00
evgeny
3cdb3e6580
Create DM router streams before checking queue capacity
2026-10-01 14:24:18 +03:00
evgeny
febc3419b0
Exercise DM reordering, rollback and signed acknowledgments
2026-10-01 14:22:46 +03:00
evgeny
937ef9fcef
Test CCM limits and offline DM custody across restart
2026-10-01 14:20:19 +03:00
evgeny
5800902a42
Deliver offline DM through durable supernode custody
2026-10-01 14:18:50 +03:00
evgeny
cc072cceb2
Persist DM outbox and verify exact delivery receipts
2026-10-01 14:14:46 +03:00
evgeny
67bbf80769
Fix DM CCM length setup and separate media nonces
2026-10-01 14:04:25 +03:00
evgeny
ce5f5bb7d0
Improve Android onboarding, member UI and PTT permissions
2026-10-01 13:55:28 +03:00
evgeny
577bfb4e6f
Record independent audio startup checks and phone updates
2026-10-01 03:05:00 +03:00
evgeny
fe1d29f007
Check refill below the 60 ms reserve including SoundTouch
2026-10-01 02:59:50 +03:00
evgeny
fbf50b093d
Document independent call audio startup and delivery reserve
2026-10-01 02:58:45 +03:00
evgeny
5b0262d53f
Diagnose refill expectation with the corrected reserve
2026-10-01 02:57:18 +03:00
evgeny
4a2efe21c7
Start Android capture and playback independently
2026-10-01 02:56:29 +03:00
evgeny
7d9f13b8bc
Test startup backlog independently of delivery jitter
2026-10-01 02:51:04 +03:00
evgeny
50e3db81ea
Separate playback backlog from adaptive call reserve
2026-10-01 02:49:35 +03:00
evgeny
d8745fd303
Measure call jitter from media delivery timestamps
2026-10-01 02:48:53 +03:00
evgeny
bc797550d9
docs: record SM startup timings after phone update
2026-10-01 02:25:49 +03:00
evgeny
5ebab7072c
docs: record call startup validation results
2026-10-01 02:19:58 +03:00
evgeny
9ff4e68246
docs: describe call audio startup and loss tone gating
2026-10-01 02:14:15 +03:00
evgeny
00666499fe
android: start call capture before playback setup
2026-10-01 02:12:44 +03:00
evgeny
5487bc8c20
call: suppress loss tone until first received PCM
2026-10-01 02:08:17 +03:00
evgeny
a3f6b6e86e
docs: outline simple Android call startup improvements
2026-10-01 02:00:56 +03:00
evgeny
6f66df61f7
docs: record false audio loss tone during call startup
2026-10-01 01:58:20 +03:00
evgeny
72b5a9887f
chatgui: measure duplex audio stalls and record SM call evidence
2026-10-01 01:36:34 +03:00
evgeny
076cc3c617
docs: record full recovery checks and root socket test
2026-10-01 01:19:37 +03:00
evgeny
91a69b939c
docs: record conn_mgr recovery validation and check timeout limitation
2026-10-01 01:15:15 +03:00
evgeny
969c085085
tests: resend withdrawn relay advertisements during recovery
2026-10-01 01:09:15 +03:00
evgeny
426fc2f4e8
conn_mgr: verify route loss and document handle lifetime recovery
2026-10-01 01:06:56 +03:00
evgeny
464575ef44
conn_mgr: exercise persistent retries with valid signed node updates
2026-10-01 01:01:49 +03:00
evgeny
a65ef30d78
conn_mgr: resume recovery when local sockets change
2026-10-01 00:51:17 +03:00
evgeny
8f5f2b089c
conn_mgr: keep demand alive across bounded recovery attempts
2026-10-01 00:50:44 +03:00
evgeny
111432aa64
conn_mgr: race connection probes and report call path with correct RTT
2026-10-01 00:42:47 +03:00
evgeny
1c51df039f
Fix call gap tone to follow 500ms of missing jitter PCM
2026-09-30 21:14:37 +03:00
evgeny
9e3a417059
Synchronize standby transitions and immediate keepalive phase announcements
2026-09-30 20:42:40 +03:00
evgeny
e914a1bdc1
Improve Android member details contrast
2026-09-30 20:13:25 +03:00
evgeny
b36c685cfa
Show ongoing Android calls on the lock screen
2026-09-30 19:42:12 +03:00
evgeny
3c5c9604b3
Keep Android calls active independently of screen and UI
2026-09-30 19:12:04 +03:00
evgeny
fb37ca747a
1
2026-09-30 17:37:13 +03:00
evgeny
2d21c53b4b
Improve call buffering, CM handle lifecycle and radio PTT controls
2026-09-30 17:31:53 +03:00
evgeny
752c1f140c
Add unified Android dark theme and improve UI contrast
2026-09-30 13:41:45 +03:00
evgeny
db3cacd33e
Rename Android app to vibechat
2026-09-30 13:10:09 +03:00
evgeny
7ebc282eb2
Prioritize supernodes in invites and update chat background and ringtone
2026-09-30 12:56:59 +03:00
evgeny
0d44ada922
Improve Android radio capture lifecycle, VAD and PTT controls
2026-09-30 12:25:42 +03:00
evgeny
52ffb91101
Fix TCP proxy use-after-free during synchronous close
2026-09-30 10:43:02 +03:00
evgeny
745ec3dbd2
android radio: preserve output route on reconfigure, link input/output settings
2026-09-29 22:35:08 +03:00
evgeny
15958a078e
android: self-managed Telecom ConnectionService for call audio routing
2026-09-29 21:26:24 +03:00
evgeny
61bf235ef4
radio: PTT double-tap latch + single-tap off (in-chat & overlay); compressor initial gain = mid-range
2026-09-29 20:00:28 +03:00
evgeny
556b0bc7b7
call/radio: mic AGC compressor + selectable input device; proximity lock
2026-09-29 19:34:23 +03:00
evgeny
f12f61d7ee
call: add SpeexDSP AEC (acoustic echo cancellation) for desktop + Android
2026-09-29 17:01:30 +03:00
evgeny
1176411b79
radio: Silero VAD + auto-PTT; chatgui/android: app icon and background
2026-09-29 16:19:25 +03:00
evgeny
74ca98b38f
proxy: rename pcb guard, dedupe abort; tasks: FIN_WAIT_2 leak
2026-09-29 13:52:35 +03:00
evgeny
961a234d7d
proxy: detach lwIP pcb on local close, guard abort against freed pcb
...
При half-close (exit закрылся первым, браузер держит соединение) pcb уходил в
TIME_WAIT, а conn_finish ждал flow.fin_sent (доставку FIN в exit) — при backpressure
это не наступало, pc->pcb оставался висячим. Таймер TIME_WAIT освобождал pcb без
err_cb, и CLOSE_ALL давал double free. Теперь pcb отсоединяется по завершении
локальной стороны, а tcp_abort/tcp_close защищены проверкой memory_pool_is_freed.
2026-09-29 13:37:00 +03:00
evgeny
a73ae13df4
lwip/proxy: trace PCB lifetime in debug category, drop old noisy debug
2026-09-29 13:18:18 +03:00
evgeny
d8cbe2e589
Add proxy bug list and lightsout game (desktop + Android)
2026-09-29 12:19:23 +03:00
evgeny
e1946b208d
Preserve proxy TCP streams across connect, backpressure and FIN
2026-09-29 04:00:34 +03:00
evgeny
09bc8c35c5
Release TUN proxy connections when lwIP aborts their PCB
2026-09-29 03:59:30 +03:00
evgeny
f19ff11b36
Scope TCP proxy streams and restart messages to their peer
2026-09-29 03:58:53 +03:00
evgeny
268243feeb
Isolate datagram proxy state and replies between instances and peers
2026-09-29 03:58:14 +03:00
evgeny
4be1e62251
Parse IPv4 options and reject malformed TUN proxy packets
2026-09-29 03:57:37 +03:00
evgeny
10b66e2ad0
Validate SOCKS5 authentication and destination addresses
2026-09-29 03:57:21 +03:00
evgeny
7a41fcf512
Notify TCP writers when the final synchronous send drains
2026-09-29 03:57:15 +03:00
evgeny
518df33b0e
Fix UDP and ICMP packet construction at the TUN boundary
2026-09-29 03:56:55 +03:00
evgeny
fdec5b65c5
Add independent radio compressor and Android audio controls
2026-09-29 03:37:47 +03:00
evgeny
ce1f23fe46
Radio: stereo capture/playback with mono fallback; CAMCORDER source; bump RADIO_MAX_OPUS
...
- stereo capture: Android AudioRecord stereo (CAMCORDER source for stereo,
voice sources fall back to CAMCORDER) + desktop separate miniaudio
capture/playback devices (no asymmetric duplex)
- Opus stereo encode/decode, voice_jitter stereo (per-channel frame_size,
slot-based SoundTouch)
- radio_audio_start takes explicit capture_channels (stereo->mono fallback)
- RADIO_MAX_OPUS 256->512 (128kbps stereo frames up to 320B)
- radio_capture_stereo setting + desktop radio settings UI (opus mode/bitrate,
capture stereo)
- radio_send_to send stats logging (etcp_send ok/fail per second)
2026-09-29 02:31:41 +03:00
evgeny
331970a121
Radio: Opus mode/bitrate + mic source + PTT release tail; drop online status from member JSON
2026-09-29 00:40:10 +03:00
evgeny
e3caf15f32
Guard routing loops and reconcile blocked transit against current paths
...
Track visited nodes outside the signed body for all routed packet types. Recheck queued transit routes without losing FIFO priority, reject unknown-group transit, and suppress BGP announcements caused only by RTT jitter.
Document routing rules and wire format. Validate graph churn, REINIT, encrypted transit, malformed paths, loop drops and queue cleanup; full suite: 106 passed, 1 skipped, plus proxy integration and sanitizer checks.
2026-09-28 15:36:47 +03:00
evgeny
fa9e102271
Preserve config string terminator when preparing key updates
2026-09-28 15:16:57 +03:00
evgeny
39ce249361
Prune unconfirmed BGP paths and restart stalled exchanges
2026-09-28 14:58:13 +03:00
evgeny
b76e6553bc
Reconcile BGP paths and advertise selected routes per neighbor
2026-09-28 14:37:44 +03:00
evgeny
546e0c185d
Fix WITHDRAW removing nodes with surviving paths
2026-09-28 14:20:55 +03:00
evgeny
4503bdfa7e
diagnostics: explain and rate-limit rejected ETCP session data
2026-09-28 13:16:39 +03:00
evgeny
c63e93715f
fix: accept invite public keys with a leading zero byte
2026-09-28 12:26:13 +03:00
evgeny
904a9fbda1
docs: refresh development guides for current architecture
2026-09-28 12:10:39 +03:00
evgeny
01fcefdec5
docs: clarify core, group and chat header contracts
2026-09-28 12:01:08 +03:00
evgeny
72fee9e245
Separate core, UTUN and chat lifecycles with owned asynchronous work
2026-09-28 11:39:08 +03:00
evgeny
5838e63cde
Use shared group requests for config and chat connection planners
2026-09-28 11:07:25 +03:00
evgeny
0756a6e020
Serialize group topology lazily through a cancellable backpressure sender
2026-09-28 02:45:00 +03:00
evgeny
792776a1f6
Negotiate group sessions and scope topology messages to peer epochs
2026-09-28 02:15:54 +03:00
evgeny
52ef7a4b3c
Own recovery attempts in group sessions and require restored routes
2026-09-27 23:06:48 +03:00
evgeny
66c59501fc
Track topology exchange readiness per group and peer
2026-09-27 22:14:03 +03:00
evgeny
bce17d9cfc
Route UTUN configuration and group ownership through NCD
2026-09-27 21:59:32 +03:00
evgeny
9745a987ac
Define join contract and require committed CHAT membership for BGP
2026-09-27 20:34:24 +03:00
evgeny
1a8072e9b2
Release group NCD ownership when destroying peers
2026-09-27 20:08:17 +03:00
evgeny
26e6c05313
Apply fresh BGP addresses to shared NCD connections
2026-09-27 19:18:40 +03:00
evgeny
ec51b2d61f
Version signed node snapshots with persistent timestamps
2026-09-27 19:11:11 +03:00
evgeny
7374d1648c
Support 8 KiB member owner tags without signature or serialization truncation
2026-09-27 17:12:13 +03:00
evgeny
de714f5023
Add bounded Merkle pull lifecycle and terminal error handoff
2026-09-27 16:17:04 +03:00
evgeny
3e25bcef02
Refactor Merkle sync into bounded bidirectional rounds with atomic member updates
2026-09-27 14:44:39 +03:00
evgeny
1b92b4885b
Restrict dynamic auto socket test to Linux
2026-09-27 12:48:40 +03:00
evgeny
10d3ecfda4
Record final root transport and full suite validation
2026-09-27 12:19:52 +03:00
evgeny
03f71fd94e
Bound ETCP receive window and fix timestamp and allocator UB
2026-09-27 12:16:15 +03:00
evgeny
59f4802904
Fix autosocket ownership and exercise interface churn under load
2026-09-27 11:57:29 +03:00
evgeny
3131dcbb7c
Fix ETCP session recovery and router lifecycle; confirm chat invites before publishing
2026-09-27 02:51:47 +03:00
evgeny
018c8e795d
android: фикс UAF AudioTrack при переключении группы рации (start → releaseLocked)
2026-09-26 19:18:42 +03:00
evgeny
0209bcf5d3
android: рация — единый режим per-канал, не гаснет при выходе/заходе в группу
2026-09-26 19:12:07 +03:00
evgeny
44d4265084
ll_queue: queue_waiter_cancel отменяет отложенный call_soon при internal==NULL (фикс UAF waiter_defer)
2026-09-26 18:58:27 +03:00
evgeny
f6e6e2c73f
stcp: write-error закрывает conn отложенно (фикс UAF keepalive/etcp_tcp_send)
...
Синхронный send-путь (stcp_link_send → queue_data_put → tx_queue_cb →
flush_pending → try_send) при ошибке сокета вызывал stcp_conn_do_close →
on_close → tcp_link_close_cb → etcp_link_close внутри стека вызывающего,
освобождая ETCP_LINK под keepalive_timer_cb/etcp_tcp_send (use-after-free,
SIGSEGV в keepalive_timer_cb:210).
Теперь write-error планирует отложенный close (uasync_call_soon) с отменой
handle в stcp_conn_do_close; первый err сохраняется; flush_pending не работает
вне STCP_STATE_DATA. Мёртвый hook on_write_error удалён.
2026-09-26 16:42:51 +03:00
evgeny
8aaac45020
ll_queue: отложенный первый запуск автозабора (callback_defer) + тест
...
queue_set_callback_defer(q, 1) переносит первый запуск callback из
queue_data_put* в uasync_call_soon (очистка стека производителя).
Повторные запуски (queue_resume_callback) и так всегда deferred.
2026-09-26 16:42:46 +03:00
evgeny
cc2d2b5f78
etcp: фикс UAF teardown (двойное закрытие линка) + вытеснение down-линка при коллизии адреса
...
- tcp_link_close_cb (серверная ветка): убрать преждевременный огонь link_status/on_link_down,
etcp_link_close сам снимает линк из списка и стреляет коллбэки в безопасном порядке
(устраняет двойное закрытие линка — UAF из callring 45502)
- etcp_connection_close: при callbacks_running откладывать закрытие через uasync_call_soon
вместо *(int*)0=0
- callbacks_running: uint8_t-флаг -> int-счётчик вложенности (++/--)
- etcp_fire_conn_status / etcp_fire_link_status_cbk: поднимать callbacks_running вокруг огня
- insert_link_queue: при коллизии адреса с чужим conn — ERROR при одинаковом pubkey,
отказ при up-линке, вытеснение (etcp_link_close) при down-линке
Попутно: доки/комментарии в etcp_router, ACK-интервал 100мс->10мс (ROUTER_ACK_INTERVAL_TB).
2026-09-26 13:40:33 +03:00
evgeny
265421eb96
tun proxy: фикс TCP-суммы (нечётный pbuf), FIN до дренажа to_lwip, tcp_bind/rexmit_fast/active_pcbs_changed + нагрузочный burst-тест
2026-09-25 23:36:45 +03:00
evgeny
a20d73d2be
proxy/tun: добавить DEBUG-логи диагностики застревания keep-alive (lwIP IN/OUT/RECVED/RTO/PERSIST + per-conn DIAG)
2026-09-25 22:12:47 +03:00
evgeny
4353daf913
freebsd: уникальный dst-адрес per-interface (tunN -> 192.0.2.(N+1))
2026-09-25 20:16:39 +03:00
evgeny
3a4daf6e77
etcp: строгая последовательность коллбэков при закрытии (NEW→UP↔DOWN→DELETE)
...
- close: финальный per-connection DOWN только если был UP, до state=2
- etcp_cbk_fire / etcp_fire_conn_status / etcp_link_ready_callback / etcp_on_up: guard state==2
- документация контракта в etcp_api.h / etcp.h
2026-09-25 19:13:38 +03:00
evgeny
ab5d1c5f91
topo_group: диагностика senders_list (new_conn/remove_conn) для локализации UAF
...
- new_conn: DEBUG_INFO ADD с conn/peer/state/ch
- remove_conn: state в enter-логе, детали в !found_in_list WARN, REMOVED-лог
2026-09-25 18:18:39 +03:00
evgeny
08e8b2f1cc
route_connectivity: фикс UAF при удалении узла с влётными пробами; отмена TCP-пингов при teardown
...
- topo_nodeq_remove_node: единый хелпер удаления nq (cancel проб + free paths/subnets + remove + free), заменяет все free-сайты
- route_connectivity_cancel_all: итерация по всем группам + зануление ctx->nq + отмена standby-defer
- etcp_send_tcp_ping: out_cli — хендл stcp_client для досрочной отмены; conn_probe_ctx.tcp_cli
- conn_mgr: cand_tcp_pings[] — отмена влётных candidate TCP-пингов в conn_mgr_destroy
2026-09-25 16:01:19 +03:00
evgeny
3f7b4351cd
stcp: фикс UAF log_dump, дренаж очередей при закрытии, защита pre-closed серверной ветки, логирование тихих сбросов rx
2026-09-25 13:49:43 +03:00
evgeny
ceaf466b1c
chatgui-android: входящий звонок поверх блокировки (inline-оверлей) + вибрация всегда кроме silent
2026-09-24 12:08:49 +03:00
evgeny
fb4343fca6
transport: reality-релей idle-timeout (конфиг, дефолт 5с) + warn при >64 релеях; убрать лимит FD_SETSIZE; проверка socket_id в stcp_server
2026-09-24 12:08:45 +03:00
evgeny
cc269e810c
Звонки: надёжность отмены (INVITE-кодограмма + watchdog) и вибрация входящего по ringer-режиму
2026-09-24 10:15:19 +03:00
evgeny
b90dc752d2
call: две фазы исходящего вызова — индикация + разные гудки (desktop/Android)
2026-09-23 19:16:53 +03:00
evgeny
7198154106
chatgui: клик по медиа с отсутствующим файлом — сброс пометки и перекачка
2026-09-22 21:59:59 +03:00
evgeny
d237dfec7c
diag: кольцевой трейс вызовов teardown + дамп при SIGSEGV (размотка UAF link close)
2026-09-22 20:52:02 +03:00
evgeny
4f29839de5
chat: инвайтер шлёт CONNECT_RESULT(0) после приёма джойнера
...
- chat_join_process_request: постить CHAT_EVT_CONNECT_RESULT(result=0) в GUI инвайтера
(иначе диалог «Пригласить в канал» висел на «ожидание ответа»)
- cs_handle_join_request: снять pending_invite_* и погасить invite_send_timer после join
2026-09-22 18:26:44 +03:00
evgeny
b46fd599fa
chat: push-invite join key + запрет флагов на плейсхолдере
...
- CHANNEL_INVITE теперь несёт join_key (регистрируется инвайтером локально),
джойнер шлёт JOIN_INFO_REQ с валидным ключом — чинит автоjoin chatserver-узлов
- ask-путь сохраняет join_key для chat_sync_accept_invite
- chat_member_tags_commit отвергает установку флагов на source!=0 (плейсхолдер)
- member_sync_apply_record: defensive ERROR при adm_tags на плейсхолдере
2026-09-22 17:58:50 +03:00
evgeny
0e625da109
call: ретрансмит INVITE каждые 2с + fail-fast при отсутствии маршрута (6с)
2026-09-22 16:06:52 +03:00
evgeny
93becd36e6
keepalive: TCP-линки без ретраев/ACK; не пинговать спящих пиров, bg-ping цикл ≤ 1/мин
2026-09-22 03:47:50 +03:00
evgeny
a3e890b711
keepalive: раздельный sleep-код (announce+ACK-ретраи в окне, dead-link) + без flagless в спячке
2026-09-22 03:29:42 +03:00
evgeny
a3df1720b4
keepalive: симметричный sleep-протокол (без is_server) + отдельный ACK-бит
2026-09-22 02:41:15 +03:00
evgeny
331c7849f0
keepalive: убрать периодический keepalive в standby (обе стороны молчат, только фазовые анонсы + один ack)
2026-09-22 02:19:28 +03:00
evgeny
945c6a82b0
keepalive: гвард нулевого тайминга фазы (busy-loop) + разделение echo/announce на сервере
2026-09-22 01:35:25 +03:00
evgeny
cc0dcb071e
chat: UI настройки звука канала (Android toggle + JNI, desktop через C API) + trampoline
2026-09-22 01:25:55 +03:00
evgeny
3d9c79e752
db_sync: троттлинг push к спящему пиру в тихом чате
2026-09-22 01:21:51 +03:00
evgeny
b39b85db13
chat: троттлинг по фазе спячки (member_sync send-only, db_sync sound-aware) + настройка звука
2026-09-22 01:20:32 +03:00
evgeny
9f89fd0f7a
transport: keepalive duty-cycle тайминг (active_remaining+sleep_duration) + серверная фаза троттлинга
2026-09-22 01:20:26 +03:00
evgeny
0a1ba79d6f
chat: member_sync per-peer throttling on peer sleep (cancel_peer + recv/start gating)
2026-09-22 00:42:24 +03:00
evgeny
e4e9fca243
transport: per-peer sleep callback (peer_sleep_cbk) fired from keepalive protocol
2026-09-22 00:40:32 +03:00
evgeny
5628138d16
etcp: keepalive sleep-протокол на флагах (KA_FLAG_SLEEP + sleep_time, announce-retry, ack/echo)
2026-09-21 23:30:39 +03:00
evgeny
8a9d8d0097
fix: утечки памяти в router-сервисах и при shutdown
...
- conn_mgr_router_recv_handler / md_etcp_recv не освобождали entry (рантайм-утечка на каждое сообщение)
- reality_relay: registry + shutdown hook (отложенный free не отрабатывал при остановке)
- etcp_router: uasync_drain_immediate после destroy (router_close_finalize)
- мелкие callback-списки: activity_cbks, node_cbks, props_cbks/apply_cbks
2026-09-21 21:55:11 +03:00
evgeny
2f3001458f
android: standby keepalive sync + rx logging during sleep
2026-09-21 21:17:35 +03:00
evgeny
845af9200d
Stop call ring sound immediately on accept
2026-09-21 19:41:21 +03:00
evgeny
328d36376c
chat: пишем local_attrs атомарно при вставке своего медиа (гонка с MSG_RECEIVED)
2026-09-21 19:36:07 +03:00
evgeny
6e2a2f0011
media_download: сброс таймера простоя при CONN→REQ + правки диагностики
...
- md_dl_conn_cb: обнулять last_progress_tb при переходе CONN→REQ, иначе время
установки indirect-соединения (~2с) засчитывается как простой блока и
вызывал преждевременный фейловер с держателя, реально имеющего блок
- STALL-лог: печатать миллисекунды корректно (значение в единицах 0.1мс /10)
- media_index: INSERT OR IGNORE — повторная регистрация блока как servable
больше не шумит как ERROR (UNIQUE constraint)
2026-09-21 19:16:27 +03:00
evgeny
9793733cd5
chatgui: диагностика воспроизведения голосовых сообщений (Windows)
...
- sound_manager: ma_engine_init/playRawPcm логируют через DEBUG_* (qWarning/qDebug терялись в GUI-приложении без консоли); детальный результат старта PCM (rc/is_playing/cursor)
- main: ранняя инициализация лога в GUI-потоке до SoundManager::init, чтобы диагностика инициализации попала в файл
- messagedelegate: лог клика по Play/timeline (filePath/dlState/существует ли файл)
- voiceplayback: лог заголовка opus (sr/ch/frameSamples)
Попутные правки:
- u_async: фикс двойного close wakeup_pipe (eventfd/Windows)
- chat_core: NULL-guard в get_db/is_initialized
- android: sqlite открывается в utun_instance_init, cleanup stale-потока без утечки fd
- android SettingsScreen: компактная раскладка имени интерфейса
2026-09-21 18:59:04 +03:00
evgeny
19dc076528
chatgui: инициализация call/dm/media backfill при старте узла (fix звонков)
2026-09-21 17:20:41 +03:00
evgeny
6a0373ee73
call: диагностика ставок TX/RX и детект сталла аудио-девайса с хард-ресинком
2026-09-21 16:54:14 +03:00
evgeny
570b421ba0
conn_mgr: parallel reverse+indirect, retransmit, and call teardown fix
...
- call_on_conn_status: only end call when its own data conn drops
(INDIRECT call was killed by unrelated topo_group_connect conn DELETE)
- conn_mgr: run REVERSE and INDIRECT in parallel after DIRECT fails;
reverse is preferred (indirect defers via indirect_ready until reverse
resolves). REVERSE timeout 15s -> 3s.
- retransmit DIRECT_REQ / EXCHANGE_REQ every 1s (idempotent, same request_id)
to survive packet loss (router RST dropping stale-channel requests)
- replace main.phase with reverse_active/indirect_active/indirect_ready flags
- add diagnostics to trace the parallel flow
2026-09-21 15:22:16 +03:00
evgeny
ee54bd52b3
conn_mgr: fix reverse-phase timer leak causing use-after-free crash
...
cm_ncd_callback re-entered cm_start_phase_reverse on every NCD timeout
during REVERSE phase (shared NCD revived by other modules), leaking reverse
timers: only the last one was tracked in entry->main.timer, so cm_entry_cleanup
cancelled only that one and the earlier timers fired on the freed entry.
- ignore repeated NCD timeouts while already in REVERSE (phase==2)
- cancel entry->main.timer before overwriting in reverse/indirect phases
- remove entry from reverse_pending in cm_entry_cleanup
2026-09-21 13:57:32 +03:00
evgeny
e885fe30f5
chatgui: remove universal black background from video window (fix black boxes around controls)
2026-09-21 12:50:06 +03:00
evgeny
cd0757e272
chatgui: declare metatype for shared_ptr<vector<int16_t>> (Qt5 build fix)
2026-09-21 12:42:21 +03:00
evgeny
f5fece4959
chatgui: fix video playback on Windows (metatype registration + swscale YUVJ range)
2026-09-21 12:39:18 +03:00
evgeny
01987a75d0
chatgui: verify FFmpeg DLL deployment + fix dependency resolution order
2026-09-21 11:52:21 +03:00
evgeny
9d4538935d
chatgui: restore FFmpeg build script (build_ffmpeg.sh + .gitignore)
...
Скрипт был случайно удалён в d773f172 вместе с .gitignore/.opencode.
Без него на Windows не собирается ffmpeg/ffmpeg_build/install -> HAVE_FFMPEG
не определяется -> воспроизведение и транскодирование видео отключены.
2026-09-21 11:29:47 +03:00
evgeny
6ee9bad17d
chat: defer media auto-download to per-channel backfill after sync
...
- db_sync insert-cb gets initial_sync flag (SEND_DATA=1, PUSH/local=0)
- on_msg_inserted skips media download during initial sync
- new chat_media_autodownload_backfill_channel (newest-first) triggered
on SYNC_DONE per channel (2s debounce)
2026-09-21 02:07:24 +03:00
evgeny
a5047c29f7
chatgui: always deploy non-Qt DLLs (FFmpeg, mingw-runtime) next to vibechat.exe
2026-09-21 00:58:56 +03:00
evgeny
2f1545de38
chatgui: fix Qt5 build — QMouseEvent/QWheelEvent position() -> localPos()/posF()
2026-09-21 00:51:48 +03:00
evgeny
de850db548
chat: remove join_password check from per-channel JOIN_INFO_REQ (server-link only)
2026-09-20 22:23:42 +03:00
evgeny
39a1da4c28
chat: fix use-after-free in invite_candidates trampoline + accept JOIN_INFO_RESP/READY/ERROR for unknown channels
2026-09-20 22:03:31 +03:00
evgeny
d1432b7d19
tests: fix Windows build — SKIP fork-based e2e, cross-platform mkdtemp/setenv
2026-09-20 20:21:50 +03:00
evgeny
a7a3666d85
radio: AGC release-rate (без кликов), jitter dead-zone, TX/RX-статистика, FGS-гонка и кэш настроек
2026-09-20 20:07:48 +03:00
evgeny
ba1c2d85d3
reality_relay: async DNS вместо getaddrinfo + AGC-компрессор по умолчанию (-12 dBFS)
2026-09-20 15:28:46 +03:00
evgeny
738cfe7835
radio: адаптивный джиттер-буфер (pre-roll, симметричный темп, reorder) + AGC-компрессор микрофона
...
- voice_jitter: vj_create_cfg (target_ms/min_tempo/max_tempo/pre_roll), pre-roll
с таймаутом, vj_end для дренажа остатка, глубина учитывает внутренний буфер SoundTouch
- radio_audio: reorder по seq (mesh, out-of-order через соседей), force-flush pending
по таймауту и FIN, компрессор микрофона (AGC, конфиг [chatserver]), статистика буфера
- audio_compressor: clear_output для потокового слива без потери gain_smoothed
- chatgui messagelist: fromUtf8 для emoji-строк
- тесты: pre-roll/симметричный темп, reorder, late-drop
2026-09-20 14:39:25 +03:00
evgeny
27e66f1092
log: move socket diagnostics SYS->SOCKET and conn lifecycle ETCP->CONNECTION (avoid poll() flood)
2026-09-20 01:51:40 +03:00
evgeny
1bde2eca35
diag: log conn add/remove/free pointers to pinpoint BGP senders_list UAF
2026-09-20 01:42:05 +03:00
evgeny
16237b0df8
etcp_send: fix contract (caller owns entry on error) + fix 7 leak sites
2026-09-20 01:35:30 +03:00
evgeny
fae0a7c069
uasync: cast function pointers in socket_add log to void*
2026-09-20 01:18:33 +03:00
evgeny
b33caa56b8
uasync: pass socket name to all add_socket call sites
2026-09-20 01:13:38 +03:00
evgeny
c36cebe357
uasync: add socket name diagnostics and HUP/ERR auto-unregister safety net
2026-09-20 01:11:30 +03:00
evgeny
90520a83ff
topo_group_connect: не подключаться к самому себе в авто-цикле
...
Phase 1/2/3 и on_up/on_down не фильтровали self: узел попадал в список
connected-пиров (get_connected_peers не исключает self) и разворачивал
node_conn_direct_open на собственные адреса (12 линков на 5C31->5C31).
Ручной путь (connect_node_once) фильтр уже имел.
Добавлен skip self в Phase1 init/cycle_restart, Phase2, Phase3 и в
on_up/on_down (self не помечается connected и не считается в active_conn_count).
2026-09-19 23:40:06 +03:00
evgeny
6b92964794
radio/android: PTT FGS microphone permission + детект потери микрофона
...
- FOREGROUND_SERVICE_MICROPHONE запрос + foregroundServiceType microphone|specialUse (Android 14+)
- RadioOverlayService.start: не стартовать без mic-разрешения, ServiceCompat.startForeground с TYPE_MICROPHONE
- RadioAudioEngine: micDead-флаг и лог при обрыве captureLoop/read
- radio.c: лог первого кадра burst на транзитных узлах
- SettingsScreen: категория radio в списке debug-категорий
2026-09-19 23:13:04 +03:00
evgeny
688785fc6e
etcp: фикс зависшего reinit_pending после реинита готового соединения
...
etcp_conn_queue_set_ready() делает ранний выход по state!=0, поэтому при
реините уже готового соединения (peer restart / duplicate INIT / collision)
reinit_pending оставался в 1 навсегда. Добавленные в 841b3042 guard'ы
etcp_conn_input/etcp_output_try_assembly дропали все входящие пакеты.
Снятие reinit_pending + REINIT перенесено в etcp_conn_ready.
2026-09-19 23:13:04 +03:00
evgeny
5e955168d2
chatgui-android: PTT-оверлей — talking flow, цвет idle/talking, drag-lock
...
- RadioAudioEngine: StateFlow talking для реактивной подсветки кнопки
- RadioOverlayService: градиент idle/talking, drag-lock, сброс isShown при destroy
- ChatScreen: скрывать PTT-кнопку при активном оверлее, подсветка по talking
2026-09-19 21:17:38 +03:00
evgeny
841b3042cf
etcp: фикс double-free буферов паковщика и повторных free после неудачного queue_data_put
...
- pn_send_to_etcp/pn_unpacker_cb: занулять pn->data/pn->recvpart ДО queue_data_put
(ре-энтрантный close/reinit в синхронной цепочке освобождал буфер повторно)
- etcp_output_try_assembly: гард state==2/reinit_pending + убрать re-put освобождённого entry
- etcp_conn_input: гард ре-энтрантного reinit/close в цикле секций, локальный etcp вместо pkt->link
- убраны повторные free после queue_data_put (он сам освобождает entry+dgram) в 6 местах
- диагностика: obj=%p в DOUBLE FREE, логи free dgram в pn_deinit/ack_recv
2026-09-19 21:17:33 +03:00
evgeny
4a785772be
chatgui-android: PTT по volume-кнопкам (вверх/вниз) + синхронизация оверлея
...
- volume up/down обе держат PTT (holdCount), настройка radio_volume_ptt
- syncRadioOverlay при включении/выключении рации
2026-09-19 18:16:46 +03:00
evgeny
8a9184675a
radio: дедупликация дублей в mesh + фикс OOB в hop_list
...
- radio_recv: кэш (src,stream,seq) с TTL 2с гасит кадры, пришедшие по второму пути (diamond/mesh)
- фикс записи за границу new_hops[hop_count] при hop_count==RADIO_MAX_HOPS
- счётчик c_dup_dropped + radio_dup_dropped() для диагностики
- тест test_radio_mesh (4 узла, diamond): C получает ровно N кадров, dup>0
2026-09-19 18:16:42 +03:00
evgeny
b96ed8bd00
radio: PTT-радио в каналах (src/radio + chatgui + chatgui-android)
...
Новый модуль src/radio (radio/radio_audio/radio_headless) — push-to-talk
радио поверх topo-групп, доставка аудио в канал, headless-режим и тесты.
Интеграция в chatgui (ptt_hotkey_manager, radio_audio_engine, радионастройки,
вызовы) и chatgui-android (RadioAudioEngine, RadioOverlayService, UI).
2026-09-19 17:09:00 +03:00
evgeny
398078a28f
headless/call: закрывать клиента и логировать при ошибке send() (EPIPE/ECONNRESET)
2026-09-19 10:43:04 +03:00
evgeny
6c42390fc2
utun: игнорировать SIGPIPE, чтобы send() в закрытый TCP-сокет не убивал демон
2026-09-19 10:32:57 +03:00
evgeny
1de1409699
conn_mgr: handle-based API (conn_mgr_open/close), фазы DIRECT/REVERSE/INDIRECT, тесты phases+handles
2026-09-19 09:31:08 +03:00
evgeny
734a414186
etcp: единый реестр svc_id + убрать коллизию CHAT/CONN_MGR (0x11)
...
Все ETCP_ID_*/ETCP_RT_ID_* сведены в etcp_api.h (единственное место
определения) с реестром и предупреждением про коллизии в пределах одного
пространства имён. Убраны локальные define из topo_group.h,
topo_group_invite.h, db_sync.h, chat_sync.h, chat_join.h; хардкод 0x31 в
member_sync.c заменён на ETCP_RT_ID_MEMBER_SYNC.
Коллизия: chatgui-десктоп биндил мёртвый ETCP_RT_ID_CHAT 0x11 поверх
ETCP_RT_ID_CONN_MGR 0x11 — затирался conn_mgr_router_recv_handler, из-за
чего INDIRECT-обмен conn_mgr не работал и голос звонка не устанавливался.
Удалён мёртвый код recvCallback/messageReceived/send в utun_node.{cpp,h}.
2026-09-19 00:18:39 +03:00
evgeny
6d3ad965ee
topo: remember REQUEST_TABLE for not-yet-created groups, fulfill on create
...
При REQUEST_TABLE для ещё не созданной группы (CHAT-канал не загружен) пир
дропал запрос, и проситель навсегда не узнавал таблицу — односторонняя
видимость (звонок android→linux падал «peer offline»). Теперь запрос
запоминается в pending_table_reqs[32] и выполняется при создании группы
(topo_group_fulfill_table_reqs → handle_request_table).
Попутно: test_chat_join_e2e — критерий успеха через CHAT_EVT_CONNECT_RESULT
(JOIN_READY) вместо senders_list; doxygen-комментарии в etcp_api.h.
2026-09-18 23:36:45 +03:00
evgeny
8bfb456161
etcp: fix OOB/DoS in packet parsing and ping path
...
- FILLER: drop (uint16_t) truncation in fill_len bound (OOB pointer)
- ACK: require len >= ETCP_ACK_BASE_SIZE (8); wrap-aware clamp of till
to next_tx_id + 16MB cumulative-ACK iteration limit (DoS)
- ping: bound len before sc_encrypt (stack overflow), ulen bound,
allocate ETCP_DGRAM + PACKET_DATA_SIZE (heap overflow)
Signed-off-by: uTun <dev@utun>
2026-09-18 17:58:40 +03:00
evgeny
1340ab123b
reality/stcp: fix OOB read in key_share parse, padding clamp, shbuf leak
...
- reality_parse_client_hello: bound shares_len by extension data length
(len-2) to prevent stack-buffer-overflow from malformed ClientHello
- stcp handshake: reject padding_size > STCP_HS_PADDING_MAX (512)
- reality_ch_body_cb: free shbuf on stcp_try_send error (leak)
- tests: fuzz key_share parse; raw-socket handshake control/clamp/garbage
Signed-off-by: uTun <dev@utun>
2026-09-18 17:20:19 +03:00
evgeny
e7fc69bb1d
topo: комментарии к функциям topo_node/topo_group
...
conn_mgr: src node_id вместо conn->peer_node_id, препенд ETCP_RT_ID_CONN_MGR к dgram, bind CONN_MGR после etcp_router_init
call: guard CALL_ST_CONNECTING при accept
2026-09-17 17:30:05 +03:00
evgeny
1fce405204
debug: вычистить логи из категории DEBUG_CATEGORY_DEBUG (удалить дампы, перекатегоризовать ERROR-проверки в ETCP)
2026-09-17 00:17:32 +03:00
evgeny
e6a4ffd418
reality: fix leak of ClientHello init buffer in reality_server_start_relay
2026-09-17 00:05:42 +03:00
evgeny
1f1df4f437
mem: детект аномально больших аллокаций (LARGE ALLOC log + calloc overflow guard)
2026-09-16 21:12:46 +03:00
evgeny
51a5c5bcbf
router: fix UAF on rconn->recv_conn after ETCP_CONN destroy
...
recv_conn хранил заимствованный указатель на физический conn без очистки
при его освобождении. Добавлен etcp_router_conn_destroyed(), вызываемый из
etcp_connection_close фазы 1; RST теперь отправляется через живой conn,
доставивший пакет, а не через устаревший recv_conn.
2026-09-16 20:27:03 +03:00
evgeny
51d6d22a27
sock_match: классификация сокета по адресу, а не по type из конфига (fix Q8/Android→LAN)
...
ip_is_public() вынесен в lib/platform_compat (единый классификатор IPv4 с ntohl).
auto_socket_reconcile_config: тип сокета выставляется по фактическому адресу.
sock_collect_views: has_priv/has_inet/is_eim — по классификации адреса и NAT-детекции.
is_local_subnet упрощён до !ip_is_public(). Тест test_sock_match обновлён.
2026-09-16 20:26:55 +03:00
evgeny
21d9a4e5b7
dm: заполнять peer_name при автосоздании беседы (иначе в списке 0x...)
2026-09-16 20:26:55 +03:00
evgeny
5293fdd3a9
call(android): звать call_audio_init перед start; логировать feed_pcm без instance
...
Без call_audio_init(inst) g_inst оставался NULL и call_set_audio_ops не
регистрировался: TX (feed_pcm) падал на !ua, RX (audio_ops->on_media) не
вызывался — тишина и спам 'callAudioFeed returned false'. Зеркалим desktop:
utun_bridge_call_audio_start теперь делает call_audio_init + call_audio_start.
2026-09-16 20:26:55 +03:00
evgeny
2de554f8b9
call: единый голосовой стек (libutun_voice) + SoundTouch на Android
...
- voice_jitter (кодированные Opus-кадры + decode-on-pull + SoundTouch time-stretch)
вместо PCM-буфера audio_jitter; излишек держится до декодирования
- call_audio.c/.h — единая реализация для desktop/Android/headless (C-интерфейс)
- libutun_voice (voice_sources.cmake): SoundTouch + voice_jitter + call_audio + call_tones
- Android: pull-модель (nativeCallAudioPull), убран Kotlin FIFO, ANDROID_STL=c++_static
- headless audio-сокет: PCM-протокол (decode-only, без тактирования), daemon остаётся C-only
- CALL_STATS расширен dropped/underruns; удалены audio_jitter.cpp и libutun_lite/call_audio.c
- тест test_voice_jitter (ёмкость/догон/стационар), test_call_headless переведён на PCM
2026-09-16 20:26:55 +03:00
evgeny
de930b21a2
ncd: fix UAF on deferred UP delivery after handle close
...
ncd_deliver_up_cb (uasync_call_soon) держал сырой указатель handle h,
который мог быть освобождён node_conn_direct_close/force_close раньше
выполнения отложенного callback'а. Сохраняем токен call_soon в handle
и отменяем его при close через uasync_call_soon_cancel.
2026-09-16 20:26:55 +03:00
evgeny
e4557b0473
dm: маршрутизация через общую группу (group_id), JSON-эскейпинг; звонки: иконки/UI в desktop и android
2026-09-16 15:05:48 +03:00
evgeny
b483335c06
bgp/ncd: владение conn через NCD-handle в senders_list; call audio route persist + incoming call sound
2026-09-16 13:29:28 +03:00
evgeny
b11e77e4c0
call: P2P аудиозвонки — сигналинг, релей медиа, аудио-контур, headless/desktop/android
...
- src/call/: сигналинг (call.c, call_proto.h, ETCP_RT_ID_CALL 0x36) + релей медиа
+ headless аудио-сокет (call_headless.c, call_audio_bind) + Opus/jitter/тоны
- chat: события CHAT_EVT_CALL_* (34–40), CHAT_EVT_DM_MESSAGES (41), DM-трамплины
- chatgui: call window, miniaudio I/O, audio_frame_ring, test_audio_jitter
- chatgui-android: CallScreen/IncomingCallDialog, аудио-роутинг, JNI, рингтон
- tests: test_call, test_call_headless
2026-09-16 10:17:57 +03:00
evgeny
0157f7f96b
build: fix --asan to build lib/libopus dependency
2026-09-15 22:44:27 +03:00
evgeny
21ec740d82
socks_proxy: defer conn free to fix UAF from synchronous write_queue flush
2026-09-15 22:39:27 +03:00
evgeny
b085715654
tun/nat: fix UAF при teardown и use-after-free в tun_read_packet
2026-09-15 22:07:55 +03:00
evgeny
6dc017337d
chat: fix UAF в member list trampoline (req->inst после u_free)
2026-09-15 21:52:46 +03:00
evgeny
73fe99b33f
dm: прямой обмен сообщениями (DM) + soundtouch + архитектура звонков
...
- src/dm/: dm_core/dm_crypto/dm_mailbox — прямой обмен сообщениями (DM)
- lib/soundtouch-master/: vendored SoundTouch (изменение темпа/высоты аудио)
- doc/dm_arch.md, doc/chat_call_arch.md: архитектура DM и звонков
- tests: test_dm.c, test_dm_e2e.c
- chat: рефакторинг chat_* модулей, member_sync, invite_build
- chatgui/chatgui-android: синхронизация с новым API чата
- lib/u_async, debug_config, utun_instance: сопутствующие изменения
2026-09-15 21:09:17 +03:00
evgeny
761f64cf76
chatgui-android: отображение REALITY-линков (TCP+REALITY) в статусе узлов и сокетов
2026-09-15 12:18:22 +03:00
evgeny
27b591daee
reality: использовать NTP-время вместо time(NULL) в анти-реплей проверке timestamp
...
Часы colo2 отстают на ~52с (ntpd выключен), что ломало reality auth
(diff < -30с = time_window). Теперь клиент и сервер передают
ntp_time_get_seconds() в reality_client_hello_build_at /
reality_server_hello_build_at вместо сырого системного времени.
2026-09-15 05:39:28 +03:00
evgeny
481872d5db
chat: invite-ссылки с несколькими адресами + ncd-адреса узлов (join)
2026-09-15 05:16:04 +03:00
evgeny
d88dccfa19
etcp/stcp: обрыв etcp_link->tcp_link при закрытии stcp_link (fix UAF)
2026-09-15 00:25:42 +03:00
evgeny
af382403ec
tun_freebsd: reuse existing TUN interface on SIOCIFCREATE EEXIST
2026-09-14 23:17:59 +03:00
evgeny
952504d8eb
etcp: убрать ложный reinit по gop (got_initial_pkt)
...
reinit должен происходить только при смене reset_id пира
(etcp_conn_apply_peer_reset_id). gop-проверка 'dirty vs clean' на догоняющем
TCP-линке давала ложный reinit и рвала соединение (JOIN_INFO_RESP терялся).
Удалён peer_got_initial_pkt из stcp_link (стал не нужен).
2026-09-14 22:46:41 +03:00
evgeny
d58d4d39c4
chat join: запуск JOIN_INFO_REQ при уже поднятом соединении + добавление джойнера в группу
...
- cm_invite_trampoline: если уже подключены к connection-узлу — cs_on_conn_up
повторно не сработает, запускаем join-хендшейк напрямую (cs_start_channel_join)
- chat_join_process_request: после верификации ключа сразу добавляем джойнера
в CHAT-группу (topo_group_new_conn), чтобы BGP подключился
2026-09-14 22:46:41 +03:00
evgeny
910cfeac20
chatgui: настройка звука уведомления на канал (sound_on_message)
2026-09-14 21:12:53 +03:00
evgeny
fc2262912a
chat_join: верификация join-ключа на инвайтере (REQUEST_FWD)
...
Инвайтер добавлял мембера без проверки join-ключа — любой известный узел
мог самопригласиться в канал через REQUEST_FWD напрямую владельцу.
register_key теперь всегда хранит выданный ключ локально,
process_request отклоняет запрос с неизвестным/чужим ключом.
Тесты: unknown join_key rejected + регистрация ключа в t_process_request.
2026-09-14 21:12:53 +03:00
evgeny
75e39d2fee
chat_join: модуль join-протокола, invite-ссылки v2, синхронизация мемберов
2026-09-14 19:57:27 +03:00
evgeny
a01a4ddba4
fix: UAF in _on_member_sync_done (channel_cache freed by refresh)
...
cs_flush_sync passed &cs->channels[i] as member_sync cb_arg, but the 30s
cs_refresh_channels frees/reallocs cs->channels[], leaving the arg
dangling when _session_done later fires the callback. Re-find the channel
by the (stable) ns id instead of trusting arg.
2026-09-14 15:19:07 +03:00
evgeny
9ee61dce6c
fix: ncd handle UAF in topo_recovery and topo_group_invite callbacks
...
topo_recovery_callback: detach cb on UP handoff and close handle on
DOWN/TIMEOUT so no handle with cb_arg==ctx outlives ctx (ASAN
heap-buffer-overflow in topo_recovery_callback).
tgi_to_channel_cb: force_close handle on NCD_EVENT_TIMEOUT so a late UP
cannot fire into the freed tgi_conn_ctx.
Also: android chatgui reverseLayout scroll + msg order/stable pagination.
2026-09-14 15:10:04 +03:00
evgeny
fc3295ce12
nat_detection: гасить NAT-чек при закрытии линка через link-status коллбэк (UAF na->link)
2026-09-14 14:37:34 +03:00
evgeny
e0f5afbff8
stcp: гасить on_close_cb/close_arg в stcp_link_close; keepalive: снапшот+ревалидация link до/после каскада (UAF)
2026-09-14 14:27:38 +03:00
evgeny
da329d0479
merkle_sync: ms_outq_drain_cb — сохранять e->len до etcp_send (UAF); документировать ownership etcp_send
2026-09-14 13:49:12 +03:00
evgeny
1f8ccabdbf
etcp: tcp_link_close_cb — сохранять link поля до каскада (UAF local_link_id)
2026-09-14 13:39:07 +03:00
evgeny
187bcd80b9
uasync: ре-валидация node перед последующими коллбэками (счётчик cb_called) вместо снапшота
2026-09-14 12:56:52 +03:00
evgeny
836c715299
uasync: снапшот полей socket_node в poll()/select() — защита от realloc во время коллбэков (UAF)
2026-09-14 12:47:35 +03:00
evgeny
369b253bdb
chatgui-android: автоскролл чата вниз при открытии клавиатуры и своих сообщениях
2026-09-14 12:14:44 +03:00
evgeny
d78d652bf5
shutdown: закрывать shared sqlite (topo_sqlite_db) в самом конце utun_instance_destroy (UAF при teardown)
2026-09-14 11:47:45 +03:00
evgeny
884f36c2d4
ncd: cancel connect/fin_wait таймеры в ncd_deferred_close (UAF fin_wait_timeout_cb)
2026-09-14 11:34:36 +03:00
evgeny
f2f4a37344
routing: fix use-after-free в route_ping_cancel_for_conn (чтение request_id после u_free) + формат %08x
2026-09-14 11:29:31 +03:00
evgeny
11991e688c
build: ASAN-сборка включает lib/libopus (зависимость src)
2026-09-14 11:20:12 +03:00
evgeny
d730b06436
build: доработка build_bsd_full.sh (ASAN/hardened через clang, gmake fallback, -jN, FFmpeg)
2026-09-14 11:18:05 +03:00
evgeny
d0dfa97a47
transport: SOCKS5-прокси для ETCP-линков (CONNECT + UDP ASSOCIATE + пинги)
2026-09-14 00:24:11 +03:00
evgeny
7c8d65db78
chat: локальное удаление канала (Android) + db_sync инстансы в куче
2026-09-13 22:08:33 +03:00
evgeny
ddfffad1ed
conn: сопоставление сокетов по ролям (direct/nat/local) + hairpin; NTP-детект оффлайна
...
- sock_match: единая классификация сокетов (DIRECT/NAT/LOCAL) и адресов (PUB/PRIV/UNREACH)
- eim приравнен к direct; на приватный адрес — только с приватного интерфейса;
оба EIM за одним NAT (одинаковый публичный IP) — только через LAN
- topo_node: LOCAL-сокеты рекламируются (INTERFACE), private скрыт,
NAT-адрес не рекламируется для strict и при оффлайне
- ntp: флаг reachable по циклам + пере-анонс nodeinfo при смене доступности
- cm_direct_add_links / ncd_create_links / conn_match_candidate_sockets на sock_match
- test_sock_match: unit-тесты классификации и сопоставления
2026-09-13 16:48:00 +03:00
evgeny
ff53c735dd
chat: превью медиасообщений в списке каналов (Android + desktop)
2026-09-13 15:55:33 +03:00
evgeny
07ef7d9a01
chat: живой счётчик медиакеша + сверка + DESC-проход докачки/вычистки
2026-09-13 14:49:57 +03:00
evgeny
1eb0566cb5
chat: enforce storage_total_size + media orphan cleanup; async_dns: fix use-after-free
...
- media cache: удаление сирот на старте (сверка ФС с сообщениями) + лимит
storage_total_size (удаление самых старых файлов, только старше backfill_days)
- ma_dir_walk(): кроссплатформенный рекурсивный обход каталога (POSIX/Windows)
- async_dns: первый драйв slow-пути отложен через call_soon (исключён
double-free при синхронном завершении запроса); cancel унифицирован
- chat: видимый WARN 'media too large' + честный счётчик started/skipped
2026-09-13 03:11:10 +03:00
evgeny
7bba39ddcb
nodeinfo: 2 адреса на сокет (до/после NAT) + типы адресов local/public/nat/nat_eim/nat_strict
...
- topo_node: сокет рекламирует INTERFACE (до NAT) + NAT (после NAT, EIM);
strict/direct отдельным адресом не передаются
- topo_node_sqlite: addr_type_classify различает NAT_VERIFIED_*; добавлен
ADDR_TYPE_NAT (тип неизвестен), fallback больше не даёт DIRECT по IP
- chat_member: бейдж NAT-типа по приоритету (public>nat_eim>nat>nat_strict>local)
вместо MIN(addr_type)
- GUI (desktop+android): адреса мембера с socket_id и ролью (local/public/nat/nat_eim/nat_strict)
2026-09-13 01:05:25 +03:00
evgeny
a823898379
chat/media: докачка недостающего медиа после стартовой синхронизации + HAVE_BLOCK анонс локальных блоков
2026-09-12 21:28:08 +03:00
evgeny
e636c3a420
docs: доступ на узел colo2
2026-09-12 21:24:04 +03:00
evgeny
5ee6bf53d8
conn_mgr: ping активных кандидатов с noop-колбэком вместо NULL (bad args)
2026-09-12 21:07:24 +03:00
evgeny
c6118280bd
conn_mgr: не удалять как stale кандидатов с активным соединением
2026-09-12 20:00:48 +03:00
evgeny
265008961a
conn_mgr: кандидаты-посредники из topo_node-списка (активные соединения); гейт md_super_connect по is_supernode; откат ping→best_candidates
2026-09-12 19:38:48 +03:00
evgeny
2045d4a169
media: восстановить conn_mgr_open (DIR/REV/IND) + популяция best_candidates из RTT + watchdog не трогает CONN-блоки
2026-09-12 18:47:01 +03:00
evgeny
905fde5a27
media: BLOCK_REQ транзитом — убрать требование прямого соединения (NAT-узлы качают через роутер)
2026-09-12 18:27:23 +03:00
evgeny
0055c2c6fe
media: фикс детекта суперузла (json_flat_get), backfill осиротевших медиа, fallback на автора при пустом QUERY_RESP
2026-09-12 18:19:47 +03:00
evgeny
5a83aaa786
opencode: подключить aiterm-mcp (интерактивный терминал для отладки)
2026-09-12 16:19:09 +03:00
evgeny
ce12f058d9
tcp_io: fix error_cb busy-spin on graceful EPOLLHUP; socks_proxy: close local socket on both FINs
...
- error_cb (tcp_io): при graceful HUP (SO_ERROR==0) после уже прочитанного FIN
сокет оставался в epoll и level-triggered EPOLLHUP крутил цикл на 100% CPU.
Теперь сокет закрывается через tcp_conn_push_close.
- socks_proxy on_fin_cb: при обоих обменянных FIN локальный сокет закрывается
(send_close + push_close), симметрично exit-стороне (tcp_proxy_server).
2026-09-12 16:08:14 +03:00
evgeny
56d0928632
etcp: wire-MTU кап 2048→1500 (согласовано с TUN_MAX_PACKET_SIZE), enc_buf привязан к MTU; тест multilink: per-link проверка трафика с ретраем через keepalive-тики
2026-09-12 13:53:55 +03:00
evgeny
13e2697f80
test_etcp_link_stress: переписан — 5 вариантов добавления линков (V1/V2, коллизии V3a/b/c), kill/failover и инвариант «нет реинита при живом линке»; фикс stack buffer overflow в etcp_encrypt_send (enc_buf 1600→2048)
2026-09-12 13:31:37 +03:00
evgeny
42a94aa916
BGP: фикс владения адресами в реестре (мульти-группа), проброс group_id в сервис (conn_mgr per-group), membership-фильтр create_group; тест media через chat-группу
2026-09-12 02:13:34 +03:00
evgeny
6c9a47b201
media_delivery: диагностика маршрутизации md_send/md_dl_send/router_deliver (conn, subcmd, no-route) + тест test_media_delivery_chat
2026-09-11 23:48:31 +03:00
evgeny
d7bb58c6fb
chat: автоподключение к узлам группы (вкл/выкл) + ручной connect к узлу (desktop+android); фикс reinit при QR-join
2026-09-11 19:46:02 +03:00
evgeny
9ef501a2fb
etcp_connections: собрать forward-объявления в блок и добавить пояснения к функциям
2026-09-11 18:13:48 +03:00
evgeny
d95048160d
etcp: закрыть UAF в клиентской ветке tcp_link_close_cb
...
etcp_on_link_down может каскадно закрыть conn и освободить link;
использовать сохранённый etcp и проверять state!=2 перед reconnect
2026-09-11 17:46:38 +03:00
evgeny
be1f08b43e
etcp: защита от UAF в start_keepalive_timer/enter_ready_tcp + диагностика указателей
...
- start_keepalive_timer: guard !link->etcp->instance->ua (SIGSEGV на 80 строке)
- etcp_link_enter_ready_tcp: return при etcp->state==2 после reinit/apply_reset/conn_ready
- tcp_server_on_link/enter_ready_tcp: DEBUG_CATEGORY_DEBUG с адресами link/etcp/inst/ua
- topo_node: убрать лишние DEBUG_CATEGORY_DEBUG (chain_rtt)
2026-09-11 17:13:35 +03:00
evgeny
7de636be6e
topo: убрать ALTER-миграции, backfill deleted из adm_tags
2026-09-11 16:48:15 +03:00
evgeny
b7da6547c1
connection: логировать только connect/reconnect/disconnect; фиксы конфига чатгуи
...
- категория connection теперь только жизненный цикл соединения; INIT/PING/keepalive
переклассифицированы в ETCP/SOCKET/KEEPALIVE/REALITY/ROUTING, удалены дубли
- settingsdialog: устранён дубль my_node_name в конфиге (двухпроходная запись + только при изменении)
- storagesettingspage: канонические ключи storage_total_size/storage_unit_size с суффиксом M/G
- audiodevicesettingspage: compressor_max_gain_db min 0→1
- etcp_connections: %s-баг в логе TCP link (addr → sockaddr_storage_to_str)
- docs/sample: [chatserver], актуализированы ключи хранилища
2026-09-11 15:24:56 +03:00
evgeny
b7669eea36
Fix use-after-free of ETCP_LINK in keepalive_timer_cb
2026-09-11 13:21:35 +03:00
evgeny
70a18c8be8
etcp: чистка — убрать мёртвый peer_id/guard reset_id, поправить комментарий STCP_HS
2026-09-11 11:59:48 +03:00
evgeny
f36ad8903a
etcp: убрать session_id из INIT/STCP handshake, симметричная эпоха reset_id
2026-09-11 11:57:29 +03:00
evgeny
ab6773a313
etcp: перепривязка/своп remote_link_id при INIT со сменённым адресом (NAT)
2026-09-10 21:20:26 +03:00
evgeny
311cee0ee1
Fix group node scan stall and UAF on server link teardown
...
- node_conn_direct_close: immediate conn cleanup when links are down
(graceful fin_wait on a down conn left a lingering entry, so re-open
in Phase3 stuck in 'pending' with no timer and scan never continued)
- tcp_link_close_cb: skip etcp_link_close if conn was already closed
synchronously during etcp_on_link_down cascade (fixes use-after-free)
2026-09-10 19:01:21 +03:00
evgeny
5633903be0
stcp: закрывать принятые коннекты в stcp_server_destroy (UAF server_tlink->conn после tcp_socket_remove)
2026-09-10 17:53:14 +03:00
evgeny
6a674b3422
etcp: etcp_inflight_nullify_link читал entry->data вместо entry — last_link не обнулялся (UAF в bbr/retrans)
2026-09-10 17:53:14 +03:00
evgeny
fdad786744
etcp: сбрасывать last_rr_link при закрытии линка в обеих ветках (use-after-free в loadbalancer)
2026-09-10 17:20:19 +03:00
evgeny
ee8b2a4a45
chat: deleted-флаг выводить из adm_tags — member_block_put вместо деструктивного member_put, удалить member_put, фильтр deleted=0 в списках
2026-09-10 17:20:18 +03:00
evgeny
94136564ee
platform_compat: выбирать глобальный IPv6 (2000::/3) вместо ULA при выборе адреса интерфейса
2026-09-10 17:20:17 +03:00
evgeny
327aac1c12
ncd: убрать временные DEBUG_CATEGORY_DEBUG логи (scan_conns, open/open_node dedup)
2026-09-10 16:01:57 +03:00
evgeny
e75e3750aa
ncd: синхронный close timed_out-conn чтобы не было коллизии линков при cycle_restart
2026-09-10 15:57:07 +03:00
evgeny
d886a2ff84
Диагностика коллизии линков + детектор дубликата node_id + reality-конфиг autogen
2026-09-10 14:40:45 +03:00
evgeny
c2882c533e
reality: конфиг [client] для REALITY-клиентов (server_name/short_id/public_key/version/fingerprint) + TCP-линки через NCD
2026-09-10 12:33:16 +03:00
evgeny
898a0a4a66
reality: реклама reality-параметров сокетов через BGP и применение к исходящим TCP-линкам
2026-09-10 11:24:17 +03:00
evgeny
edb3bb36e1
reality: TLS-камуфляж для STCP (ClientHello/ServerHello + релей на реальный сайт)
2026-09-10 01:11:26 +03:00
evgeny
0f308fdbd7
chatgui/chatgui-android: уведомления со звуком, флаги и прочие улучшения UI
2026-09-10 00:23:14 +03:00
evgeny
6c857ceab8
chat: обрабатывать CHANNEL_INVITE/INFO_REQ для ещё не созданного канала + GUI-результат invite-by-link
...
- chat_sync: не дропать CHANNEL_INVITE/CHANNEL_INFO_REQ при отсутствии CHAT-группы (group_id == channel_id, выводим ch_id напрямую) — приглашение по ссылке на сервер теперь доходит до autojoin
- inviteby: регистрация connect_result_cb, показ результата, автозакрытие при успехе
- joindialog: исправлен маппинг кодов результата (2=timeout, -1=not found, -7=not init)
2026-09-09 22:13:52 +03:00
evgeny
22da6bd832
chatgui: открывать SQLite-БД до auto_socket_init (переиспользование портов)
2026-09-09 21:29:27 +03:00
evgeny
738ac8928b
tests: fix mkdtemp cross-platform in test_media_delivery_download
2026-09-09 20:32:48 +03:00
evgeny
e3168d1e55
Удалить обмен метриками ETCP (ETCP_SECTION_METRICS)
...
Полностью убрана фича периодического обмена CSV-метриками с Ed25519-подписью:
- ETCP_SECTION_METRICS и парсинг/верификация секции
- struct etcp_metrics, etcp_metrics_add_*/start/stop и снапшот-таймер
- мёртвый API on_metrics_rcvd/metrics_user_ptr (никто не подписан)
- link->remote_ed25519_pubkey (заполнялся только на клиенте → верификация на сервере всегда падала)
- stats_dir в UTUN_INSTANCE
Общий sc_stream_sign_* (деривация Ed25519 из X25519) и INIT-передача обоих ключей сохранены.
2026-09-09 19:59:29 +03:00
evgeny
5b31a765c2
chatgui-android: auto_sockets=android — сокеты из конфига, лёгкое обновление без полного рестарта
...
- auto_sockets три-режимный: off/system/android; android берёт сокеты из [server] конфига
- auto_socket_reload_config: reconcile сокетов (remove→create) по имени+addr:port, сохранение портов
- etcp_create_server_socket вынесен из init_sockets; stcp_server_list_find_by_sock
- instance_lite_update_sockets + JNI nativeUpdateSockets + NativeLib.updateSockets
- NetworkChangeMonitor: updateSockets вместо restart; порты сохраняются при смене сети
2026-09-09 17:34:46 +03:00
evgeny
c474c37284
chatgui/chatgui-android: просмотр изображений с зумом + инфо о медиа
...
- chatgui: просмотрщик изображений (ImageViewerWindow) с зумом/поворотом
- chatgui: отправка картинок как image с определением разрешения и типа
- chatgui: у видео-пузыря строка info (res·size·bitrate) и бейдж только длительность
- chatgui: контекстное меню медиа (сохранить в файл/скачать)
- chatgui-android: большие emoji-only сообщения, битрейт/разрешение у видео
- chatgui-android: сохранение неактивных интерфейсов как закомментированные секции
- chatgui-android: отправка картинок по расширению (jpg/png/gif/bmp/webp)
- photo_sender: content-type и расширение по типу файла
2026-09-09 16:18:26 +03:00
evgeny
ca16b46404
chatgui-android: съёмка фото — JPEG, выбор разрешения, отправка аттачем, просмотр с зумом
2026-09-08 20:02:40 +03:00
evgeny
c94acd892e
chatgui: автозакрытие видеоплеера по завершении воспроизведения
2026-09-08 20:02:37 +03:00
evgeny
73e81032bc
chatgui-android: видеосообщения — запись, выбор камеры, качество, подсветка
...
- C-слой: video_sender (content_type video/mp4, media_video=0 без FFmpeg)
- chat_msg_submit: duration/width/height для метаданных видео в теле сообщения
- JNI: nativeVideoSend + NativeLib/Repository/ViewModel
- VideoRecordScreen: CameraX VideoCapture, 4 пресета качества (разрешение+битрейт),
выбор камеры (селфи/широкая/обычная/макро/теле по фокусу), тумблер подсветки,
запись/пауза/отправить, лимит 60с
- InputBar: единая кнопка — короткий тап переключает voice/video, удержание — запись
- режим камеры/микрофона сохраняется в ViewModel
2026-09-08 18:38:18 +03:00
evgeny
fe1726ebea
chatgui-android: видеоплеер — зум, поворот, полноэкранный режим
2026-09-08 16:39:59 +03:00
evgeny
aa166a2030
topo_group: RESYNC — пассивная сторона перезапускает BGP-обмен после флэпа
...
Сервер (пассивная сторона) на UP шлёт общий RESYNC, клиент по нему
заново анонсирует группы (JOIN_GROUP), которые ему положены по конфигу.
Чинит потерю маршрутов при одностороннем флэпе, когда клиент не замечает
разрыв и не перешлёт JOIN_GROUP повторно.
2026-09-08 16:39:55 +03:00
evgeny
f28d3e91f7
media: рефакторинг загрузки блоков — конечный автомат, фейловер, watchdog простоя
...
- media_download: состояние блока (IDLE/CONN/REQ/RECV/WAIT/DONE/FAILED),
кандидаты-держатели (MD_MAX_HOLDERS_PER_BLOCK), фейловер + ретраи (MEDIA_DL_MAX_ATTEMPTS),
watchdog простоя (MEDIA_DL_STALL_TIMEOUT_TB) вместо фейкового времени
- media_delivery: настраиваемые dl_stall_timeout_tb / dl_max_attempts
- chat_msg: пометка ошибки скачивания в local_attrs ("st":"er") для UI
- tests: новый test_media_download_timeout (watchdog/фейловер), рефакторинг
test_media_delivery_download/full
- chatgui-android: состояние 'error' у вложений/видео (иконка + tap to retry)
2026-09-08 06:53:48 +03:00
evgeny
089bbe5189
chatgui: запуск на XWayland (xcb) + ручной move/resize с пропорцией
...
- main.cpp: на Linux принудительно QT_QPA_PLATFORM=xcb (если не задан) — на Wayland
композитор владеет позицией окна, на XWayland ручной move/resize работает полностью
- videoplayer_window: вернуть ручной move + ручной resize с пропорцией (один путь,
без платформозависимого нативного startSystemMove/Resize)
2026-09-08 06:48:23 +03:00
evgeny
0dfb39cfcb
chatgui: гибридный resize — нативный на Wayland (край тянется), ручной с пропорцией на X11/Windows
2026-09-08 02:47:59 +03:00
evgeny
3adf9871fb
chatgui: вернуть ручной resize с пропорцией (двигает окно, край под мышью) + фикс перемотки
...
- resize: ручной setGeometry с живой пропорцией (якорь = противоположный край);
drag — нативный startSystemMove
- перемотка: QProxyStyle SH_Slider_AbsoluteSetButtons=LeftButton вместо сломанного
SeekSlider (sliderReleased не эмитился — seekMs не вызывался)
2026-09-08 02:39:06 +03:00
evgeny
645591bb64
chatgui: нативный move/resize (Wayland) + фикс замирания видео при перемотке
...
- окно: startSystemMove/startSystemResize вместо ручного move/setGeometry
(Wayland игнорирует позицию окна) — драг и resize за левый/верхний край работают
- пропорции: снэп к videoAspect после нативного resize (дебаунс 150мс)
- перемотка: backpressure по m_buffered (декод не убегает вперёд и воркер живёт
для seek), seek через av_seek_frame(-1, us), пропуск кадров с AV_NOPTS_VALUE
- SeekSlider: клик по шкале = прыжок к позиции
- крестик закрытия справа вверху; курсор контролов — стрелка
- test_video_engine: проверка seek
2026-09-08 02:04:18 +03:00
evgeny
f2b34459c3
chatgui: баббл видео — размер + время m:ss (напр. 1.5MB · 0:45)
2026-09-08 01:47:32 +03:00
evgeny
d09a6af52a
chatgui: плеер — фикс drag, центр/fullscreen при открытии, resize за края с сохранением пропорций
...
- m_render WA_TransparentForMouseEvents — события мыши напрямую в окно (drag работает)
- открытие: видео влезает — натуральный размер по центру; больше экрана — fullscreen
- resize мышью за 4 края и 4 угла, пропорции сохраняются (якорь = противоположный край)
- нижний край доступен через eventFilter на панели контролов (пустые поля пропагируют)
- сброс fullscreen при повторном playFile
2026-09-08 01:31:12 +03:00
evgeny
76182d018f
chatgui: QPointer-защита при генерации превью в фоне
2026-09-08 01:01:28 +03:00
evgeny
74b17685f7
chatgui: фикс синхронизации кадров (часы не убегают вперёд при быстром декоде) + smoke-тест движка
...
- presentTick: кадры всегда по мастер-часам, завершение только когда очередь пуста
- clockMs: по окончании аудио часы в конец (хвостовые кадры не теряются)
- fallback на системные часы, если аудио-устройство недоступно
- tests/test_video_engine: smoke-тест FFmpeg-декодера (opened/frames/seek)
2026-09-08 01:00:38 +03:00
evgeny
6542618927
chatgui: воспроизведение видео — FFmpeg-плеер + frameless окно
...
- videoplayer_engine: декод в worker-потоке (FFmpeg), A/V sync по аудио-курсору,
seek с epoch-защитой от устаревших кадров
- videoplayer_window: окно без рамки, drag-перенос, dblclick/Alt+Enter fullscreen,
Esc закрытие, timeline + play/pause/close, авто-скрытие контролов
- видео-баббл в списке: превью-кадр (jpg), play-оверлей, длительность, прогресс
- превью извлекается после скачивания (video_extract_thumbnail) в фоне
- mainwindow: синглтон-плеер, openVideoRequested → openVideo
- CMake: HAVE_FFMPEG для vibechat
2026-09-08 00:55:06 +03:00
evgeny
e264b8aaa7
video: video_extract_thumbnail — превью первого кадра в JPEG (MJPEG)
2026-09-08 00:44:01 +03:00
evgeny
7f3b4f61f4
chat: dur/w/h в тело видео-сообщения (после транскода)
2026-09-08 00:41:43 +03:00
evgeny
1855c61275
video: отправка видео-сообщений (FFmpeg пробинг+транскод H.264/AAC MP4)
...
- src/video/: video_probe/video_get_info/video_transcode_start (FFmpeg, HAVE_FFMPEG)
- chat_core/chat_msg: media_video флаг, chat_core_submit_media_message, транскод перед index
- headless: команда attach с --video
- chatgui: диалог 'Как видео' + прогресс транскода + sendVideoAttachment
- FFmpeg в сборке (configure.ac, Makefile.am, chatgui CMake, build_nix.sh)
- debug: категория DEBUG_CATEGORY_VIDEO
2026-09-08 00:41:04 +03:00
evgeny
c8bd5975ae
chatgui-android: invite-ссылки с выбором узла входа в GUI + desktop dialog layout
2026-09-07 22:36:27 +03:00
evgeny
ba557e2b9d
chat: фикс 0:00 у длинных голосовых — b64_decode терял последний байт без padding + formatTime в мс
2026-09-07 22:36:23 +03:00
evgeny
1345f44e10
chat: invite-ссылки с выбором достижимого узла + tcp_io фикс half-close FIN
...
- Общий модуль invite_build: сборка utun://-ссылок, авто-выбор лучшего
достижимого узла, список кандидатов (вынесено из android jni_bridge)
- chatgui: диалог invite с выбором узла (комбобокс), события INVITE_CANDIDATES /
INVITE_LINK_READY через gui_bridge
- headless/chatcli: invite <ch_id> [node_id], команда invite_nodes
- tcp_io: error_cb отличает грациозный EPOLLHUP (SO_ERROR==0) от реальной ошибки —
при приостановленном чтении FIN не роняет недослейные данные (фикс flaky half-close)
- run_test.sh: half-close echo на выделенном порту 19190 + отдельный DNAT (был недостижим)
2026-09-07 13:59:15 +03:00
evgeny
a17a85a383
chat: deleted-аккаунты — колонка deleted, скрытие/зачёркивание, не подключаемся
2026-09-07 01:40:53 +03:00
evgeny
631a176944
chat: права админа + member tags (verified/deleted) + ncd revive
...
- chat_admin: передача канальных privkey другому узлу (encrypted+signed,
ETCP_RT_ID_ADMIN_KEY), событие ADMIN_KEY_RECEIVED
- member_sync/bridge: tags verified/deleted, is_channel_owner, transfer_admin
(android JNI + chatgui memberpropsdialog)
- node_conn_direct: оживление timed_out entry — обновление линков в существующем
conn (убрать старые, добавить новые) + немедленная очистка не поднявшегося
conn без fin_wait — фикс invite/reconnect
2026-09-07 00:53:41 +03:00
evgeny
6163f34ce1
etcp_router: эпоха reset_id на wire + master/slave — фикс потери пакетов при рестарте пира
2026-09-06 22:20:08 +03:00
evgeny
61c572cae4
etcp: reset_id эпоха ресета — фикс потери NODEINFO при флапе
...
Добавлен 64-битный reset_id (эпоха ресета) в INIT-фреймы и STCP-handshake:
- генерится один раз при создании conn, меняется только при фатальном ресете
(normalizer desync / bad fragment size);
- при приёме чужого id slave принимает эпоху пира и ресетится, master держит свою;
- первый id принимается без ресета (свежие при init);
- «tcp peer clean» реинит гейтится по смене id — нет повторного сброса seq.
Это устраняет коллизию seq=1 (RX dup) из-за двойного реинита нескольких TCP-линков,
из-за которой NODEINFO пира терялся и member не возвращался online.
Также: chat member online теперь из topo_group (без БД/merkle), тест test_etcp_seq_collision.
2026-09-06 21:50:06 +03:00
evgeny
f7c08f8f5e
nat_detection: применять NAT-тип через topo_node_update_my_addresses с переподписью
2026-09-06 01:29:07 +03:00
evgeny
53bce51201
etcp_router: корректный handshake/restart без таймаут-петли
...
- START на первом пакете сеанса (seq=0), гейт отправки до первого ACK
- дедуп рестарта по payload init-пакета (ретрансмит START не триггерит рестарт)
- RST переинициализирует только отправку (без CLOSE_ALL), дедуп повторных RST
2026-09-06 00:33:45 +03:00
evgeny
232ad2de6b
etcp_router: разделить служебные функции и API в хедере + чистка мёртвого кода
...
- etcp_router.h: 4 секции (протокол / внутренние структуры / API / служебные)
- переименование router_set_max_inflight -> etcp_router_set_max_inflight
- удалены неиспользуемые: input_q_count, waiter_register/cancel, conn_close_async
(+ поля close_callback/close_callback_arg)
- docs: актуализировать backpressure (on_send_ready на send_q) вместо удалённого waiter API
2026-09-05 22:34:00 +03:00
evgeny
4b9b0009d8
chat: гейт авто-синхронизации db_sync до member_sync/pubkeys + member tags (verified/deleted) в chatgui
2026-09-05 20:38:22 +03:00
evgeny
01ea6913ae
etcp_router: sess_id как локальный счётчик переустановок (не в протоколе)
2026-09-05 20:38:17 +03:00
evgeny
2d04bf941b
etcp_router: вынести подпись/шифрование в route_crypto, одна функция отправки с флагами
...
- route_crypto_encode/decode: автономный пред/пост-обработчик пакета
(encrypt-then-sign, стандартный Ed25519 вместо sc_stream_sign)
- одна функция отправки etcp_route_send/etcp_router_conn_send с bitmask mode
- формат доставки: [svc_id][src][dst][rx_flags][payload] (статус подписи/шифрования)
- ROUTER_INFLIGHT хранит финальный wire-пакет (чинит потерю подписи при ретрансмите)
- дедуп инициализации: router_conn_reset/free_queues
- учёт inflight через inflight_q count (seq присваивается на enqueue)
2026-09-05 17:40:43 +03:00
evgeny
7c95ddb09b
chatgui: значок владельца канала ( 🔑 ) в шапке блока мемберов при наличии private key
2026-09-05 15:23:45 +03:00
evgeny
7817bb96aa
etcp_router: START/RST handshake для переживания рестарта пира
...
Раньше START ставился один раз при первой отправке и терялся в ретрансмите,
а принимающая сторона молча авто-синкала rx_seq на любой первый пакет —
после рестарта пира/среднего узла seq рассинхронизировались (тихий data loss
или no-ACK close). Теперь:
- Клиент: флаг start_sent «новый» до первого ACK; пока он стоит, первый
seq (0) шлётся со START, включая ретрансмит. Первый принятый ACK
(tx_acked>0) сбрасывает флаг. При рестарте conn флаг снова «новый».
- Сервер: после рестарта peer_sync_done=0 («ждёт START»). Не-START пакет →
отправка RST (через recv_conn). START → синк rx_seq + ACK → обычный режим.
- RST на принимающей стороне теперь сбрасывает локальное состояние
(etcp_router_conn_restart), а не закрывает conn.
Тесты unit обновлены: первый data-пакет сессии инжектится со START.
2026-09-05 15:03:44 +03:00
evgeny
84015176b3
etcp_router: досылать потерянный ACK при дубле (рестарт среднего узла)
...
При рестарте транзитного узла ACK приёмника терялся и не пересылался:
router_schedule_ack выходит рано при rx_seq==last_sent_ack_seq, поэтому
пир ретранслил 17 циклов (~5с), роутер-conn закрывался и цикл повторялся
бесконечно — лечилось только рестартом клиента. Теперь при дубле
(ретрансмите пира) ACK досылается с троттлингом ROUTER_ACK_INTERVAL_TB.
2026-09-05 01:17:37 +03:00
evgeny
32725657dc
chatgui-android: обработка скачивания голосовых (download state) + config: секция [chat] алиас для chatserver
2026-09-04 22:46:07 +03:00
evgeny
23fbdf4584
chat: запуск BGP-обмена при подключении узла к группе (invite + auto-connect)
2026-09-04 21:04:18 +03:00
evgeny
5b8c725c01
etcp_router: round-robin send + контроль заполненности send_q через waiter на send_input_q
2026-09-04 19:30:08 +03:00
evgeny
1a88ea88a8
topo_group: узлы меняются только по BGP (NODEINFO/WITHDRAW), удаление по link down через BGP-коллбэк
2026-09-04 17:57:37 +03:00
evgeny
b0f149092f
BGP: log node add/remove per group at info level
2026-09-04 16:45:33 +03:00
evgeny
c049788c08
etcp_router: при no route выводить список узлов группы (<10)
2026-09-04 16:39:23 +03:00
evgeny
ed2df9fe88
etcp_router: добавить кол-во узлов группы в лог no route
2026-09-04 16:25:21 +03:00
evgeny
d092f649ac
chatgui: пути db и лога относительные в конфиге, резолв к бинарнику в рантайме
2026-09-04 14:34:39 +03:00
evgeny
654202b0cb
chatgui: debug-категории в секции [debug] построчно (как в utun)
2026-09-04 13:42:59 +03:00
evgeny
20eef8ad16
chatgui: лог по умолчанию в файл chatgui.log (debug_file)
2026-09-04 13:25:06 +03:00
evgeny
656da48e35
topo_group: асимметричный старт BGP (JOIN_GROUP) + вынос group_id/flags из TOPO_NODE
...
- UTUN: BGP инициирует только сторона-клиент ([client]) и явные etcp_connect;
сервер добавляет пира по JOIN_GROUP (фикс обратного маршрута: сервер не
создавал узел клиента из-за дедупа senders_list)
- topo_group_new_conn: conn_add_path до дедупа; handle_request_table без add_to_senders
- TOPO_NODE: убраны group_id/flags (shared-реестр), передаются в topo_node_serialize
- routing/control_server: явный TOPO_GROUP_UTUN
- CHAT: гейт по peers_* (get_member_channels) + пассивное add/remove в member_sync
- tests: тесты адаптированы (route_ping ждёт registry+v4_addrs)
- chatgui-android: voice_recorder_init в utun_bridge_voice_start (idempotent)
2026-09-04 13:21:24 +03:00
evgeny
7b73d99b5b
chat: передавать group_id в бинарном виде в протоколе синхронизации
...
db_sync/merkle_sync/chat_sync шлют group_id (uint64 BE) вместо текстового
channel_id/namespace. Приёмная сторона находит группу/таблицу через
topo_groups_find(group_id) и требует существующую CHAT-группу. db_sync:
instance key заменён с SHA256(ch_id) на strtoull(ch_id)=group_id.
2026-09-04 09:02:46 +03:00
evgeny
326dfd7e2c
media_delivery: маршрутизация всегда через CHAT-группу
...
media_download/медиа-ответы и суперузловая репликация теперь берут группу
из контекста (dl->group_id, group_id из пакета, peer->group_id) вместо
хардкода TOPO_GROUP_UTUN. node_props_changed получает channel_id.
SUPER_HELLO несёт group_id.
2026-09-03 23:24:50 +03:00
evgeny
55da8fd146
media_delivery: логирование отправки QUERY_RESP и провалов md_send
2026-09-03 21:59:57 +03:00
evgeny
01b61a457a
etcp_router: fix ACK no-route — слать ACK через recv_conn
...
При асимметричной топологии topo_group_find_conn_for_node возвращает NULL,
ACK не уходит → ретрансмит-шторм → no-ACK close → inflight сбрасывается в 0.
Теперь ACK уходит через тот же коннект, с которого пришли данные (recv_conn),
с фолбэком на топологию. Довершает фикс из e08956e (deliver), который
аналогично не трогал router_send_ack.
Заодно удалён неиспользуемый ETCP_ID_ROUTE_ENTRY.
2026-09-03 20:05:59 +03:00
evgeny
fbea9c3869
socks_proxy: fix client stall + non-blocking DNS via async_dns
...
- fix HTTP_STATE_RELAY == SOCKS_STATE_CONNECTING enum collision (relay data dropped)
- fix wrong waiter cancel (etcp_router_waiter_cancel -> etcp_router_cancel_send_ready)
- add backpressure retry timer, restore lost queue_resume_callback, defer FIN on pending tx_buf
- async_dns: /etc/hosts fast-path + hosts loading (avoid 4s DNS timeout for localhost)
2026-09-03 18:13:00 +03:00
evgeny
f47ad7d87f
tcp_proxy: fix throughput (tx_queue backpressure) + connect timeout + integration test
...
- Router: unified service delivery format [svc_id][src][dst][payload] (end-to-end src/dst from SVC_ROUTE header)
- tcp_proxy_client: replace single tx_buf drop-on-backpressure with bounded tx_queue + send_q waiter + retry timer (no data loss, bulk window reopen — removes 62.5ms delayed-ACK stall)
- tcp_io: configurable connect timeout (tcp_conn_set_connect_timeout)
- tcp_proxy_server: connect_timeout config option (ms, default 2000, 0=off)
- check.sh: run tcp_proxy_full integration test with sudo (skip if passwordless sudo unavailable)
- test_tcp_io: connect timeout unit test; docs (lwip_nuances.md)
2026-09-03 13:49:09 +03:00
evgeny
acfaae2801
dns: заменить K&R-объявления указателей на функции на типизированные
...
gcc 15 (C23) трактует () как 'без аргументов', из-за чего lib/dns.c не собирался
(65 ошибок). struct dns_rr_i.sort и таблица dns_rrtypes[] переведены на явные
прототипы с typedef'ами и кастами указателей.
2026-09-02 23:59:46 +03:00
evgeny
e08956e5dc
etcp_router: fix NULL conn в deliver при отсутствии пути к узлу
...
router_handle_data_packet выбрасывал физический conn, а router_incoming_q_cb
восстанавливал его через topo_group_find_conn_for_node, который возвращает NULL,
когда у узла-источника нет пути в топологии. В итоге callback сервиса (routing,
conn_mgr) получал conn=0x0. Теперь физический conn сохраняется в rconn->recv_conn
и прокидывается в deliver.
2026-09-02 23:59:41 +03:00
evgeny
1db4fe1f01
build_linux_full.sh: автоустановка зависимостей и корректная обработка ошибок
2026-09-02 21:29:48 +03:00
evgeny
5d39083a6d
auto_socket: пропускать интерфейсы без default-маршрута (опция auto_socket_skip_no_default_route, default=on)
2026-08-17 23:43:15 +03:00
evgeny
f841a964aa
chat: debug-логи на джойнер-стороне (channel_put, JOIN sent, WELCOME self-add)
2026-08-17 22:53:03 +03:00
jeka
10306f5613
chat: fix CHANNEL_INVITE invalid ch_sig — передавать владельца канала из БД, а не node_id отправителя
2026-08-17 21:16:44 +03:00
evgeny
7dee49ce63
android: мониторинг смены сети — NetworkChangeMonitor, перезапуск ядра при смене интерфейса
2026-08-17 21:03:05 +03:00
evgeny
f3b33bcf74
android: кнопки start/stop сервиса с сохранением состояния, ядро не воскресает при остановленном сервисе
...
- ConfigProvider: флаг service_enabled (DataStore), flow/getter/setter
- MainActivity: автозапуск сервиса только при service_enabled; edge-to-edge со светлыми иконками статус-бара
- SettingsScreen: секция Service (start/stop), stop/exit сохраняет состояние; NativeLib.restart гейтится по isReady чтобы ядро не запускалось без сервиса
2026-08-17 14:37:54 +03:00
evgeny
3d59e5f322
chat: headless invite_to command + invite-flow integration test
...
- chat_headless_control.c: новая команда invite_to (inviter-side invite по адресам)
- chat_client.py / chatcli: клиентский метод и CLI-команда invite_to
- tools/chat_invite_test.py: headless-тест инвайтера-side (CHANNEL_INVITE → autojoin → member_sync)
- topo: guard node_id=0 в cm_open/process_nodeinfo + детализация send_nodeinfo warn
- cleanup: удалить устаревшие doc/*.txt, *.md заметки
2026-08-17 11:22:40 +03:00
evgeny
5316ee958a
android: ограничить карточку members половиной экрана, CONFIGURE_DEPENDS для GLOB
2026-08-16 23:50:14 +03:00
evgeny
383a45ed47
chatgui: setup_firewall.bat — разрешить входящие в Windows Firewall для vibechat.exe
...
Отдельный self-elevating скрипт: добавляет program-правило (dir=in action=allow
profile=any) для vibechat.exe, копируется в build-каталог рядом с exe.
2026-08-16 23:23:52 +03:00
evgeny
4ca8348a75
chatgui: хранить last_channel_id в БД (ui_state) вместо QSettings
...
Восстановление канала только если он существует; запись из utun-потока
через trampoline, чтобы не трогать sqlite из GUI-потока.
2026-08-16 22:34:14 +03:00
evgeny
eb24736e27
topo: держать актуальные self-адреса в node_addresses, обновлять/рассылать только при изменении
...
topo_node_update_my_addresses теперь собирает адреса во временные списки,
сравнивает со старыми и при отсутствии изменений выходит без бампа ver,
записи в БД и broadcast. Гейт member_exists убран: self-адреса пишутся
в node_addresses при любом запуске/изменении (с гарантией строки nodes для FK).
addrs_put логирует ошибки INSERT.
2026-08-16 22:34:10 +03:00
evgeny
54352c17ba
chatgui: opus из исходников в CMake + build_nix.sh под Linux/BSD
2026-08-16 14:35:59 +03:00
Evgeny
b4722f54f0
dns: убрать weak-атрибут у dns_random — на MinGW слабые data-символы не инициализируются → NULL-вызов → SIGSEGV
2026-08-16 12:58:40 +03:00
Evgeny
0c3398eb8c
dns: исправить сборку под Windows (MinGW)
...
- dns.c: #define uint32_t → #include <stdint.h> (на UCRT64 stdint.h уже тянется через winsock2.h, макро даёт 'duplicate unsigned')
- async_dns.c: p->IpAddress → p->IpAddress.String (IP_ADDR_STRING.IpAddress — IP_ADDRESS_STRING, не char*)
2026-08-16 12:18:07 +03:00
Evgeny
1f307046f9
dns: async_dns модуль (libdns) + неблокирующий NTP sync
...
- Вендор libdns (MIT) как lib/dns.{c,h}; правка dns_quietinit для GCC 5+
- Новый lib/async_dns.{c,h}: неблокирующий A-резолвер поверх uasync
- src/ntp_time.c: убраны блокирующие getaddrinfo+select; async DNS + неблокирующая машина состояний UDP-запроса
- test_async_dns.c (юнит) + test_ntp.c сценарий hostname→DNS
- сборка: -DDNS_RANDOM=RAND_bytes, -lcrypto в COMMON_LIBS
2026-08-16 12:10:33 +03:00
evgeny
d04e9d58b6
etcp: TCP-ping через STCP-хендшейк с флагом PING
...
- STCP-хендшейк: добавлен байт флагов (STCP_HANDSHAKE_FLAG_PING), HS_ENC 46→47
- stcp_client: stcp_ping_send() — connect+handshake(PING)+rtt+close; ошибка/таймаут → success=0
- stcp_server: детект флага, ответ с эхо-флагом, мягкое закрытие (close_after_send)
- etcp_connections: etcp_send_tcp_ping(), guard is_tcp/fd и проверка возврата send_ping_raw
- route_connectivity: probe TCP-адресов через TCP-ping (1 попытка), UDP-кандидаты без TCP-сокетов
- tests: test_stcp_ping (success+failure path), обновлена сигнатура stcp_client_connect
2026-08-16 10:10:58 +03:00
Evgeny
c7b9702c88
chatgui: add CONFIGURE_DEPENDS to libutun globs — pickup new .c files without clean rebuild
2026-08-16 10:09:26 +03:00
evgeny
aee44943fa
topo: invite вынесен в topo_group_invite, conn_mgr упрощён до 3-фазного open; member_sync: полный пересчёт merkle-дерева при старте
...
- topo_group_invite.c/h: invite/join через DIRECT + INVITE_INFO_REQ/RESP (из conn_mgr)
- conn_mgr: conn_mgr_open_invite → conn_mgr_open, убран invite-режим (-480 строк)
- topo_group_connect: подключение через node_conn_direct вместо conn_mgr
- member_sync: _rebuild_all_trees сносит merkle_tree_hash канала и собирает заново из peers (чистка осиротевших листов)
- member_sync: хеш блока A/B (update_sig/adm_tags) в док-комментариях
- обновлены doc-файлы и тесты
2026-08-16 09:19:09 +03:00
evgeny
1899f3a00f
chat: verify_and_purge — единственное удаление мембера (битая подпись при чтении из БД)
2026-08-16 08:35:19 +03:00
evgeny
7f160666d9
chat: BGP→member_sync→consumers callback, BGP не удаляет member, member_sync не лезет в BGP-RAM
2026-08-16 08:31:14 +03:00
evgeny
195e903fe6
chat: колонка source (плейсхолдер topo_group, вне merkle-хеша) + placeholder_put
2026-08-16 08:18:12 +03:00
evgeny
b69dcb4eab
chat: убрать PEER_REMOVE (conn_down ≠ удаление мембера), удалить мёртвый member_sync_del
2026-08-16 08:14:28 +03:00
evgeny
f550c80592
conn_mgr: унифицировать адреса из BGP и базы, TCP sock_meta, протокол в DIRECT
2026-08-15 14:39:14 +03:00
evgeny
5c2501b4f3
chat: BGP-driven address sync, member identity verify, join_sig fix
...
- Адреса узлов вынесены из wire-протокола member_sync/merkle/join/welcome
в BGP/topo_group: node_addresses теперь пишет только topo_node_sqlite_addrs_put
(источник истины ni->v4/v6_addrs), классификация config_type/nat_type в sockmeta
- Жёсткая анти-подделка: node_id=derive(x25519), ed25519 сверяется с доверенной
таблицей nodes, NODEINFO node_id/pubkey mismatch отклоняется как forgery
- Единые member_sync_build_join_msg (112Б) и member_sync_build_update_msg:
устранён баг _verify_join_sig (join_ts по смещению 80 вместо 104, длина 104→112),
который рушил приём мемберов; все 7 мест подписи/проверки join_sig через хелпер
- Единое обновление своего мембера chat_core_update_my_member (вместо sync_my_addresses)
- Android standby: пауза таймеров (broadcast/db_sync/merkle_sync/chat_sync) через standby_wait
- name[16] → name[MAX_CONN_NAME_LEN] с truncation-warning в парсере
- conn_mgr: etcp_connect_cancel_by_node (use-after-free при отмене invite),
промоушен conn в ncd после успешного invite
- Android GUI: foreground-gating опросов, сохранение портов интерфейсов, фикс udp-log flush
- chatgui: персистентный db_path; мелкие DEBUG-логи epoll/pool
2026-08-15 12:36:05 +03:00
evgeny
c07bd385ca
topo_node_sqlite: fix snprintf truncation warning in member_block_put
2026-08-15 12:36:05 +03:00
evgeny
a4e73acceb
db_sync: work-driven peer_check timer (stops when all peers synced)
2026-08-15 12:36:05 +03:00
evgeny
4e06db77af
chat: gate broadcast on CHANGED, my_name via update_sig, set_online local-only gating
2026-08-15 12:36:05 +03:00
evgeny
d0784a3ed7
member_sync: apply_record compare+update per-block, put/del/set_online, send_to
2026-08-15 12:36:05 +03:00
evgeny
d62c370e22
merkle_sync: per-session out_q with backpressure, WAL timer, send_to, recompute returns changed
2026-08-15 12:36:05 +03:00
evgeny
ad9235f772
topo_node_sqlite: granular member block/owner put functions
2026-08-15 12:36:05 +03:00
Evgeny
ce387d58f1
tcp_proxy_client: fix pcb double-free — завершать conn при обоих FIN, не держать pc->pcb до TIME_WAIT
2026-08-15 09:30:03 +03:00
evgeny
b203a48063
android: standby duty-cycle в фоне — defer ping/reconnect/probe через standby_wait
...
standby.h/c: duty-cycle ACTIVE/SLEEP, standby_wait() будит в burst сразу,
в SLEEP — до следующего burst; notify_network_activity для раннего пробуждения.
Интеграция (по флагу UTUN_HAVE_STANDBY, десктоп без изменений):
- conn_mgr: bg_ping/candidate_ping в SLEEP defer через standby_wait
- route_connectivity: probe_node откладывается (PROBE_STATUS_DEFERRED)
- topo_group_connect: пауза между попытками — активный режим 1с, фон standby_wait
- jni_bridge/ConfigProvider/NetworkActivityMonitor: set_active + сетевая активность
- chat_setting: standby_active_sec/sleep_sec/min_sleep_sec
+ юнит-тест test_standby (31 проверок)
2026-08-14 12:28:56 +03:00
Evgeny
1ec94de852
platform_compat: фикс Windows-сборки (Ipv4IfIndex/Ipv6IfIndex отсутствуют, GetBestInterfaceEx без const)
2026-08-13 23:15:14 +03:00
Evgeny
f347dc8edc
vibechat: single-instance (QLockFile) + переименование Chat→vibechat (бинарник, конфиг, hostname node name)
2026-08-13 23:10:43 +03:00
Evgeny
f82dca3185
auto_socket: Windows-скан + список сокетов в Network Settings (add/remove, чистый rewrite конфига)
2026-08-13 22:58:52 +03:00
Evgeny
d5119ac7c6
invite: не добавлять TCP-сокет в UDP-адреса; показывать протокол в Join
2026-08-13 21:51:54 +03:00
evgeny
b0753bc19d
android: кнопка invite в чате + фикс тап-зоны #, вывод протокола линков участника
2026-08-13 21:26:55 +03:00
Evgeny
bcea4bc335
invite: убрать BOTH-протокол — адрес либо UDP либо TCP
2026-08-13 21:24:55 +03:00
Evgeny
37ef08a015
invite: диагностика адресов в цепочке invite→etcp_connect
2026-08-13 21:11:27 +03:00
Evgeny
d166c18155
tests: exclude Linux-only test_auto_socket_dynamic from Windows build
2026-08-13 20:17:22 +03:00
Evgeny
ace19e3f44
transport: fix socket_monitor_fire_one IF_NAMESIZE (Windows build)
2026-08-13 19:55:25 +03:00
Evgeny
6fa91ecb03
transport: use IF_NAMESIZE for cross-platform if_indextoname (Windows build)
2026-08-13 19:52:32 +03:00
evgeny
00b251aa4a
test_merkle_sync: событийная сходимость вместо 20s-ожидания sync_pending
...
Стресс-тест (Stage 7) ждал sync_pending==0, но счётчик был разбалансирован
(merkle_sync_start перетирает done_cb без вызова) и никогда не доходил до 0,
из-за чего тест всегда выжигал таймаут 20s.
Теперь сходимость определяется по реальному условию — совпадению корневых
хешей — финальными раундами синка, управляемыми таймерами и done-коллбэками.
Попутно: исправлен iter==50->25, удалён мёртвый код.
2026-08-13 19:48:16 +03:00
Evgeny
b7348f3237
chat headless: cross-platform sockets via socket_compat (Windows build)
2026-08-13 19:45:38 +03:00
Evgeny
0a102a7f43
proxy: guard if_indextoname bind block for Windows (_WIN32)
2026-08-13 19:35:13 +03:00
evgeny
7a40a1b0a8
etcp tcp: статус-флоу как в UDP + упрощение STCP API
...
- etcp_link_enter_ready_tcp: убраны прямые записи got_initial_pkt/initialized/
links_up/tx_state и fire UP/INIT; переход через etcp_conn_ready +
loadbalancer_link_ready (как в UDP INIT-обработчиках)
- tcp_server_on_link: убран дублирующий gop/session-блок (проверка в
etcp_link_enter_ready_tcp единообразно), sc_init_ctx перед
sc_set_peer_public_key (фикс ctx not initialized)
- stcp_link_connect(etcp_link, addr, port) вместо config-структуры;
stcp_conn.etcp_conn для live-чтения gop/session_id при handshake
2026-08-13 19:14:14 +03:00
Evgeny
867f48c125
freebsd tun: поддержка ручного имени интерфейса (tunX) + автономер (tun)
2026-08-13 16:21:47 +03:00
Evgeny
f3679b07a1
proxy: fix double-free on exit-side tcp error (re-entrant loopback)
2026-08-12 22:51:14 +03:00
evgeny
9348706736
etcp_keepalive: протокол смены keepalive-режима (standby/normal) + событие active mode
...
- новый модуль etcp_keepalive.c/h: keepalive-пакеты, таймер, адаптивный период,
согласование при handshake вынесены из etcp_connections.c как есть
- протокол KEEPALIVE_REQ/RESP (0x09/0x0A): мобильный узел при смене active mode
шлёт желаемый режим; отвечающий считает max (standby при любом standby), не-мобильный
применяет как есть; инициатор применяет согласованный режим после RESP
- режимы: NORMAL (3с, адаптивный рост), STANDBY (30с, ka_pinned=1 без роста)
- active mode как событие: utun_add/remove_activity_cbk; подписчики topo_group
(nodeinfo) и etcp_keepalive (рассылка REQ всем линкам)
2026-08-12 20:32:57 +03:00
evgeny
ff84d0d986
1
2026-08-12 20:05:13 +03:00
evgeny
ef115e0539
android: bind v4 server to real interface IP instead of 0.0.0.0
2026-08-12 19:17:37 +03:00
evgeny
0492b19468
topo_group_connect: infinite reconnect cycle + connecting status for GUI
...
- dedup double ETCP_CONN_STATUS_UP (UDP+TCP links) in topo_group_new_conn
- close conn_mgr handle on TIMEOUT in Phase2/3 (fix stuck 'already connecting')
- infinite Phase1→2→3 cycle with pause (1s active / 30s standby)
- CHAT_EVT_CONNECTING_NODES: yellow circle in member list while connecting
- Android: client_activity wiring via onStart/onStop + nativeSetActive
- function-level comments in topo_group_connect.c
2026-08-12 18:49:16 +03:00
evgeny
54ad03185b
topo_group_connect: infinite auto-connect cycle with pause + connecting nodes notification
...
- client_activity: desktop/server now ACTIVE by default, only mobile starts STANDBY
- topo_group_connect: endless Phase1→2→3→1 cycle until connected
- Pause between failed Phase2/3 attempts: 1s active, 30s standby
- on_down always triggers cycle_restart when active_conn_count=0
- re-init destroys previous state and starts fresh
- CHAT_EVT_CONNECTING_NODES event notifies GUI of current connecting nodes
- Android: ConfigProvider default mode='auto', PTT fix, UDP log timer fix
2026-08-12 18:05:44 +03:00
evgeny
5d02a6d419
android: debug categories from GUI, fix poll log format, event loop sleeps until traffic
...
- android_jni_bridge: utun_bridge_set_debug_level actually calls debug_set_level / debug_set_category_level_by_name (was stub)
- SettingsScreen: CATEGORIES updated to match current g_debug_categories from debug_config.c
- ConfigProvider: persist category levels in [debug] section of generated INI config
- u_async: poll() log uses computed timeout_ms instead of confusing %d.%dms format
- u_async: timeout_node char name[16] → const char* name (no truncation, smaller struct)
- memory_pool: pool alloc/free debug logs moved from DEBUG to TRACE
- instance_lite: poll timeout changed from 10ms (100tb) to infinite (-1) — sleeps until traffic
- instance_lite: removed useless heartbeat timer
2026-08-12 09:02:19 +03:00
evgeny
a73cc1beea
fix: conn_reset only on got_initial_pkt==0 or sess_changed
...
- etcp_link_enter_init: new link on live conn sends NOINIT, not full reset
- etcp_link_enter_reinit: don't conn_reinit on single link recovery, preserve inflight
- handle_nl_link: fall through to remove_iface_sockets when if_indextoname fails
- duplicate INIT: add INFO log for diagnostic
Test: sequence checking (gaps=0 dups=0), exact socket/link counts, stale link
detection, conn health checks, full disconnect+reconnect phase
2026-08-12 00:18:33 +03:00
evgeny
8583d4216f
fix auto_socket: handle_nl_link silently skipped on if_indextoname failure for deleted interfaces
...
When ip link del removes an interface, the kernel sends RTM_DELLINK after the interface is unregistered from the name table.
if_indextoname fails and handle_nl_link silently returned without calling remove_iface_sockets,
causing old ETCP sockets to accumulate indefinitely.
Fix: fall through to remove_iface_sockets(ifindex) even when if_indextoname fails.
Test: added diagnostics (diag_dump_state, per-category debug levels to file) to verify socket/links cleanup.
2026-08-11 23:30:31 +03:00
evgeny
b503fa4418
etcp: cyclic link_id, link close on addr change, inflight nullify; test rewrite
2026-08-11 23:10:24 +03:00
evgeny
d4a170b5c7
auto_socket: TCP links support, chat_sync retry on socket change, link dedup by is_tcp
2026-08-11 18:57:24 +03:00
evgeny
fec3ea38a7
member detail: structured display with addresses, connections, BGP summary and socket names
...
- Extend MEMBER_DETAIL_LINK_SIZE to 63B with 20B sock_name per link
- Replace link_count with links_up/links_down (two uint16) in sock snap
- Add BGP hop list collection via topo_node_best_hop_list, post as CHAT_EVT_BGP_INFO
- Add direct RTT summary text via same event
- Rework AccountList detail panel: header + QTextEdit with monospace layout
- Display protocol (TCP/UDP), socket name line, colored dots for connections
- Show [up/down] link counts for self listen sockets
- Remove * prefix from link count display in Android
2026-08-11 16:05:35 +03:00
evgeny
5a42741d06
android: restore live member/connection updates lost in Kotlin source restore
...
- ChatRepository: MemberWire, parseMemberWire, cleanSocketName, parseMemberDetail, LinkStatus.linkId, LocalSocketState.linksUp/linksDown
- ChatViewModel: handlers 24/25/22, fix 16 (selectedMember update), 17 (in-place sync + status!=1 refresh), moder param
- MemberListScreen: compact header, no-dot addresses, TextAlign.Start connections, cleanSocketName, fonts 13sp, spacing 4dp, self *[up/down]
- SettingsScreen: linksCount -> *[linksUp/linksDown]
- NativeLib: moder in setMemberFlags JNI
2026-08-11 14:06:17 +03:00
evgeny
3f5dd43109
android: restore Kotlin sources + fix build
...
- Restore chat Kotlin sources deleted in d773f17 (refactor STCP)
from d773f17~1: ChatApplication, MainActivity, data/, headless/,
viewmodel/, ui/screens/, ui/components/
- Add InviteLinkDialog.kt (new file, never committed)
- Add missing libcrypto.a for arm64-v8a and x86_64
(cross-compiled OpenSSL 3.5.5 via NDK 29)
- Build and install successful
2026-08-11 13:50:45 +03:00
evgeny
f667e7bd74
fix: prevent use-after-free in etcp_ack_recv when link closed with pending inflight
...
When etcp_link_close() frees a link while INFLIGHT_PACKET entries
still reference it via last_link, a later ACK causes SIGSEGV in
bbr_main(link->bbr=NULL).
Fix:
- etcp_inflight_nullify_link(): nullifies last_link in both
input_wait_ack and input_send_q for entries pointing to dead_link
- Called from etcp_link_close() before u_free(link)
- Guard etcp_ack_recv: check acked_pkt->last_link->bbr before
accessing BBR/inflight stats
- Also fix bbr leak in etcp_link_close !link->conn path
Verified: 30/30 runs of test_etcp_link_stress pass (was ~50% crash)
Full suite: 71/71 pass
2026-08-11 13:37:42 +03:00
evgeny
63b1f1bc16
fix: init client_type and keepalive_interval in utun_instance_init()
...
utun_instance_init() did not call instance_init_common(), leaving
instance->client_type and instance->keepalive_interval as 0.
This broke the INIT handshake in V4 protocol: server wrote
keepalive=0 into INIT_RESPONSE, causing negotiate_keepalive
to see 0 and client to receive empty keepalive.
Also added guard: keepalive < 100ms clamped to 100ms with ERROR log.
2026-08-11 13:31:18 +03:00
evgeny
bd6cd17bdf
tests: fix close/restart detection after loopback_conn change
...
bb0866b changed close/restart notifications from NULL to loopback_conn().
Remove !conn check — use entry->len==9 alone to distinguish (9 bytes = svc_id+node_id, data always longer).
2026-08-11 12:21:10 +03:00
evgeny
0f1bd3d120
keepalive handshake: device_type + keepalive negotiation in UDP/TCP INIT
...
- Добавлен device_type (1 байт, CLIENT_TYPE_*) в INIT_REQUEST и INIT_RESPONSE
- Добавлен keepalive_interval (2 байта) в INIT_RESPONSE
- STCP handshake расширен с 43 до 46 байт (device_type+keepalive)
- negotiate_keepalive(): оба desktop/server → min, иначе (есть mobile) → max
- keepalive_interval вынесен в UTUN_INSTANCE для использования в handshake
- stcp_client_connect() принимает device_type и keepalive_interval
- peer_device_type/peer_keepalive_interval передаются через stcp_link в ETCP_LINK
2026-08-11 11:16:27 +03:00
Evgeny
43aca4a41b
tcp_proxy_server: fix reentrant UAF in read_queue_drain_cb via loopback
2026-08-10 22:25:16 +03:00
Evgeny
e7623e38b2
config_parser: add missing tcp_proxy_server options (fib, so_mark, netif, bind_ip); tcp_proxy_server: move diag log to TRACE
2026-08-10 22:07:12 +03:00
Evgeny
bb0866b4c3
tcp_proxy: split svc_id into SERVER(0x04) and CLIENT(0x08), fix loopback conn=NULL
2026-08-10 22:00:39 +03:00
Evgeny
5a404fbc97
tcp_proxy_server: add fib/so_mark/netif/bind_ip socket options
2026-08-10 20:12:07 +03:00
evgeny
544c77efff
unify TCP_SOCKET into ETCP_SOCKET with is_tcp flag; add local+remote addr to member detail links with arrow display
2026-08-10 12:06:32 +03:00
evgeny
477b4dfc98
move is_server indicator from per-connection to per-link in member detail and links JSON
2026-08-10 10:58:14 +03:00
evgeny
496f0f7d2b
add server/client (S/C) indicator based on ETCP_LINK.is_server in connection monitor, member detail, and Android JSON
2026-08-10 10:47:52 +03:00
evgeny
cf956cf2f0
add proxy server/client indicator (S/C) in connection monitor
2026-08-10 10:30:07 +03:00
evgeny
f1941e61a2
fix: MemberLinkSnap/MemberSockSnap port int→uint16_t avoids stack garbage
2026-08-10 10:03:43 +03:00
evgeny
312876a0b2
fix: add strbuf.c/h to lib/Makefile.am
2026-08-10 00:20:02 +03:00
evgeny
f2228202e3
fix: FORTIFY vsnprintf crash on Android + foreground service type
...
Root cause: etcp_on_up/etcp_on_down/etcp_conn_process_send_queue
used fixed buffers (links_str[256], l_status[256]) with snprintf
chains in loops over links. With 15+ links (IPv6 addresses),
sizeof(buf)-offset turned negative → vsnprintf size=(size_t)(-17)
→ FORTIFY abort on Bionic.
Fixes:
- lib/strbuf.h/c: safe growable printf buffer (auto-realloc)
- etcp.c: 3 snprintf chains → strbuf
- debug_config.c: BUF_ADVANCE macro prevents offset overflow
- android_jni_bridge.c: bridge_log va_list fix, set_member_flags guard
- chat_core.c: TAGS_ADVANCE macro in tags_commit
- AndroidManifest.xml: dataSync→specialUse (time limit exhausted)
- stcp: ed25519 pubkey exchange, tcp link addr/status in JNI bridge
- etcp_router: encrypted flag + ECDH per peer-pair
- node_conn_direct: TCP link support
- topo_node: group nodes cleanup
- media_delivery: buffer overflow fix
- test_stcp: ed25519 key exchange test
- tests: invite_group_create + Makefile update
2026-08-10 00:11:30 +03:00
evgeny
ae80dae8ee
tests: add Stage 7 merkle stress test — 13 instances, 5s spam, hash convergence
...
10 spammers (1-30ms random) + 2 observers (1-10ms), star topology via hub.
5s of concurrent modifications, then verify all 13 merkle root hashes
are identical and tree is internally consistent (recompute vs stored).
2026-08-09 19:39:41 +03:00
evgeny
d8921f0e3d
merkle_sync: fix infinite WAL growth from bg_check
...
- _recompute_bucket: skip INSERT OR REPLACE when hash unchanged,
also skip DELETE when row doesn't exist (was always writing)
- bg_check interval: 100ms → 5000ms (was writing 10x/sec × 4KB/page
into WAL = ~1.4GB over hours)
- bg_timer: round-robin across channels instead of only first
- bg_timer: periodic WAL checkpoint (every ~60s) to prevent
unbounded WAL growth from any source
- test: sync ms_session struct copy with real definition
- stcp_link: handle race where conn already CLOSED before close
- stcp_client: remove double-free c->free_on_close = cli
- etcp_connections: stcp_link_close on TCP link down
- u_async: round sub-ms timeouts to 1ms to avoid busy-loop
2026-08-09 19:25:36 +03:00
Evgeny
a646b35b9a
etcp_router: router_deliver INFO→TRACE (спам на каждый пакет)
2026-08-09 18:15:25 +03:00
Evgeny
e71f68736b
socket_monitor: fix RT_ROUNDUP + пропавшая скобка функции (FreeBSD)
2026-08-09 17:56:39 +03:00
Evgeny
f9417f06b4
BSD route sockaddr парсинг: addr/plen/gw/dev в INFO; убрал спам v6_send/v6_recv
2026-08-09 17:51:33 +03:00
Evgeny
d8bae76ac7
socket monitor: BSD ifindex + UP/DOWN + фильтр спама; fallback idx%u → ?
2026-08-09 17:39:31 +03:00
Evgeny
15e3eeae65
socket monitor: осмысленные INFO-логи с именем интерфейса (UP/DOWN/NEW/DEL/route)
2026-08-09 17:32:50 +03:00
Evgeny
2cba839de4
Убрал DEBUG_CATEGORY_DEBUG: сообщения разбросаны по модульным категориям (+CHAT=25, MEDIA=23)
2026-08-09 17:24:15 +03:00
Evgeny
869f7c60d5
debug: add PROXY category, move all proxy logs to it
2026-08-09 16:31:21 +03:00
Evgeny
0de44e3117
remove spam TRACE messages: topo_group_find_conn_for_node, raw_recv, CRYPTO_DECRYPT_OK
2026-08-09 15:55:15 +03:00
Evgeny
6b6657c6b8
fix NTP ping-pong + normalizer counters
...
- ntp_node_time.c: respond to TIME_SYNC only when peer is unsynced (not always)
Prevents infinite 10-byte ping-pong that ate bandwidth when both sides synced.
- pkt_normalizer.c: add in_total_pkts/in_total_bytes increments in
etcp_input_ready_cb (real send path), matching pn_packer_send (test path).
- conn_mgr_core.c/conn_mgr_priv.h: full INVITE_INFO_RESP with channel info
2026-08-09 15:38:56 +03:00
evgeny
229a508022
etcpmon: add Makefile to git (was ignored by *.gitignore Makefile pattern)
2026-08-09 14:20:46 +03:00
evgeny
c61c0639b9
remove utun.sh
2026-08-09 14:08:48 +03:00
evgeny
9066ae6a1f
tests: add test_utils.h to git (was ignored by tests/test_* rule)
2026-08-09 14:06:34 +03:00
evgeny
6337d0f608
tests: add -I$(srcdir) to AM_CPPFLAGS for test_utils.h in VPATH builds
2026-08-09 14:01:31 +03:00
evgeny
4bb9f9e9c2
crypto: EVP_PKEY_generate → EVP_PKEY_keygen + OPENSSL_API_COMPAT для BSD/LibreSSL
2026-08-09 13:59:38 +03:00
evgeny
d8337b9c3b
whisper: опциональный configure --with-whisper; chatgui: парсер [debug]; stdint.h в AC_CHECK_HEADERS
2026-08-09 13:54:22 +03:00
evgeny
7f901c01e1
etcp: переупорядочить close + защита state==2 во всех API-точках; topo: правильная очистка group nodes и registry; chat/member: новый модуль member_sync; chatgui: обновления транспорта и UI
2026-08-09 12:39:53 +03:00
evgeny
b2e4aadbf0
e2e: AES-128-CCM encryption via BGP router (ROUTER_FLAG_ENCRYPTED), ECDH key per peer-pair from NODEINFO pubkeys, cache 8 entries
...
- etcp_router.h/c: new flag ROUTER_FLAG_ENCRYPTED (0x04), etcp_route_send_encrypted(), inflight/retrans/send_q support
- utun_instance.h: e2e_ctx_cache[8] — per-peer sc_context_t cache with derived session key
- topo_node.c: topo_node_sign_self() — single point for Ed25519 self-signing of NODEINFO
- topo_node.c: fix stale x25519_self_sig after address update (topo_node_sign_self call)
- nat_detection.c: fix stale x25519_self_sig after in-place socket meta modification
- test_etcp_router_unit: 5 E2E tests (basic round-trip, no NODEINFO drop, tampered, cache reuse, ENCRYPTED+SIGNED combined)
- builds clean, 70/70 tests pass
2026-08-09 08:19:20 +03:00
evgeny
ca176e1f24
encrypt overhead fix (33→36, noencrypt_len), mtu default 1280, connmonitor window, total_decrypted for TCP, check.sh
2026-08-08 16:56:32 +03:00
evgeny
9846599086
stcp: fix memory leaks and cleanup architecture
...
- stcp_conn_do_close: always deferred free for allocated conns (was else-if)
- stcp_link_on_stcp_close: don't null link->conn (close_impl needs it for rx_queue)
- stcp_link_close_impl: free rx_queue/tx_queue before close, null conn after cleanup
- stcp_client_connect: return NULL on derive_session failure (was returning dead cli)
- stcp_frame_decrypt/stcp_recv_try: dedup CRC check into stcp_check_crc helper
- test_stcp: add test8_srv_recv_close (error-recv close chain)
2026-08-08 11:42:16 +03:00
evgeny
5c8355ee63
stcp: unified recv FSM, handshake timeout, RX backpressure, opaque pointer fix
...
- stcp_recv_try / stcp_recv_set: unified chunk reader with raw+stream modes
replacing duplicated stcp_conn_process_recv in server+client (~250 LOC removed)
- stcp_conn_read / stcp_conn_do_close / stcp_tx_queue_cb: unified shared functions
- continuous stream XOR: stcp_frame_encrypt now XORs len+data+CRC
- handshake timeout via uasync_set_timeout (5s server, 10s client)
- RX backpressure: stcp_rx_push / stcp_rx_resume_if_needed with hysteresis
- stcp_server_list_remove: new API fixes opaque pointer violation in auto_socket
and 4 double-free bugs on shutdown
- removed hs_expected_len/hs_key_processed fields (replaced by callback chain)
- removed recv_buf<4096 debug workaround
- stcp_try_send const fix (takes ownership of malloc'd data)
2026-08-08 10:48:12 +03:00
evgeny
d453e73ddb
etcp: TCP links skip remote keepalive gating; chatgui: show interface names in member detail, fix destructor callbacks
2026-08-08 07:31:38 +03:00
evgeny
80e77f12c2
fix: auto_socket TCP duplicate sockets + NAT v4 address resolution
...
auto_socket.c: create_iface_tcp_socket returns stcp_server* instead of int,
ifa->v4_tcp/ifa->v6_tcp now properly track the created server, preventing
duplicate bind/listen on every reconcile_iface call.
etcp_connections.c: tcp_socket_add now resolves interface_addr via
get_interface_ip_by_index/get_interface_ipv6_addr_nl for any type (not just
PUBLIC), preventing NAT TCP v4 sockets from being destroyed due to INADDR_ANY.
2026-08-07 20:06:30 +03:00
evgeny
de61a2dacc
fix: auto_socket TCP hang + missing debug config apply in utun_instance_create_from_config
...
auto_socket.c: remove tsrv from inst->stcp_servers before stcp_link_server_destroy
when TCP socket has null addr — freed pointer stayed in linked list corrupting it
on next stcp_server_listen->stcp_server_list_add, causing hang
utun_instance.c: apply debug_level + per-category debug from config in
utun_instance_create_from_config (was only in utun_instance_create)
chat_core.c: verbose error log on invalid args
2026-08-07 18:31:30 +03:00
evgeny
ec9edb6a7c
Add test_etcp_link_stress: dynamic socket/link add/remove during traffic
...
- 2 instances, 1 initial UDP connection, 2000ms stress test
- Sends 1 packet every 1ms during stress
- Every 100ms: adds new UDP/TCP socket+link, removes oldest with stats
- Liveness check per cycle detects hangs
- Per-link report: type, state, decrypted/encrypted/acked bytes, retrans, RTT
- Removal stats: lifetime, encrypted, decrypted, acked, retrans, RTT, inflight
2026-08-07 17:32:28 +03:00
evgeny
d6c78d96c4
stcp: dedup encrypt/decrypt/send to stcp.c, add pending queue for buffering, add server pubkey verification, add 4MB bulk test
2026-08-07 13:31:24 +03:00
evgeny
087ac9b0e4
stcp: close old TCP links on reconnect, check stcp_link_is_ready before send, notify ETCP on STCP close
...
1a: tcp_server_on_link — close existing TCP links before creating new ETCP_LINK
1b: etcp_tcp_send — skip send if stcp_link not ready
3a+3b+3c: stcp_conn_set_on_close → stcp_link_on_stcp_close → marks link DOWN → triggers reconnect
2026-08-07 12:46:46 +03:00
evgeny
fd00e5dd15
cp
2026-08-07 12:21:41 +03:00
evgeny
38c9f229bc
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
2026-08-07 00:48:27 +03:00
evgeny
a3783b5f55
fix: re-index conn_queue_entry after setting peer_node_id
...
tcp_server_on_link sets conn->peer_node_id after etcp_connection_create
which adds the entry with peer_node_id=0. instance_find_conn couldnt
find TCP connections until the queue entry was re-indexed.
2026-08-06 23:14:57 +03:00
evgeny
adac854c94
fix: TCP data flow — tx_state, keepalive, last_recv_local_time
...
- etcp_link_enter_ready_tcp: set tx_state=DATA_WAIT (was 0, blocking sends)
- etcp_conn_input: update last_recv_local_time on every packet (keepalive liveness)
- link_rx_cb: handle ETCP_KEEPALIVE before etcp_conn_input (conflicts with MEAS_RESP=0x08)
- KEEPALIVE handler: set recv_keepalive, remote_keepalive, link_status, keepalive_recv_count
- test_stcp_traffic: etcp_send instead of raw stcp_link_send
- test_etcp_stcp: rewrite for utun_instance + etcp_connect
2026-08-06 23:09:01 +03:00
evgeny
928fa7731c
refactor: STCP connections as ETCP links (is_tcp)
2026-08-06 22:14:44 +03:00
evgeny
d773f1724a
refactor: STCP connections as ETCP links (is_tcp)
...
- Add is_tcp, tcp_link, tcp_reconnect_* fields to ETCP_LINK
- Remove transport_link from ETCP_CONN, add tcp_link_count
- stcp_link: replace embedded etcp_conn with pointer; add etcp_link backpointer
- stcp_link: link_rx_cb routes ETCP data to etcp_conn_input
- stcp_link: call on_close_cb in close
- New TCP functions: etcp_link_enter_ready_tcp, etcp_tcp_link_start_connect,
etcp_tcp_link_start_reconnect, tcp_link_close_cb, etcp_tcp_send
- etcp_link_new: handle NULL conn for TCP links; skip enter_init for TCP
- etcp_link_close: close stcp_link for TCP
- etcp_encrypt_send: redirect TCP to etcp_tcp_send (skips AES-CCM)
- tcp_server_on_link: create ETCP_LINK(is_tcp=1) + enter_ready_tcp
- etcp_connect: TCP addrs -> etcp_tcp_link_start_connect
- Remove ctx->tcp_link/tcp_ready
- test_stcp_traffic: find stcp_link via links->is_tcp instead of transport_link
- 66/68 tests pass; 2 STCP tests expected to fail (integration not complete)
2026-08-06 22:14:32 +03:00
evgeny
937af4c26a
fix: STCP handshake ordering + invite peer_node_id match + test script
...
- stcp_server: send handshake response BEFORE on_ready to prevent ETCP INIT data mixing into client recv buffer (crc mismatch)
- conn_mgr: relax peer_node_id match for INVITE_INFO_RESP when peer_node_id==0 (STCP connections)
- chat_tcp_test: remove invalid 'local' outside function
2026-08-06 19:28:52 +03:00
evgeny
62504dc3b7
diag: full buffer dumps for CRC debug
2026-08-06 19:05:23 +03:00
evgeny
c66b63ea39
diagnostics: stcp session_key + xor data dumps
2026-08-06 18:57:42 +03:00
evgeny
dfe9d36783
wip: STCP TCP chat integration — diagnostics, invite TCP fallback, test infra
2026-08-06 18:41:41 +03:00
evgeny
e2d8f68c9a
fix: peer discovery queries include IPv6 (family IN (4,6))
...
get_public_peers, get_local_peers, get_supernode_peers
were filtering na.family=4 only — never found v6 peers.
Changed to na.family IN (4,6).
2026-08-06 14:20:33 +03:00
evgeny
25ebad9f52
fix: UDP packet size and addr_type classification
...
- etcp_connections.h: add WIRE_OVERHEAD, IP_UDP_OVERHEAD_V4/V6, SC_ENCRYPT_OVERHEAD
(properly accounts for v6 IP(40)+UDP(8)+SC(3)+CCM tag(16) = 67 vs old UDP_HDR_SIZE=28)
- etcp_connections.c etcp_encrypt_send: use WIRE_OVERHEAD instead of UDP_HDR_SIZE
- etcp_connections.c send_init_response: clamp padding to max_data = mtu - WIRE_OVERHEAD
- chat_core_priv.h: add addr_type_from_ip() classifier
- chat_profile.c, chat_sync.c, member_sync.c: use classified addr_type instead of hardcoded 0
- chat_sync.c: skip zero nat_addr in JOIN, fall back to interface_addr
- topo_node_sqlite.c, member_sync.c: remove addr_type=0 filter from SELECT/DELETE
- chat_profile.c, member_sync.c: DELETE all addresses (not just addr_type=0)
2026-08-06 14:08:20 +03:00
evgeny
5066cff333
fix: IPv6 bind to permanent SLAAC address instead of ::
...
- etcp_connections.c: detect interface_addr before bind(),
use specific IPv6 addr instead of in6addr_any
(netlink path for Linux, connect trick for Android)
- chat_profile.c: filter PRIVATE/LOCAL sockets from
node_addresses sync
- conn_mgr_core.c: diagnostic logs in cm_invite_tcp_connect,
continue to next addr on TCP connect failure
- node_conn_direct.c: diagnostic logs in ncd_create_links
- auto_socket.c: suppress spurious ADDR_CHANGED events
- etcp_api.c: extended socket event log
2026-08-06 13:17:39 +03:00
evgeny
dc8c9f7875
fix: cm_invite_pending — deferred free + cancelled guard
...
Корень краша: cm_handle_invite_info_resp вызывал cm_invite_cleanup(inv)
без unlink из invite_list — висячий указатель при conn_mgr_destroy → SIGSEGV.
Механизм защиты:
- cancelled:1 в cm_invite_pending — блокирует все коллбэки после cancel
- cm_invite_cancel: cancelled=1 первой строкой, deferred free через uasync_post
- Все коллбэки (NCD, TCP ready/close, overall timer): guard + DEBUG_WARN
- Success path: temp_nq=NULL (передача владения), вызов cm_invite_cancel
- INV_CANCEL логи: skip (NULL) / done — видно что реально сделано
2026-08-06 10:54:56 +03:00
evgeny
f476188566
fix(chat): node online status race, WELCOME peer_needed off-by-one, JOIN missing proto byte
...
- node_put/node_update_verified: set online=1 on INSERT (nodes created when conn is UP)
- channel_peers_all: fix peer_needed calculation (atl byte was missing)
- cs_send_channel_join: add proto byte to address serialization matching all parsers
2026-08-06 01:18:27 +03:00
evgeny
38eb51c679
fix: Android event handler lost after restart — g_event_handler now preserved
...
Root cause: instance_lite_restart was creating new thread without
re-setting g_event_handler, causing all chat events (CHANNEL_UPDATED,
CONNECT_RESULT, etc.) to be silently dropped after app restart.
Fixes:
- instance_lite_restart: save/restore g_event_handler across hard restart
- instance_thread restart loop: re-call chat_event_set_handler after uasync_create
- utun_bridge_restart: call instance_lite_set_event_handler before restart
- AppEventHandler SharedFlow replay: 1 → 16 to not lose early init events
- ViewModel: added diagnostic logging for channel/connect events
- Keep diagnostic logs in instance_lite (set_handler, chat_event_forward NULL check)
- instance_event_handler: removed static for cross-block forward declaration
2026-08-06 00:06:28 +03:00
evgeny
ef637d33a6
auto_socket: модуль авто-управления сокетами при изменении сетевых интерфейсов + fix pre-existing ASAN-багов
...
- auto_socket.c/h: создание/удаление UDP сокетов автоматически при изменении интерфейсов через netlink/route socket
При auto_sockets=yes пропускает ручные [server] сокеты
Тип сокета: PUBLIC если публичный IP, иначе NAT
Для новых сокетов добавляются линки ко всем активным NCD-соединениям
При удалении интерфейса линки убираются, сокет закрывается
Platform-agnostic API для использования из Android/chatgui
- node_conn_direct.h/c: ncd_add_socket_links / ncd_remove_socket_links — управление линками на конкретном сокете
- socket_monitor.h/c: экспорт socket_monitor_update_if_addr для auto_socket
- config_parser.h/c: опция auto_sockets в [global]
- init_sockets(): пропуск ручных сокетов при auto_sockets=yes
- utun_instance: интеграция auto_socket_init/destroy
- media_delivery: fix stack-buffer-overflow ack[3] → ack[9]
- topo_node: fix heap-use-after-free в topo_group_update_my_nodeinfo — сохранение node_id/ver перед registry_store, использование return value
2026-08-05 23:09:59 +03:00
evgeny
a0ba6dee21
fix: tgc_phase1_timeout closing all handles including connected ones
2026-08-05 18:57:35 +03:00
evgeny
513ec75c28
fix elementary format string bugs in log messages
...
- etcp.c:466: %d→%s for log_name (was printing garbage like -2012603448)
- etcp_connections.c:2235: Server type %d→%s with server_type_str()
- etcp_connections.c:845,1578,1587: type=%d/nat_type=%d→%s with helpers
2026-08-05 18:35:55 +03:00
evgeny
4c1ea11022
conn_mgr: split handler into router (routed) and direct paths
...
conn_mgr_router_recv_handler (etcp_router_bind): DIRECT_REQ, INTERM_EXCHANGE, DISCONNECT
conn_mgr_direct_recv_handler (etcp_bind): INVITE_INFO_REQ, INVITE_INFO_RESP
Each transport path now has its own handler — no more mixed concerns.
2026-08-05 18:16:18 +03:00
evgeny
85f23e0a94
conn_mgr: move etcp_router bind/unbind from per-group to instance level
...
svc_id=17 (ETCP_RT_ID_CONN_MGR) is a singleton resource — bind once
at utun_instance_init, unbind once at utun_instance_destroy.
Previously each conn_mgr (one per group) called bind/unbind separately,
causing 'overwriting' and 'not bound' WARNs on every group init/shutdown.
Handler dispatches by group_id from message — no need for per-group binding.
2026-08-05 18:04:43 +03:00
evgeny
d296074330
etcp: show which specific link went DOWN + always use registry node_name
...
1. etcp_on_down: add down_link param — log the specific lost link + remaining
Connection DOWN — link 192.168.40.247:2122 lost, remaining: [::1]:6669, [::2]:9970
Connection DOWN — closing, links: ... (for reinit/close)
2. etcp_on_link_down: pass the triggering link through to etcp_on_down
3. etcp_update_log_name: always check registry for node_name
(n_5a1b... → SM-A525F when name is available in registry)
2026-08-05 17:41:44 +03:00
evgeny
1b6fd1c29b
etcp: use human-readable names for socket type and NAT type in logs
...
Add helper functions server_type_str() and nat_type_str() to convert
CFG_SERVER_TYPE_* and NAT_TYPE_* codes to readable names.
Now: Add Socket type=PUBLIC instead of type=1
self-detect check: type=PUBLIC nat=UNKNOWN instead of type=1 nat_type=0
2026-08-05 17:32:53 +03:00
evgeny
5f24aad6a6
etcp: use node_name from registry in log_name for human-readable connection names
...
etcp_update_log_name: if name is empty, look up peer_node_id in topo_node_registry
and use node_name (e.g. 'SM-A525F') instead of empty or generic name.
Result: [45C2->03D3 [SM-A525F]] instead of [45C2->03D3 []]
2026-08-05 17:30:04 +03:00
evgeny
83aba82887
etcp: add link addresses to all UP/DOWN/close log messages
...
- etcp_on_up: list up-link addresses after connection summary
- etcp_on_down: show all link addresses that were lost
- Link UP (server/client): add addr=X
- Connection established: add addr=X
- Link closed: add addr=X before traffic stats
- Link down (keepalive timeout): add addr=X
Now: [conn] Link 1 UP (server, mtu=1600, addr=192.168.40.247:2122)
2026-08-05 17:24:41 +03:00
evgeny
cf8236266b
chat_sync: find_conn NOT FOUND INFO→DEBUG — fires for unrelated stub nodes during reinit storms
2026-08-05 14:26:00 +03:00
evgeny
e51d8ddda2
chatgui: fix ERROR→WARN/DEBUG for normal situations
...
- member_sync apply_items: empty payload is normal sync completion, not error
- topo_node_sqlite node_load: no addresses is normal for stub/seed nodes
- conn_mgr_core: node skipped when not in routing (normal for nodes w/o addrs)
- topo_group send_nodeinfo: downgrade ERROR→WARN in DEBUG category
- db_sync INIT_RESP: protocol details belong in DEBUG, not INFO
2026-08-05 14:15:43 +03:00
evgeny
5feeb2c169
chatgui: clean up log — remove spam, move messages to proper categories
...
A-B: Remove gui_bridge_post_uasync_fn log, MainWindow::onMessageReceived, InputBar send text
B1: Move lifecycle messages to GENERAL (utun_node, main, mainwindow, animtimer, sound_manager, messagelist, db_manager)
B2: Move chat events to CHAT_SYNC (MSG_RECEIVED, CHANNEL_UPDATED, CHANNEL_PEERS_ONLINE, DB_READY)
B3: Move peer/connect events to MEMBER_SYNC (CONNECT_RESULT, NEW_PEER, AUTO_CONNECT, NODE_CHANGED)
C: Lower level of C-side spam (recalc, send OK, PUSH ACK, connect_channel) INFO->DEBUG
D: Fix duplicate PUSH log line in db_sync.c
E: Add debounce to CHANNEL_PEERS_ONLINE — log only on change
Misc: Remove sort=0 from ChannelList::loadChannels, improve DB_READY message
2026-08-05 12:50:27 +03:00
evgeny
be0e76c9a6
debug: реорганизация категорий — SYS(1), ETCP(4) расширен, CONNECTION(3) очищен; fix stcp_client.c sock_err до connect()
...
Категории:
- DEBUG_CATEGORY_SYS=1: u_async + ll_queue + memory + timing (было 4)
- DEBUG_CATEGORY_ETCP=4: ETCP + normalizer + BBR (было 3)
- DEBUG_CATEGORY_CONNECTION=3: только события статуса линка/подключения (INFO)
- DEBUG_CATEGORY_KEEPALIVE=21: только периодический мониторинг (DEBUG)
- Удалены: NORMALIZER, BBR, CONNECTIVITY
- Устаревшие DB_SYNC → CHAT_SYNC + MEMBER_SYNC (предыдущий коммит)
CONNECTION+INFO — только: Connection UP/DOWN, Link UP/down, Link initialized/added,
NAT address init/changed, init server/client.
CONNECTION+DEBUG — retry, collision, reinit, socket register.
KEEPALIVE — init_timer SUPPRESSED, timer started, keepalive skipped.
REINIT — ETCP+INFO.
Connection status changed — GENERAL (пользовательский callback).
Dedup link_status: if(old_link_status) перед Link down.
Убран дублирующий Conn:%s из Link down, добавлен link_id в client added link.
Молчаливые ошибки: +DEBUG_ERROR в 15 местах (merkle_sync, member_sync, db_sync).
Fix: stcp_client.c — socket_get_error() вызывался ДО connect(), проверяя
застарелое errno вместо ошибки connect(). Неблокирующий connect() возвращает
-1+EINPROGRESS (норма), но сравнивался с мусором → ложный FAIL.
Все 4 STCP-теста исправлены (68/68 pass).
2026-08-05 10:43:32 +03:00
evgeny
1895f23034
add chat_sync_invite_to_channel_with_addrs — connect with addresses, send CHANNEL_INVITE, 3s timeout, post result to GUI
2026-08-04 23:14:03 +03:00
evgeny
44c99f603d
move INV button from footer into channel delegate rows (second button left of plus)
2026-08-04 22:57:36 +03:00
evgeny
24316e8cf8
split InviteDialog into ShareInviteDialog + InviteByLinkDialog, add INV button to channel list
2026-08-04 22:42:22 +03:00
evgeny
5632bc9c8b
invitedialog: fix IPv4 byte order, show v6 prefix, add channel_id to diagnostic
2026-08-04 22:30:56 +03:00
evgeny
262dc9bb51
invitedialog: show decoded link info on text change (paste), not just on Send click
2026-08-04 22:23:54 +03:00
evgeny
f8d98cab47
add error logging to all silent returns in chat_sync invite/join chain + GUI self-invite check
2026-08-04 22:20:01 +03:00
evgeny
21a0ee6caf
conn_mgr: fix use-after-free in invite NCD callback cleanup
...
cm_invite_fail and cm_handle_invite_info_resp: always close invite's NCD
handle before freeing the invite struct. Previously the NCD close was
skipped when nq->handle != NULL (success path never closed it at all),
leaving cm_invite_ncd_callback registered with a dangling pointer.
On subsequent NCD DOWN event the stale callback caused SIGSEGV.
2026-08-04 20:53:38 +03:00
Evgeny
fa5878ef4b
media_download: fix md_mkdir_parent for Windows (drive letter, backslash), add errno to fopen errors, sanitize base_filename with WARNING
2026-08-04 19:09:46 +03:00
Evgeny
cf1843e586
fix: etcp_connect_timeout_tb=0 in utun_instance_create (missing init)
...
utun_instance_create() allocated with u_calloc (zeroed) but never
set etcp_connect_timeout_tb. utun_instance_create_from_config() had it
at line 371, but utun_instance_create (used by chatgui) was missing.
Timer with tb=0 fires instantly → CLOSE sent before handshake completes.
Diagnostics confirmed: value_tb=0, tb=0, delta_tb=0 on Windows chatgui.
2026-08-04 18:25:24 +03:00
Evgeny
2b10f53466
diagnostics: ncd connect timer SET/FIRE logs + WSAEWOULDBLOCK fix + cm_invite_fail details
...
- u_async.c: log ncd_connect timer expiration calculation (tb, now_tb, exp_tb, exp_ms, delta_tb)
- node_conn_direct.c: SET logs at 4 timer creation points with value_tb/now_tb/path; TIMEOUT log with now_tb
- conn_mgr_core.c: cm_invite_fail entry log + CLOSE/SKIP branch detail
- stcp_client.c: fix WSAEWOULDBLOCK (10035) treated as error on Windows (add ERR_WOULDBLOCK check)
2026-08-04 18:16:53 +03:00
Evgeny
9d797c91eb
chatgui: postChatSetting в хедер, chat_core_get_inst include, chat→chatserver
2026-08-04 17:28:05 +03:00
Evgeny
3b20c84c4d
mkdtemp: #ifdef _WIN32 в локальных обёртках, без test_utils.h
2026-08-04 17:16:55 +03:00
Evgeny
ebd975a03b
mkdtemp → test_mkdtemp из test_utils.h для кроссплатформенной сборки (MSYS2/MinGW)
2026-08-04 17:13:45 +03:00
Evgeny
98f3049e6b
mkdir → utun_mkdir в тестах для кроссплатформенной сборки (MSYS2/MinGW)
2026-08-04 17:02:31 +03:00
Evgeny
1b1bf91e79
Убран неиспользуемый #include <netdb.h> ломающий сборку на MSYS2/MinGW
2026-08-04 16:42:03 +03:00
Evgeny
d816493af6
Инвайт-ссылка chatserver печатается в лог всегда, не только в foreground
2026-08-04 16:32:17 +03:00
Evgeny
ae1add5437
parse_chatserver: молчаливый провал, ошибка только после chat_setting_set
2026-08-04 16:28:18 +03:00
Evgeny
876155688f
Устранено дублирование: storage_total_size/unit_size вместо storage_maxsize_gb/autoload_maxsize_mb
2026-08-04 16:17:06 +03:00
Evgeny
7a8d249915
Убраны аудио-настройки из chatserver — перекодировка на стороне клиента
2026-08-04 16:09:22 +03:00
Evgeny
74bef5110c
Обновлён сэмпл конфига: chatserver — db_path + chat-настройки
2026-08-04 16:08:01 +03:00
Evgeny
c22991f7d9
Добавлена секция [chatserver] в конфиг — объединяет активацию чата и настройки в одной секции
2026-08-04 16:05:06 +03:00
evgeny
712d1b53df
1
2026-08-04 15:29:25 +03:00
Evgeny
26f4da1b7c
socket_monitor: cross-platform support (Linux netlink, FreeBSD AF_ROUTE, Windows IP Helper)
...
- platform_compat: get_interface_ipv6_addr_nl stub uses get_interface_ipv6_by_index fallback
- socket_monitor: extract common update_if_addr/fire_one, platform dispatch
- FreeBSD: PF_ROUTE socket with RTM_IFINFO/NEWADDR/ADD event monitoring
- Windows: NotifyUnicastIpAddressChange + NotifyRouteChange2 via uasync_post
2026-08-04 15:20:20 +03:00
Evgeny
fe79dcf318
libopus: remove -DHAVE_ALLOCA_H — alloca.h not available on FreeBSD
2026-08-04 15:07:36 +03:00
Evgeny
5cbd12f8dd
platform_compat: guard linux/netlink.h and nl function with __linux__ (FreeBSD)
2026-08-04 15:05:28 +03:00
Evgeny
6a35fc4b45
u_async: add pipe() fallback for non-Linux POSIX wakeup (FreeBSD)
2026-08-04 15:01:36 +03:00
evgeny
de9e467b39
media_delivery: BLOCK_PROCESSING + relay streaming + per-file download limit
...
- block_availability: status column (0=processing, 1=completed)
- md_ba_complete_block(): DELETE old + check exists + INSERT new id
- BLOCK_PROCESSING subcmd (0x10) — INSERT with new id, no REPLACE/IGNORE
- BLOCK_RELAY_FULL subcmd (0x11) — redirect when source/relay at capacity
- relay_block_ctx: downstream forwarding from chunk file
- md_file_load: per-file source download limit (max_downloads_per_file)
- RELAY_FULL from source node when at capacity
- relay_full handler: retry existing peers, not just new ones
- sync.md: full documentation
2026-08-04 11:42:59 +03:00
evgeny
7263bdcf56
media_download tests: backpressure, block relay, OOB block_id, assembly
...
5 new tests in test_media_delivery_download:
- conn_cb starts only first block (backpressure)
- conn_cb with multiple peers
- BLOCK_DONE triggers next block relay from same peer
- assembly after all blocks validated
- peer with more blocks than dl (OOB fix verification)
md_dl_conn_cb made non-static for test visibility
md_dl_send added NULL guard for test instances without routing
media_download.h: added conn_cb extern declaration
2026-08-04 00:22:18 +03:00
evgeny
41e9c9b0e6
media_download: fix block_id OOB, add backpressure, close conn_mgr
...
- md_dl_send_block_req now takes explicit block_id (not peer-local index
into dl->block_ids) — fixes OOB 'aaaaaaaa...' garbage block_id
- conn_cb sends only first unstarted block per peer (backpressure)
- BLOCK_DONE success triggers next block from same peer
- conn_mgr handles stored in peer->cm_handle, closed on assembly/cancel
2026-08-04 00:02:20 +03:00
evgeny
3665a9bc23
chat_msg: fix strstr on non-null-terminated blob/text data
...
chat_core_attachment_download: use sqlite3_column_text for null-term
on_msg_inserted: copy data to local null-term buf before strstr
Both caused b64_decode to misread body from garbage memory
2026-08-03 23:31:56 +03:00
evgeny
4c366f3884
desktop messagelist: decode *<b64> prefix for media message display
...
setVoiceMessageRoles now checks for '*' marker, translates URL-safe
base64 (-_ → +/) and decodes to restore original display data.
Fixes attachment filenames and voice waveform for new messages.
2026-08-03 23:17:28 +03:00
evgeny
a0049a4187
b64 prefix: * marker to distinguish base64-encoded display data from old plain text
...
* prefix prepended in on_media_registered before b64 data
on_msg_inserted, chat_core_attachment_download, get_messages_json
only attempt b64_decode when prefix starts with '*' marker
2026-08-03 23:10:15 +03:00
evgeny
ea6eeae210
msg b64: base64-encode display prefix in d-field to avoid pipe/quote breaking parse
...
b64_encode/decode (URL-safe A-Za-z0-9-_) in chat_core_priv.h
on_media_registered encodes msg_data before full_data
on_msg_inserted/chat_core_attachment_download decode base_filename
android_jni_bridge decodes prefix for UI display
2026-08-03 23:02:49 +03:00
evgeny
6a02a16543
attachments: preview bar + combined send (Android + desktop)
...
Android: file picker → pending preview bar (name+size+X) →
combined send with text; cache copy, save dialog for downloads
Desktop: attach stores pending, preview bar before send,
combined with text in onSendClicked
C: attachment_sender.c — include filename in msg data for display
2026-08-03 22:36:33 +03:00
evgeny
e3df5008da
etcp: fire link_status_cbk in etcp_link_new for new links
2026-08-03 21:46:22 +03:00
evgeny
13c6ef2210
member_sync: fix p-6 for ip pointer, add stcp link addr+status to JNI bridge
2026-08-03 21:13:08 +03:00
evgeny
b6f9ebc8a8
chatgui: TCP link status via stcp_link_is_ready
2026-08-03 21:04:46 +03:00
evgeny
5d23f461a7
member_sync/topo_sqlite: add proto byte to address serialization
...
- _compute_bucket_hash: SELECT protocol, write proto byte
- _member_get_items: SELECT protocol, write proto byte
- _member_apply_items: consume proto byte in skip calculation
- topo_node_sqlite_channel_peers_all: SELECT protocol, write proto byte
All 5 writers and 5 readers now consistently include protocol byte.
2026-08-03 20:59:26 +03:00
evgeny
8023f6ee70
stcp: separate v4/v6 sockets, protocol byte in chat addr format, error on bind fail
...
- stcp_server_create: support AF_INET and AF_INET6 V6ONLY=1 (no dual-stack)
- Add listen_family to stcp_link_config
- init_sockets: return error (not partial) on any bind failure
- add chat_core_sync_my_addresses() call at chatgui startup
- collect_my_addrs: add proto byte (1=UDP, 2=TCP) to binary format
- chat_sync.c JOIN/WELCOME/PEER_UPSERT: read proto byte, write protocol column
- member_sync.c: read proto byte, dynamic protocol bind
- topo_node.c: debug logs for nodeinfo changed detection
- node_config.cpp: type=public for all servers
2026-08-03 20:35:46 +03:00
evgeny
3deaa0eabe
stcp: multiple servers support via linked list in UTUN_INSTANCE
...
- Replace instance->stcp_server (single pointer) with stcp_servers linked list
- Add stcp_server_list_add/destroy_all/count API in stcp_link.h/c
- Fix port extraction for both AF_INET and AF_INET6 in init_sockets
- Filter out 0.0.0.0 and [::] addresses in chat_profile.c TCP address sync
- Add type=public to servers in node_config.cpp saveFull()
2026-08-03 19:39:50 +03:00
evgeny
e1e54df4f4
fix: invite не затирает имя узла, имя читается из member_sync peers.userinfo
...
- conn_mgr_core.c: убрана запись node_name из cm_handle_invite_info_resp
- topo_node_sqlite.c: name в nodes не перезаписывается пустой строкой
- android_jni_bridge.c: bridge_get_node_name читает peers_<ch>.userinfo если nodes.name пуст
2026-08-03 18:50:11 +03:00
evgeny
253129cb27
topo_node_sqlite: убрал запись node_addresses из BGP-пути (только nodes). Адреса — через member_sync.
2026-08-03 15:17:51 +03:00
evgeny
ddf696bcf6
refactor: TCP socket addresses — sync to chat DB, topo_node, config file single source
...
- chat: collect_my_addrs extends to TCP + IPv6, chat_core_sync_my_addresses writes TCP addrs
- topo_node: replace CFG_SERVER with TCP_SOCKET for TCP addresses, simplify NAT logic
- etcp_connections: add IPv6 interface addr resolution for TCP sockets
- Android: INI config file as single source of truth for servers, remove JSON/Gson
- Android: filter temporary IPv6 addresses, fix restart with socket cleanup
- instance_lite: sync addresses after socket creation, proper restart cleanup
2026-08-03 13:57:42 +03:00
evgeny
740ed2a93a
fix: NCD UAF, conn_mgr invite protocol, node_id derivation, link reuse
...
node_conn_direct:
- ncd_init_cb: skip UP when links_up==0, ncd_up_cb delivers when link comes up
- close/force_close: handle_count safety checks, callback clearing
- open/open_node case 2: create links on reused dead conn
- ncd_create_links: skip duplicate link on same conn (stale->etcp==conn)
- set_callback: optional callback change on live handle
conn_mgr:
- cm_ncd_callback: DOWN only delivers event (handle stays alive)
- cm_ncd_callback: TIMEOUT force_close BEFORE cm_deliver_event
- cm_deliver_event: read handle fields to locals before callback (reentrany-safe)
- INVITE_INFO_REQ/RESP: add duplicate cmd byte for direct-send protocol
- cm_handle_invite_info_resp: search invite by group_id in channel conn_mgr
Android:
- node_id computed by sc_derive_node_id_from_pubkey in C, not Kotlin
- utun_bridge_join_channel: recompute node_id, log mismatch
- invite_link_c: compute nodeId from pubkey via sc_derive_node_id_from_pubkey
- NativeLib.deriveNodeId, InviteLink.kt uses C function
2026-08-03 09:51:06 +03:00
evgeny
4b07d59043
chat: skip own addresses from remote in member_sync_recv
...
Remote peers should not overwrite local node_addresses.
When member_sync_recv processes data about our own node_id,
we trust locally-synced addresses (from sync_my_addresses)
and ignore address data from the remote peer.
2026-08-02 20:42:40 +03:00
evgeny
63272abe53
chat: fix duplicate v6 address from v4 socket's interface_addr
...
sync_my_addresses used interface_addr even when its family
differed from the socket's local_addr family. A v4 socket
bound to 0.0.0.0 could pick up a v6 interface_addr on
dual-stack Android, inserting a duplicate v6 entry.
Now interface_addr is only used when families match.
2026-08-02 20:38:42 +03:00
evgeny
c2191aad3b
chat: user-friendly INFO logs for invite/connect flow
...
- chat_sync.c: invite entry, JOINED/TIMEOUT messages
- conn_mgr_core.c: invite start (addrs+udp+tcp), NCD UP/DOWN/TIMEOUT,
TCP connect/ready/close, membership check send/receive/confirm/deny,
overall timeout
- node_conn_direct.c: NCD event names instead of numbers
2026-08-02 20:32:01 +03:00
evgeny
c35135cb52
topo_group: migrate CONN_MGR entries to ll_queue, simplify TOPO_GROUP_NODE
...
- CONN_MGR entries: replace dynamic array with ll_queue (hash=256, key_size=8)
cm_find_entry now O(1) via queue_find_data_by_index
cm_ensure_entry uses queue_entry_new + queue_data_put_with_index
cm_entry_cleanup removes from queue and frees entry
- TOPO_GROUP_NODE: replace handles** array with single CONN_MGR_HANDLE*
remove topo_node_handle_register/unregister/count — dead indirection
nq->handle = h / nq->handle = NULL in all call sites
- TOPO_GROUP_NODE: remove dead fields dirty, best_socket, tranzit_data/count
dirty replaced with local variable in nat_detection.c
tranzit_data removed from wire format (TOPOMSG_NODE), serialize, deserialize
update struct layout: one field per line with comments
2026-08-02 16:45:52 +03:00
evgeny
f5efaa495b
socket_monitor: extract socket monitoring from etcp_connections, add per-instance context
...
- New files: transport_layer/socket_monitor.c/h — socket state monitoring with per-instance ctx
- etcp_api: expose get_latency/1s_pkt_count measuring, add etcp_hashrnd for tests
- utun_instance: store socket_monitor per instance, add is_socket_ok check
- topo_node: detect IPv4 addresses with port from listening sockets
- topo_group: use node_name for display in routes
- Makefile.am: add socket_monitor.c to build
2026-08-02 12:16:42 +03:00
evgeny
14d1673f06
AGENTS.md: update structure to reflect actual codebase layout
...
- Debug categories: 25→27, add CONNECTIVITY and DB_SYNC
- Directory structure: reflect real subdirs (transport_layer, routing_layer, chat, proxy, lwip_tcp, media_delivery, media_async)
- File overview: reorganize by actual subdirectories, fix paths
- BBR: src/BBR/ → src/transport_layer/BBR/
- topo_node_lmdb → topo_node_sqlite
- Remove sha256.c/h (deleted), add missing lib/ modules (sqlite3, opus_codec, audio_compressor, json_flat)
- Add missing modules: ntp_time, ntp_node_time, media_delivery, media_async, nat_detection, topo_recovery, topo_group_connect, node_conn_direct, socket_monitor
- Add chatgui-android to tools/
2026-08-02 12:16:25 +03:00
evgeny
fdbb5b7bc0
ipv6: use netlink RTM_GETADDR to properly detect permanent vs temporary IPv6 addresses
...
getifaddrs() ifa_flags contains interface flags (IFF_UP etc.), NOT address
flags (IFA_F_TEMPORARY). Since IFA_F_TEMPORARY == IFA_F_SECONDARY == 0x01,
and 0x01 in interface flags is IFF_UP, ALL addresses appeared as 'temporary',
making the permanent>temporary priority non-functional.
New netlink-based get_interface_ipv6_addr_nl() reads real IFA_FLAGS from
RTM_GETADDR response, correctly identifying:
- Temporary: IFA_F_TEMPORARY=1, IFA_F_MANAGETEMPADDR=0
- Stable/mngtmp: IFA_F_TEMPORARY=1, IFA_F_MANAGETEMPADDR=1
- Legacy static: IFA_F_TEMPORARY=0
Verified: wlo1 permanent (3a7a:eff:fef5:9637) now correctly selected
for prefer_stable=1, temporary (1fb5:b7c:7538:dcf4) for prefer_stable=0.
2026-08-02 11:13:47 +03:00
evgeny
f67bc23cd3
ipv6: fix sin6_scope_id and socket classification for link-local addresses
...
- CM_V6_ANY for :: socket (matches all v6 addr classes)
- sin6_scope_id from s->netif_index (not from local_addr where :: has scope=0)
- getnameinfo in stcp_link_connect to preserve scope_id in addr string
- scope_id in cm_invite_tcp_connect, ncd_create_links, connect_create_links_v6, cm_bg_ping_to_node
2026-08-02 10:45:18 +03:00
evgeny
50156e12af
android: member list screen + link status dots, ipv6 autoconnect fixes
...
Android chatgui:
- New MemberListScreen with member list, detail card, edit dialog
- Link status dots (green/red/grey) per address in detail card (1s poll)
- Self-node name coloured green
- ChatScreen: people icon in TopAppBar
IPv6 autoconnect fixes (3 bugs in conn_mgr/topo):
- topo_node_sqlite_node_load: load v6 addresses from DB
- topo_node_registry_store: merge v6_addrs into existing node
- cm_sock_v6_classify: wildcard [::] treated as CM_V6_DIR
- cm_add_v6_link: htons(port) was missing
Memory fixes:
- strdup→u_strdup in bridge (7 instances)
- u_realloc cap update before success check (3 instances)
- char sql[256]→[512] for truncated SELECT
Chat member hash now includes addresses for change detection
Linux chatgui:
- Link status dots in AccountList detail panel (1s poll)
- Self-node name in green in member list
2026-08-01 23:40:58 +03:00
evgeny
6719a1e23c
IPv6: STCP dual-stack + Android config + invite fixes
...
- stcp_server: dual-stack (AF_INET6 + IPV6_V6ONLY=0) instead of IPv4-only
- stcp_client: getaddrinfo(AF_UNSPEC) instead of inet_pton(AF_INET)
- stcp_link: detect address family from remote_addr->ss_family
- platform_compat.h: add <netdb.h> for getaddrinfo on POSIX
- ConfigProvider.kt: add [server:main6] addr=[::]:PORT for Android
- invite_link_c.c: invite_serialize_addrs handles IPv6 (was IPv4-only)
2026-08-01 20:19:00 +03:00
evgeny
f5e18891bc
chat_sync: invite — process IPv6 addresses from invite link
...
cm_invite_trampoline() previously skipped all IPv6 addresses from
invite links (if (family != 4) continue). Now:
- DB save: save IPv6 addresses to node_addresses with family=6
- TOPO_NODE: create TOPO_ADDR6 entries, populate ni->v6_addrs
- ncd_create_links already handles IPv6 sockets correctly
- Condition check includes v6_addrs alongside v4_addrs
- Cleanup frees v6_addrs chain
2026-08-01 20:03:21 +03:00
evgeny
af3e2ee869
chatgui: IPv4+IPv6 dual-stack listen by default
...
- Default config creates [server:lan] (0.0.0.0) + [server:lan6] ([::])
- Network settings save also writes [server:lan6] section
- Sets IPV6_V6ONLY=1 on IPv6 sockets to avoid conflict with IPv4
- interface_addr for [::] bind prefers permanent IPv6 over temporary
2026-08-01 19:52:28 +03:00
evgeny
7799d54c0c
conn_mgr: обновить API на единую точку входа conn_mgr_open_invite, поправить порядок destroy, обновить всех потребителей
...
- conn_mgr_cb_t: 5 параметров (h, node_id, group_id, event, arg)
- conn_mgr_open_invite: единая функция (ni=NULL — обычное, ni!=NULL — invite)
- CONN_EVENT_JOIN для успешного invite
- struct CONN_MGR_HANDLE: добавлен group_id
- bind/unbind в conn_mgr_init/destroy (один на инстанс, перезапись безвредна)
- utun_instance_destroy: conn_mgr_destroy до закрытия сокетов
- cm_ncd_callback: занулять ncd_handle при DOWN, защита от вызова после destroy
- topo_group_connect: свой трекинг handle'ов, conn_mgr_close для отмены
- обновлены: topo_recovery, media_download, media_delivery, chat_sync, тесты
2026-08-01 17:52:56 +03:00
evgeny
625382de34
node_conn_direct: add specific_sock param, move registry to per-instance; expose sc_hex_to_binary; add CONFIG_CONN_HANDLE
2026-08-01 12:34:53 +03:00
evgeny
8237d92be9
fix: NCD close UAF + conn name + init_connections per-link ni_tmp
...
- ncd_down_cb: defer callback removal+close via uasync_call_soon to avoid
UAF in etcp_cbk_fire iteration (removing ncd_up_cb corrupts saved next ptr)
- ncd_recv_control_handler: use deferred close for CLOSE handlers instead of
direct etcp_connection_close to avoid nested etcp_cbk_fire UAF
- node_conn_direct_open/open_node: use ni->node_name if available for
conn name, fallback to 'n_<node_id>' instead of NULL
- init_connections: build ni_tmp in link loop with only current link's addr,
preventing NCD from creating links for ALL addrs on first socket
- utun_instance_reload: same per-link ni_tmp fix
- init_connections/reload: set ni_tmp.node_name = client->name for
test find_client_link by name
2026-08-01 12:30:31 +03:00
evgeny
4ba4ab038c
cleanup: remove dead nd_handle from CONN_MGR_HANDLE, fix double semicolons in node_conn_direct, protect close from NULL conn
2026-08-01 09:48:16 +03:00
evgeny
eb2a8f6975
node_conn_direct: add open_node variant, refactor internals
2026-08-01 09:45:32 +03:00
evgeny
153483fd96
media_delivery: обновление и новый тест conn_mgr_handles
2026-08-01 08:40:18 +03:00
evgeny
d310bccf08
fix: memory pool alloc mismatch in tests, db_sync SEND_DATA buffer overflow
...
- test_etcp_router_reconnect, test_etcp_connect, test_stcp_traffic:
replace u_calloc with memory_pool_alloc for TOPO_SOCKMETA4/TOPO_ADDR4
- db_sync.c: fix req[14] -> req[15] — SEND_DATA request header is 15 bytes
(type:1 + from:4 + count:2 + vp:4 + want_from:4)
2026-07-31 21:44:44 +03:00
evgeny
fe9be74e29
topo refactoring (WIP): topo_node.h + AGENTS.md safety rules
2026-07-31 16:01:47 +03:00
evgeny
51d6c782ac
voice playback: miniaudio cursor ground truth + EMA smooth decay
...
- SoundManager: add currentPcmCursor()/isCurrentPcmPlaying() via ma_sound_get_cursor_in_pcm_frames / ma_sound_is_playing
- messagedelegate: replace wall-clock position tracking with real miniaudio cursor, remove 200ms hardcoded delay
- messagedelegate: end-of-playback detection via isCurrentPcmPlaying() instead of wall-clock comparison (was killing audio ~200ms early)
- messagedelegate: EMA smoothing of displayFrac/displayElapsed (0.15 factor, 16ms timer)
- messagedelegate: timer continues after audio stops to animate EMA decay to 0 (not mouse-move dependent)
- media_delivery: download progress callback, Ed25519 sig verify, author fallback, content hash check
- conn_mgr: already-connected returns OK with callback instead of error
- chatgui: voice download-pending auto-play, file download progress bar, media bar colors
2026-07-31 00:17:03 +03:00
evgeny
641c9f574f
db_sync: cascade insert + SYNC_DONE fixes + done_cbk + test stabilization
...
- db_record_insert_cascade: unified insert with on_insert + PUSH cascade
- SYNC_DONE moved from INIT_RESP to DATA handler (master sends after slave response)
- db_sync_add/remove_done_cbk: global sync-completion subscription (etcp pattern)
- REQUEST_SYNC handler: sync_state != 1 instead of == 0
- SYNC_DONE mc==pc hash mismatch: accept as converged
- Removed unconditional sync_state=2 from DATA handler
- test: done_cbk for sync phases, count-only for PUSH phases, removed dead B<>C reinitiate
2026-07-30 20:23:47 +03:00
evgeny
c093630d4d
db_sync: async batch chain_hash recalc (batch 50, timeout 0→100tb), flush before protocol chain_hash reads, remove db_cascade_from/range + do_cascade param
2026-07-30 15:53:23 +03:00
evgeny
df13b16fad
docs: AGENTS.md chat module descriptions, improved ETCP debug logging, android AGENTS update
2026-07-30 12:20:04 +03:00
evgeny
6f502243db
fix: etcp_conn_reset resume output_queue+ack_q+normalizer; collision client-timer cancel; ETCP full state dump to debug log on sync TIMEOUT
2026-07-30 09:17:28 +03:00
evgeny
a3b00984ed
fix: stable ETCP reconnect (no REINIT loop), own voice playback, peersOnline via conn state, UDP log diagnostics
2026-07-30 01:21:40 +03:00
evgeny
70797f921e
feature: media auto-download + manual download + UI download state indication (Android + desktop)
...
C-layer:
- chat_event.h: CHAT_EVT_ATTACHMENT_DOWNLOADED (14)
- chat_msg.c: fixed md_auto_download (non-NULL done_cb, correct media_base from db_path, use chat_setting for autoload checks)
- chat_msg.c: added chat_core_attachment_download + trampoline for manual download
- chat_core.h: exported attachment_dl_req + trampoline
Android (Kotlin + JNI):
- Message: downloadState field (parse from localAttrs)
- ChatRepository: parse localAttrs for download state
- NativeLib: attachmentDownload() JNI
- MessageBubble: FileBubble with download status icon + tap-to-download
- ChatViewModel: downloadAttachment() + CHAT_EVT_ATTACHMENT_DOWNLOADED handler
- ChatScreen: wire onDownloadFile handler
- android_jni_bridge: utun_bridge_attachment_download + JNI + localAttrs in JSON
Desktop (Qt/C++):
- messagedelegate.h: MsgFileDownloadStateRole, MsgChannelIdRole
- messagelist.cpp: parse localAttrs for file download state
- messagedelegate.cpp: FileBubble with download icon/text + click handler via chat_core_attachment_download_trampoline
- gui_bridge.h: GUI_EVT_ATTACHMENT_DOWNLOADED (14) + callback typedef
- gui_bridge_impl.cpp: event dispatch + setter
- mainwindow.cpp: callback registration -> refresh message list
2026-07-30 00:01:38 +03:00
evgeny
b8920cf483
chat_settings: [chat] config section + live sync + fix test segfault
...
- New chat_setting.c/h: unified chat settings API (int/str getters)
- Config parser supports [chat] section, calls chat_setting_set per key
- chat_core exposes chat_core_set_setting / trampoline for GUI bridge
- chatgui: AudioDevice + Storage pages persist to [chat] config + live apply
- chatgui-android: ConfigProvider, NativeLib, headless handle chat settings
- MessageList: 200 msg limit, fixed saveChannelState via trampoline
- test_media_delivery_full: fix segfault at shutdown (mon() timer vs freed conns)
2026-07-29 21:18:49 +03:00
evgeny
efbb495016
media_delivery: fix SUPER_REPL spam + streaming verification
...
Bugs fixed:
- md_super_peer_add: timeout_tb = 0 → MEDIA_REPL_TIMEOUT_TB (timer fired every poll)
- md_repl_retrans_cb: md from peer->connect_timer (garbage) → peer->md
- md_repl_retrans_cb: removed inflight_count=0 reset (don't resend acked entries)
- stream_ctx: removed unused block_data field (was NULL, caused crash in BLOCK_DONE)
Test improvements:
- stream_completed flag for reliable streaming verification
- File created in <db_dir>/media/ (matches media_index path logic)
- 9/9 full test, 33/33 total
2026-07-29 20:42:47 +03:00
evgeny
b4824de3b8
media_delivery: fix streaming crash, correct file path via media dir
...
- Fix NULL block_data deref in stream_send_chunk_cb
- Test B1: create file in <db_dir>/media/, commit to media_files
- Store media_base in ui_state for streaming handler path resolution
- 8/9 tests pass (streaming works but timing issue with SUPER_REPL flood)
2026-07-29 20:16:47 +03:00
evgeny
a6321e15b3
media_delivery: streaming, fallback, admission control, 8/9 tests
...
- md_handle_block_req: real chunk streaming via etcp_router_on_send_ready
- stream_ctx state machine: backpressure waiter → send chunk → repeat
- content_hash + block_sig on stream completion
- Fallback to author when supernode has no block info
- media_download: author_node_id for peer fallback
- test_media_delivery_full: 8/9 pass (SUPER_HELLO, HAVE_BLOCK, replication, admission, file create)
- Known issue: streaming test hung (BGP route for n1→n2 not established in time)
2026-07-29 19:52:13 +03:00
evgeny
57e6ffed16
media_delivery: admission control + OVERLOADED + full integration test
...
- MEDIA_BLOCK_OVERLOADED (0x0F) subcommand + packed struct
- Admission control: track active_streams, reject > 3 with OVERLOADED
- media_delivery_stream_done() to decrement counter after stream finish
- Auto-download trigger in chat_msg.c (parse media metadata, check settings)
- test_media_delivery_full.c: 9/9 tests on 4 instances
(SUPER_HELLO, HAVE_BLOCK, replication, admission control, OVERLOADED)
- All 33 existing tests still pass (15+5+4+9)
2026-07-29 19:29:56 +03:00
evgeny
5e739176fa
media_delivery: fix etcp_route_send svc_id + integration test
...
Root cause: etcp_route_send reads dgram[0] as svc_id, not subcmd.
router_deliver prepends svc_id byte on receive.
Fixes:
- md_send/md_dl_send/msend: prepend ETCP_RT_ID_MEDIA_DELIVERY to dgram[0]
- md_etcp_recv: read subcmd from data[1] (was data[0])
- etcp_api.h: document dgram[0]=svc_id convention
- media_delivery_set_supernode(): public API for dynamic switching
Tests:
- test_media_delivery_integration: 4/4 (SERVE_REG, HAVE_BLOCK, supernode stop/start)
- All 24 existing tests still pass
2026-07-29 18:31:18 +03:00
evgeny
a863da7737
media_delivery: add tests + fix queue_new NULL ua and index_offset bugs
...
- test_media_delivery_sql: 15 tests (SQL tables, CRUD, packed structs)
- test_media_delivery_download: 5 tests (chunk write/append, sig verify, assembly, cancel)
- Fix: queue_new(NULL) returns NULL — pass inst->ua everywhere
- Fix: queue index offset must be offsetof(struct, key_field) not 0
- Move struct media_download to header for test visibility
2026-07-29 17:53:46 +03:00
evgeny
fb3e34080d
media_delivery: implement full media delivery subsystem (stages 1-8)
...
- topo_group: add BGP node event callbacks (NEW/UPDATE/REMOVE)
- member_sync: add multi-subscriber node_props_changed callback (adm_tags)
- media_delivery: SQLite tables (block_availability + super_sync), full protocol handler
- media_delivery_proto.h: packed protocol structures (15 subcommands)
- media_download: download management, chunk streaming, block assembly, HAVE_BLOCK with retry
- Makefile.am: add media_download.c to builds
2026-07-29 17:14:32 +03:00
evgeny
7d9cbad8c5
media_delivery: add architecture description and implementation plan
2026-07-29 16:53:30 +03:00
evgeny
65dbfa6813
feat: media_async + media_index modules, media_files table, tests
...
- media_async: thread-per-task async engine with primitives (sha256, sign, copy, uuid, file_size)
- media_index: media_files DB table with register_async for indexing chunks
- chat_msg: async media submission via register_async, simplified chat_msg_submit fields
- voice_recorder/attachment_sender: write single file (no chunk splitting on caller side)
- inputbar/messagelist: updated to new simplified submit interface
- test_media_async: 4-thread stress test (200K ops / 2 sec, 0 errors)
- test_media_index: 9 cases covering commit edge cases + async flow
- build: Makefile.am, CMakeLists.txt, utun_sources.cmake updated
2026-07-29 14:15:10 +03:00
evgeny
ce5a84da24
fix: uasync epoll event ordering + test_uasync_socket_race fix
2026-07-29 11:10:55 +03:00
evgeny
b7988f0ef8
refactor: single source of truth — PlaybackState in ViewModel
...
VoiceBubble is now a pure renderer — no local state, no LaunchedEffect, no timer.
All state from ViewModel.playbackState StateFlow:
- playing/paused/elapsedMs/progress/filePath — one atomic snapshot
- isActive = playbackState.filePath == message.filePath — only active clip shows cursor
- onProgress callback from AudioRecorderManager feeds real elapsed into ViewModel
- ViewModel timer (80ms) updates progress between onProgress callbacks
Removed: VoiceBubble's playing/paused/seekVersion/PlayState/onDone/onPaused.
Removed: AudioRecorderManager's isPaused/elapsedMs/pausedElapsedMs.
2026-07-29 02:29:53 +03:00
evgeny
9742772880
fix: monotonic playGeneration instead of re-settable stopped flag
...
stopped flag was set before join() but cleared after, causing race:
if thread was still blocked in decodeRead when stopped was reset,
onComplete fired anyway. Monotonic playGeneration ++ never decreases,
thread captures myGen at start, compares after completion —
correctly skipped if generation changed (another stop/seek started).
2026-07-29 02:20:25 +03:00
evgeny
e4af56856c
fix: atomic PlayState replaces non-atomic seekVersion+elapsed+progress
...
PlayState data class bundles playId, elapsedMs, progress into one atomic snapshot.
LaunchedEffect keyed on playId — when it changes (seek/resume), the timer reads
elapsedMs and progress from the SAME snapshot, eliminating the race between
seekVersion++ and elapsedMs=seekMs.
2026-07-29 02:13:47 +03:00
evgeny
1481d1244b
fix: seekVersion forces LaunchedEffect restart on seek/resume
...
When playing=true and seek happens, LaunchedEffect(playing) key didn't change,
so the elapsed timer kept using the old start time. Added seekVersion counter
as second key — increments on waveform tap and play/resume click, forcing
the timer coroutine to restart with the new elapsedMs position.
2026-07-29 02:10:51 +03:00
evgeny
0afc74e567
fix: stop/pause no longer fires onComplete from killed thread
...
When stopPlayback/pausePlayback kills the playback thread, the thread's
onComplete callback was still firing, resetting UI state (playing=false,
elapsed=0). Added @Volatile 'stopped' flag — onComplete only fires on
natural completion, not on external stop/pause.
2026-07-29 02:08:51 +03:00
evgeny
2edd9bcc06
cleanup: remove dead currentPlayPath, fix seekVoice _currentPlayingPath reset
...
- AudioRecorderManager: removed unused currentPlayPath (duplicate of ViewModel state)
- ChatViewModel: seekVoice now resets _currentPlayingPath on complete (prevents
pause-on-already-ended after seek finishes)
2026-07-29 02:03:09 +03:00
evgeny
2e8aa89397
voice: fix waveform — pointerInput on Box, cursor + white bars stay on pause
...
- Canvas pointerInput moved to wrapping Box (state updates trigger recomposition)
- showCursor = playing || paused (cursor and white bars visible on pause)
- elapsed/dur stays visible on pause too
2026-07-29 02:00:43 +03:00
evgeny
6980f34df9
voice: real pause (saves position), waveform tap seek, resume from position
...
- AudioRecorderManager: playFromPosition(startMs), pausePlayback, elapsedMs tracking
playVoiceFile now delegates to playFromPosition. fade skipped PCM frames on seek.
- ViewModel: playVoiceMessage with pause toggle, seekVoice method
- VoiceBubble: click tap on waveform → seek, pause state (⏸ keeps cursor visible)
Webform canvas with detectTapGestures for seek input
2026-07-29 01:57:31 +03:00
evgeny
887bbdbf84
voice: play/pause toggle, stop previous on new track
...
- ViewModel: _currentPlayingPath tracks active track. Tap same → stop.
Tap different → stop old, play new. onComplete clears currentPlayingPath.
- AudioRecorderManager: stopPlayback() already called at start (existing)
- VoiceBubble: simplified click, always sends to ViewModel for state management
2026-07-29 01:51:25 +03:00
evgeny
b8e15ad1f2
voice: played bars white, yellow cursor line on waveform
2026-07-29 01:48:16 +03:00
evgeny
ee8167793c
voice: waveform idle bars lighter (#CCD4 80% — near white)
2026-07-29 01:45:03 +03:00
evgeny
109326717e
voice: play button white circle, black icon
2026-07-29 01:44:26 +03:00
evgeny
f745fb25e8
android: lighten waveform bars (idle: #A0A0B0 70%, playing unplayed: 35% alpha)
2026-07-29 01:43:55 +03:00
evgeny
4ffa59d968
unify voice waveform format: base64 wf={100chars};dur={ms}; for both desktop and Android
...
- inputbar.cpp: CSV waveform → base64 log-scale (same as voice_recorder.c)
- messagelist.cpp: sendVoiceMessage removes displayName|dur_sec| prefix, uses wfStr directly
setVoiceMessageRoles: decodes new format wf={base64};dur={ms};|... from data field
- messagedelegate.cpp: waveform values now pre-normalized 0..1, no log recalculation needed
- VoiceEncoder: no changes needed (was already compatible)
Both platforms now store identical format in chat_msg_submit.data:
wf=ABCDef...100chars;dur=NNNN;|file_size|block_size|num_blocks|sigs_hex
2026-07-29 01:43:11 +03:00
evgeny
b65a091b00
voice: base64 compact waveform (100 bytes), progress bar, play/pause auto-reset
...
- voice_recorder: 100-char base64 (A-Za-z0-9+/) log-scale waveform, ~120 bytes total vs ~600 CSV
- ChatRepository: parse base64 'wf=<100 chars>;dur=NNNN;' → normalized 0..1 List<Float>
CSV fallback for old messages (length < 50 or contains comma)
- VoiceBubble: progress bar (blue played / gray unplayed), ▶/⏸ toggle, elapsed timer
- onComplete callback wired through ViewModel → AudioRecorderManager → VoiceBubble auto-reset
2026-07-29 01:36:43 +03:00
evgeny
3c75c8f687
icons: replace emoji text with PNG resources + add media_dir debug logs
2026-07-29 01:27:23 +03:00
evgeny
491fa84db8
voice: fix waveform display + text buffer, 75% width, play/pause state
...
- bridge: txt buffer 256→2048, limit 250→2000 (voice d-field can be ~900 bytes)
- VoiceBubble: Column layout — play+waveform on top, duration|timestamp on bottom
- Play/pause toggle with ⏸/▶ icons
- Voice messages use 75% screen width max (300dp for others)
2026-07-29 01:21:35 +03:00
evgeny
94a537ebdd
voice: waveform recording + display, playback wiring
...
- voice_recorder: waveform_levels[100] accumulated during feed, normalized to 100 values in stop()
stored as 'wf=...;dur=...;' in chat_msg_submit data
- bridge: filePath in get_messages_json from local_attrs.fp, g_db_path moved global
- Message model: waveform: List<Float>, voiceDurationMs: Int, filePath: String
- VoiceBubble: Canvas waveform (100 bars, log scale), play button, duration
- ChatViewModel.playVoiceMessage → AudioRecorderManager.playVoiceFile
2026-07-29 01:15:57 +03:00
evgeny
39d6f19d97
fix: chat_msg media_dir path — strip filename from g_cc.db_path
...
g_cc.db_path is '/data/.../files/chats.db' (file path), but media blocks
are written to '/data/.../files/media/<channel>/'. chat_msg was concatenating
'chats.db/media/...' — now strips the database filename, using only the
directory portion for the media path.
2026-07-29 01:04:27 +03:00
evgeny
b11e705f7a
android: input bar — single right icon (PTT when empty, Send when text)
2026-07-29 00:58:26 +03:00
evgeny
b90728be3c
android: round send button with \u27A4 icon (matching desktop chatgui)
2026-07-29 00:55:39 +03:00
evgeny
9fca8d5e1f
android: fix voice file creation (mkdir errno logging), PTT while(true)
...
- voice_recorder: proper mkdir with errno/EEXIST check, errno logged on fopen failure
- MessageBubble: pointerInput wrapped in while(true) so PTT works after first gesture
2026-07-29 00:53:23 +03:00
evgeny
1dac0b8c81
unify compressor: remove C++ duplicate audiocompressor, use lib/audio_compressor.c in chatgui
2026-07-29 00:52:05 +03:00
evgeny
00afc5c80a
android: fix PTT — one Box across all states, release now works; 1s min duration
...
- PTT Box: same composable identity in idle/recording states (just changes bg color)
Gesture coroutine survives recomposition → onPttReleased() fires on finger lift.
When locked, Box is replaced by cancel/send IconButtons.
- Min voice duration: 500→1000ms (C and ViewModel)
2026-07-29 00:32:10 +03:00
evgeny
90de87b13d
move audio_compressor from libutun_lite/ to lib/ — shared library
...
- audio_compressor.h/c moved to lib/ (alongside opus_codec, mem, debug_config)
- lib/Makefile.am: added to libuasync_a_SOURCES
- utun_sources.cmake: removed from _cfg_src (GLOB from lib/ picks it up)
- tests/Makefile.am: test_audio_compressor added to check_PROGRAMS
- test includes simplified (debug_config.h, mem.h — lib/ in include path)
2026-07-29 00:26:45 +03:00
evgeny
d22eac55f7
fix audio_compressor: flat array instead of ring buffer, +unit test (411 asserts)
...
Ring buffer (pending_head/pending_tail/cap) replaced with simple flat array (pending_count/cap).
u_realloc copies linearly but ring buffer needs memmove for wrap-around — mismatch caused
SIGSEGV write to 0x10 on ARM64. Flat array: append to end, process from [0], memmove down.
Performance unchanged (max ~15 blocks).
Tests: create/destroy, passthrough disabled, basic push+flush, silence, reset, stress (200 cycles)
2026-07-29 00:11:29 +03:00
evgeny
fc2adcf81d
android: fix voice recording — init g_rec, move includes, check startRecording result
...
- voice_recorder_init(db_path) in utun_bridge_init (was never called, g_rec stayed NULL)
- voice_recorder_deinit() in utun_bridge_destroy
- ViewModel: set _isRecording only after startRecording() succeeds
2026-07-28 23:52:33 +03:00
evgeny
50214d50c1
android: fix PTT button — Box+pointerInput(hasMicPerm) instead of IconButton+onClick conflict
2026-07-28 23:35:53 +03:00
evgeny
1f8f41bda7
android: tabbed settings (Settings/Audio) with mic test, codec preset, compressor sliders
...
- voice_recorder: compressor config API (max_gain, lookback, lookahead, rise_rate, target_level)
- bridge/JNI: compressor_config export
- AudioRecorderManager: startMicTest/stopMicTest for level preview
- SettingsScreen: TabRow with Settings + Audio tabs
- Audio tab: mic test with live level bar, Opus preset selector, 5 compressor sliders matching desktop
2026-07-28 23:33:19 +03:00
evgeny
9b6dd6476c
android: PTT swipe-to-lock, recording overlay with level bar, cancel/send buttons
...
- voice_recorder: peak_level tracking in feed(), voice_recorder_get_peak_level()
- bridge/JNI: voice_get_peak_level API
- ViewModel: isRecordingLocked, recordingDurationMs with 80ms timer, lock/send/cancel
- InputBar: 3 states (idle/holding/locked), custom pointerInput gesture with swipe-up lock
- ChatScreen: poll peak level 12x/sec during recording
2026-07-28 23:28:19 +03:00
evgeny
0f1e6e0006
android: fix NDK build — add Opus sources, fix Kotlin composable context, fix bridge db_path param
2026-07-28 23:20:19 +03:00
evgeny
5b6979da27
android: voice messages recording + playback, file attachments
...
- C99 port of AudioCompressor (libutun_lite/audio_compressor.h/c)
- Voice recorder: PCM buffer + compressor + Opus encode + block splitting + uasync send
- Attachment sender: file splitting into blocks + uasync send
- Bridge API + JNI: voice start/feed/stop/cancel, attachment send, Opus decode for playback
- Kotlin: AudioRecorderManager (AudioRecord + JNI feed), AudioPlayer (AudioTrack + JNI decode)
- UI: PTT button with press-to-talk, attach button with file picker, recording overlay
- Message display: voice messages (play button), file attachments (icon + name)
- Settings: Opus preset selector (Low/Standard/High), compressor toggle
- AndroidManifest: RECORD_AUDIO, storage permissions
2026-07-28 23:15:59 +03:00
evgeny
e751e6ee69
android: voice messages + attachments architecture plan, build fixes
2026-07-28 23:07:23 +03:00
evgeny
f8d7c21a79
Android: unify DB access via JNI/JSON, fix instance lifecycle, add restart + health check
...
- ChatRepository: remove SQLiteDatabase (READONLY 2nd handle), use JNI→shared g_cc.db (FULLMUTEX, like desktop)
- instance_lite: simplify start/stop lifecycle — start no longer waits for init, stop waits for thread exit with timeout, add internal restart (no thread kill)
- Restart trampoline: reinit UDP log target on config change
- Health check: ping/uasync_post round-trip every 3s, red dot on stall
- Settings: Restart instance button
- Fix: g_inst check instead of g_running for is_running()
- Fix: SharedFlow replay=1 + proactive DB_READY check in ViewModel
2026-07-28 21:13:11 +03:00
evgeny
03b34e9580
android: fix QR join flow + cleanup log levels + remove log artifacts
...
- MainActivity: call NativeLib.joinChannel directly (bypass ViewModel null repo)
- LogManager: add Log.d for Kotlin logs visibility in logcat
- ChatViewModel/NativeLib: add diagnostic logs for join path
- chat_sync: JNI-safe logs via __android_log_print, add error on !g_cs
- etcp_debug: DUMP INFO→DEBUG (remove 99.8% packet spam)
- secure_channel/etcp_connections/topo_node: keepalive PING/PONG spam INFO→DEBUG
- .gitignore: logreceiver output + build artifacts
- Remove tracked log files and build dir from repo
2026-07-28 18:11:11 +03:00
evgeny
0216b0bf50
android: utun shutdown diagnostics + non-blocking stop + logreceiver doc
...
- instance_lite: cleanup moved to uasync thread (self-detach), events on start/stop
- udp_log: cancel_timer before uasync_destroy, flush on stop, stopping flag
- jni_bridge: fixed UDP stop order (cancel_timer → destroy → flush)
- instance_lite: u_report_unfreed_blocks at all shutdown paths
- chat_event: CHAT_EVT_SERVICE_STARTED/STOPPED for GUI notifications
- AGENTS: logreceiver section
2026-07-28 17:06:09 +03:00
evgeny
064bed06f2
android: fix key regeneration, Clear DB, uasync eventfd, udp log from config
...
- jni_on_event: fix JNI_EDETACHED — AttachCurrentThread/DetachCurrentThread
- u_async.c: pipe→eventfd for reliable cross-thread wakeup
add process_posted_tasks in poll() path, fix EINTR (saved_errno)
- bridge_debug_hook: keep udp_log_write, remove mutex from udp_log
- memory_pool.c: alloc/free logs INFO→DEBUG (reduce spam)
- instance_lite.c: chat_event_set_handler before ensure_keys,
KEYS_GENERATED events, fchmod 0600 on keys.conf,
UDP log from config [log_udp] section, regenerate_trampoline
- config_parser: parse [log_udp] ip/port
- NativeLib.kt: remove callbacksSet, simplify init/stop/destroy
- ChatViewModel.kt: unified event callback in init, pubKey StateFlow,
requestRegenerateKeys, clearState fix
- SettingsScreen.kt: pubKey.collectAsState(), Clear DB via restart()
- HeadlessService.kt: remove setUdpLogTarget (now from config)
- android_udp_log.c: simplified — no mutex, buffer+send+timer in one thread
- utun_instance.c: NULL-check tcp_connections before destroy
- chat_event.h: +CHAT_EVT_KEYS_GENERATED 11, -NODE_CHANGED
- logreceiver: UDP log receiver tool
2026-07-28 16:29:33 +03:00
evgeny
d0cca27edd
invite: add proto field (UDP/TCP/BOTH) to invite link binary format
...
Format per v4 addr: family(1) + socketId(1) + proto(1) + addr(4) + port(2) = 9 bytes (was 8)
Proto values: 0x01=UDP, 0x02=TCP, 0x03=BOTH
Affects: invite_link_c.h/c (Android), invite_link.h/cpp (desktop), chat_sync.c, conn_mgr.c, joindialog.cpp, utun_node.cpp
2026-07-28 00:34:07 +03:00
evgeny
5276c1288c
android: real utun instance + SQLite channels + reactive logs + QR join
...
- instance_lite.h/c: full uTun stack from INI config text
(keygen, uasync, UTUN_INSTANCE, SQLite, chat_core/sync, BGP, etcp_router)
- jni_bridge: nativeStart/Stop, nativeJoinChannel → chat_sync_connect_from_invite,
nativeSubscribeLogs, C logs → logcat + Kotlin LogManager
- Kotlin: direct read-only SQLite queries (channels, messages),
ViewModel with live event callbacks, reactive LogScreen (tail -f),
CameraX QR scanner with proper lifecycle, JoinChannelDialog
- HeadlessService: generates INI config from Kotlin settings → C instance
2026-07-28 00:01:57 +03:00
Evgeny
d1f6f6fca9
fix WELCOME deserialization: skip atl+adm_tags_sig fields before address data
2026-07-27 23:48:23 +03:00
evgeny
9e58160480
android: initial chatgui-android project with QR join
...
- libutun_lite: C99 core, invite_link_c.h/c (compatible with desktop)
- jni_bridge: android_jni_bridge.c/h with logcat logging
- app: Jetpack Compose UI, CameraX + ML Kit QR scanner
- JoinChannelDialog, QrScanScreen with proper camera lifecycle
- headless: control socket with join command
- OpenSSL prebuilt libs for arm64-v8a + x86_64
2026-07-27 22:50:29 +03:00
Evgeny
a47ef86810
uasync: fix stall detection — record timestamp after poll wait, not before
2026-07-27 19:42:35 +03:00
Evgeny
48bfe644c4
uasync: add event loop stall detection (warn if >10ms between poll entries)
2026-07-27 19:35:13 +03:00
Evgeny
2d53b3120f
ffmpeg: add build script and CMake integration
2026-07-27 17:59:07 +03:00
Evgeny
d497a8dc92
media_blocks: fix missing QJsonArray include
2026-07-27 17:16:02 +03:00
Evgeny
d4a396f888
media: Ed25519-подписи блоков, local_attrs, MediaBlockReader, файловые вложения
2026-07-27 17:09:31 +03:00
Evgeny
6b765de5cc
feat: voice playback delay compensation + waveform click-to-seek
2026-07-27 14:53:53 +03:00
Evgeny
da953c6c7a
fix: mic test level bar dynamic color too
2026-07-27 14:25:47 +03:00
Evgeny
f08b63466c
исправлены include-пути в chatgui GUI-файлах и utun_node.cpp после переноса chat в src/chat/
2026-07-27 13:35:40 +03:00
Evgeny
ed6132fcda
перенос chat-логики из chatgui/transport в src/chat/
...
- Создан src/chat/ с chat_event.h/c — система нотификаций
- Перенесены chat_core, chat_msg, chat_channel, chat_profile, chat_status
- Перенесены chat_sync, member_sync, merkle_sync, db_sync
- gui_bridge_post() заменён на chat_event_post() с возможностью регистрации обработчика
- chat_event_set_handler() — chatgui регистрирует мост в gui_bridge
- Без обработчика: события логируются через DEBUG_DEBUG + log_dump
- chat интегрирован в utun_instance.c (при db_path в конфиге)
- Обновлены include-пути, Makefile.am, CMakeLists.txt
- Из chatgui удалены старые transport/ файлы, обновлён utun_node.cpp
2026-07-27 12:58:33 +03:00
Evgeny
4595052b5b
fix: level bar dynamic color — red only above 85%
2026-07-27 12:20:06 +03:00
Evgeny
d5b97ff104
fix: immediate compressor apply + dead code removal + qDebug→DEBUG_* conversion
2026-07-27 12:11:50 +03:00
Evgeny
5ec1cb78be
fix: use DEBUG_* macros instead of qDebug in AudioRecorder/AudioCompressor
2026-07-27 11:56:49 +03:00
Evgeny
f1b599f0c0
feat: voice compressor with RMS+peak leveling, sliding window envelope, rate-limited gain
2026-07-27 11:24:47 +03:00
Evgeny
7004b110ae
feat: mic level bar in recording overlay
...
- InputBar: QProgressBar with gradient (green→yellow→red) in recording overlay
- updateRecordingUI: computes dB from peakLevel, updates bar every 100ms
- showRecordOverlay: resets bar to 0 on new recording
2026-07-27 09:35:16 +03:00
Evgeny
5593bfdc0c
fix: logarithmic waveform scale + visible idle color + duration display
...
- Waveform bars: linear→logarithmic (dB mapping -60..0dB)
- Colors: idle gray visible (130 alpha), played blue, unplayed dim blue
- Min bar height: 1→2px
- Duration: fallback to MsgVoiceDurationRole when not playing (was 0:00/0:00)
- Debug log: wfN, width, first value, dB, barH
2026-07-27 09:19:34 +03:00
Evgeny
e050f3f1f9
fix: waveform repaint via viewport()->update() instead of activeWindow()
...
- Timer now calls s_voiceView->viewport()->update() for correct delegate repaint
- s_voiceView captured from option.widget in paint() voice section
- Previously activeWindow()->update() didn't reach QListView viewport
2026-07-27 09:13:33 +03:00
Evgeny
05c7b4d47e
feat: waveform display + 3px progress bar in bubble + sliding window RMS
...
- AudioRecorder: sliding window RMS (avg 5 frames), waveformLevels() getter
- InputBar: downsample RMS to 100 samples, encode as wf0,wf1,... in textData
- MessageList: parse 3rd pipe-separated field as waveform, store in MsgVoiceWaveformRole
- MessageDelegate: new voice layout (16px play btn + 25px waveform + 3px progress bar)
- MessageDelegate: waveform bars colored by progress (blue before, gray after)
- Progress bar integrated at bottom of waveform area as colored fill
2026-07-27 09:07:14 +03:00
Evgeny
70a0a70b88
fix: crash — no delete of ma_sound/ma_audio_buffer during playback
...
- stopCurrentPcm(): only ma_sound_stop, no delete/uninit in runtime
- playRawPcm(): just stop old sound, create new objects (old ones leak until shutdown)
- shutdown(): cleanup accumulated ma_sound + ma_audio_buffer after engine uninit
- root cause: deleting audio objects from GUI thread while miniaudio worker reads them
2026-07-27 08:16:37 +03:00
Evgeny
8bd4a7218c
fix: true pause/resume with position preservation
...
- SoundManager: pauseCurrentPcm()/resumeCurrentPcm() — stop/start without destroy
- VoicePlayState: added paused/pausedPosSec fields
- editorEvent: 3-state logic — playing→pause, paused→resume, stopped→new
- Different file click: stops old with full cleanup, plays new from start
- Timer: skips paused items, full cleanup on auto-complete
2026-07-27 08:07:19 +03:00
Evgeny
830f729f52
fix: pause support + old message skip + stopCurrentPcm
...
- SoundManager: added stopCurrentPcm() for pause/stop of PCM playback
- messagedelegate: call stopCurrentPcm on pause, new play, and timer complete
- messagelist: skip old double-nested JSON messages (raw starts with '{')
- sound_manager.h: void* for ma_audio_buffer to avoid header dependency
2026-07-27 00:38:15 +03:00
Evgeny
2687c3ed82
fix: play button not responding + debug logging to log file
...
- chatview: QListView::mousePressEvent(event) instead of event->accept()
(Qt needs base class press to set pressedIndex for editorEvent to fire)
- messagedelegate: GUI_DEBUG replaces qDebug (writes to log file)
- voiceplayback: DEBUG_DEBUG/DEBUG_WARN + debug_config.h include
- voicemessageencoder: same debug migration
- inputbar: GUI_INFO replaces qDebug
- messagelist: DEBUG_DEBUG/DEBUG_WARN replaces qDebug/qWarning
2026-07-27 00:30:09 +03:00
Evgeny
01012675d0
fix: voice playback coordinate bug + debug logging + device name encoding
...
- messagedelegate: editorEvent now adjusts me->pos() by option.rect.topLeft()
- voiceplayback: enhanced debug logging for file open/decode/play
- messagelist: debug voice file path + exists check
- inputbar: debug mediaDir path on record
- sound_manager: debug in playRawPcm, decodeDeviceName() for mixed encodings
- voiceencoder: debug file write path
2026-07-27 00:22:00 +03:00
Evgeny
324d285145
fix: voice message display and playback — complete flow
...
- db_manager: getMessagesSince() now parses m.contentType from JSON (was missing)
- messagelist: setVoiceMessageRoles uses data directly as payload, not re-parsed as JSON
(data is already the 'd' field value extracted by db_manager)
2026-07-27 00:13:58 +03:00
Evgeny
fd3b125ecb
fix: voice message JSON double-nesting, '{' display
...
- req->data now stores 'filename|duration' instead of full nested JSON
- chat_core_submit_message builds the JSON with d='filename|duration'
- setVoiceMessageRoles splits d field by '|' to extract filename and duration
2026-07-26 22:16:09 +03:00
Evgeny
ca9d1384f2
fix: PCM copy, device name encoding, double shutdown
...
- playRawPcm: ma_audio_buffer_init_copy instead of ma_audio_buffer_ref (copies PCM)
- enumerateDevices: fromLocal8Bit instead of fromUtf8 for device names
- AudioRecorder: m_deviceStarted flag prevents double ma_device_uninit
- stopMicTest: delete instead of deleteLater to avoid deferred double shutdown
2026-07-26 22:01:46 +03:00
Evgeny
a4ae1c6b41
fix: RMS mic level, 25ms timer, speaker test, overlay recording indicator
...
- AudioRecorder: peak replaced with RMS (sqrt mean of squares)
- AudioDeviceSettings: level meter timer 100ms -> 25ms
- SoundManager: playRawPcm uses ma_audio_buffer_ref instead of ma_decoder (fixes speaker test)
- InputBar: recording overlay positioned over text input, no layout shift
- messagelist: removed old recording indicator widget
2026-07-26 21:27:57 +03:00
Evgeny
850a260aac
fix: voice message display, playback, recording UI, audio settings
...
- messagelist: parse content_type from JSON when DB column is empty
- messagelist: recording indicator (red dot + timer + cancel button)
- messagedelegate: editorEvent for play/pause toggle + progress bar
- messagedelegate: VoicePlayState tracking with QTimer
- InputBar: proper recordingContext (mediaDir + channelId)
- DbManager: dbPath() for media directory resolution
- AudioRecorder: peakLevel() for mic level meter
- VoiceEncoder: codec quality presets (Low/Standard/High)
- audiodevicesettingspage: Default device option first
- audiodevicesettingspage: mic level meter + test microphone
- audiodevicesettingspage: test speaker button
- audiodevicesettingspage: codec preset combo (Low/Standard/High)
- mainwindow: load opus_codec_preset from ui_state on startup
2026-07-26 21:19:29 +03:00
Evgeny
4fde0b0325
feat: integrate Opus codec into lib/libopus + voice messages in chatgui
...
- Add lib/libopus/ (opus v1.6.1 embedded source: CELT 18 .c, SILK 77 .c, SILK float 28 .c, OPUS core 14 .c)
- Add lib/opus_codec.h/.c (wrapper: encoder, decoder, raw PCM int16)
- Add tests/test_opus_codec.c (7 tests: silence, sine, compression, PLC, null, defaults, multi-frame)
- chatgui: AudioRecorder (miniaudio capture, 48kHz mono)
- chatgui: VoiceEncoder (PCM→Opus file with custom container)
- chatgui: VoicePlayer (Opus→PCM playback via SoundManager)
- chatgui: PTT button in InputBar, voice message send/receive in MessageList
- chatgui: AudioDeviceSettingsPage (device selection, persisted in ui_state)
- chatgui: MessageDelegate voice message rendering (play button + duration)
- Update autotools: configure.ac, Makefile.am, src/Makefile.am, tests/Makefile.am
- Update CMake: chatgui CMakeLists.txt, libutun CMakeLists.txt (link libopus_internal.a)
2026-07-26 20:34:38 +03:00
Evgeny
4a23593020
member_sync: add merkle_sync_broadcast relay to other SYNCED sessions
2026-07-26 18:44:45 +03:00
Evgeny
ef1e064bdc
merkle_sync: broadcast relay for star topology + all 6 test stages pass
...
- Replace active/synced with sess_state (SESS_SYNCING/SESS_SYNCED)
- Add merkle_sync_broadcast() API for relaying changes to SYNCED peers
- apply_items callback now receives from_peer parameter
- _handle_hashes: reset pending_count on session reuse (overwrite fix)
- _handle_batch: send broadcast to synced sessions on new items
- Test Stage 5: sequential B->A + C->A with relay (no 3rd sync needed)
- Test Stage 6: cancel + start_overwrite pass
- Fix _wait_for: remove i_phase global timeout dependency
2026-07-26 18:20:10 +03:00
Evgeny
b9bde23d51
Stage 5 WIP: sequential syncs for 3-instance test, increased timeouts
2026-07-26 17:53:43 +03:00
Evgeny
a1ecab997e
merkle_sync: fix 4 protocol bugs + add test suite (Stages 1-4)
...
- g_merkle singleton → per-instance msync (utun_instance.h)
- level_prefix: off-by-one shift (63→64)
- _handle_hashes: differs |= for shared buckets with different hashes
- _handle_batch: sub_pl double-level-offset (next_lvl→lvl)
- pending[] array replaces pending_requests counter
- member_sync: mask_shift 63→64 alignment
- test_merkle_sync.c: prefix arithmetic, tree building, 2-instance integration, randomized 50-iter sync
2026-07-26 17:42:27 +03:00
Evgeny
0e11d858e8
chatgui: fix all animations showing the same TGS (rlottie model cache key collision)
...
lottie_animation_from_data uses 'key' as a cache key for parsed models.
All LottieIcon instances were created with key="", causing rlottie's
model cache to return the first loaded animation for all subsequent
requests. Only visible on Windows where rlottie cache is enabled by
default.
Fix: pass unique animPath as key to each LottieIcon constructor.
Also replaced fprintf(stderr) diag with GUI_INFO logging via
AnimTimer::logRegisteredIcons() in debug_ui.h.
2026-07-26 15:18:59 +03:00
Evgeny
49da899964
chatgui: channel sorting by name or last message time with preview
...
- Add last_msg_at column to channels table
- Update last_msg_at on every message insert (send/receive)
- Parameterize getChannels() with ChannelSortMode enum (Alphabetical/Recent)
- Add getChannelLastMessage() for preview text in channel list
- Add sorting combo to Profile settings page (stored in ui_state)
- Reload channels on message receive when sort is recent
2026-07-26 11:08:59 +03:00
Evgeny
332df381d1
chatgui: propagate local nick changes to message authors via MsgAuthorNodeIdRole + reloadLocalNicks
2026-07-26 10:11:31 +03:00
Evgeny
22db84816e
chatgui: add local_nick TEXT to peers table DDL, remove ALTER TABLE hacks
2026-07-26 09:45:00 +03:00
Evgeny
86843693c9
chatgui: ensure local_nick column exists before SELECT in getChannelMembers
2026-07-26 09:43:39 +03:00
Evgeny
df3fc04523
chatgui: RenameDialog — quick rename via context menu, separate mini dialog
2026-07-26 09:33:31 +03:00
Evgeny
85bdc00aaf
chatgui: local nicknames per channel member — edit via MemberPropsDialog, override display everywhere
2026-07-26 09:19:31 +03:00
Evgeny
373a2e4687
chatgui: member detail panel redesign — compact format with relative time, colored online dot, 5s auto-refresh
2026-07-26 09:09:21 +03:00
Evgeny
11ab897fe5
chatgui: fix RTT display 10x overstatement (DB stores 0.1ms, displayed as ms); remove unused rtt_avg_100
2026-07-26 08:57:02 +03:00
Evgeny
12904a97e0
chatgui: AccountDelegate — palette-consistent colors (light/alternateBase instead of hardcoded)
2026-07-26 07:43:01 +03:00
Evgeny
77d89b841a
chatgui: double-click member edit, fix delegate backgrounds; transport: invite_sync/member_sync robustness
2026-07-26 07:18:27 +03:00
Evgeny
cd3c3ad07d
merkle_sync: fix level 0 SQL range, rebuild trees at startup
...
- _get_level_hashes: use separate SQL without prefix64<=? for level 0.
UINT64_MAX cast to sqlite3_int64 becomes -1, making prefix64<=-1 always
false for positive prefixes → bitmap always 0 → sync never exchanges data.
- member_sync_init: add _rebuild_all_trees to scan all peers_* tables and
call merkle_sync_recompute_path for each member. Ensures merkle_tree_hash
has entries for members added before merkle sync existed.
2026-07-25 23:31:36 +03:00
Evgeny
6bf8482558
merkle_sync: fix BATCH parse, synthetic HASHES, initiator done_cb
...
- Add 2-byte dlen prefix to terminal BATCH/HASHES data so receiver knows
exact byte count — fixes rem=0 bug that truncated multi-item BATCHes.
- Fix synthetic HASHES prefix_bytes: use merkle_sync_prefix_bytes(next_lvl)
for both declaration and _prefix_write, not current level's pb_i.
- Fix initiator never getting _session_done: responder sends confirmation
HASHES(is_data=1,level=0) before _session_done so initiator's done_cb fires.
- Add level==0 guard in _member_get_items/_member_update_bucket_hash
to prevent SQL queries with bogus mask on virtual root level.
2026-07-25 23:11:53 +03:00
Evgeny
be10714972
merkle_sync: fix prefix reconstruction, remove timeouts/retries
...
- _get_level_hashes: remove (0x1F << parent_shift) from range_end so
bitmap only includes children of the actual parent prefix (not all
parents). Add level 0 virtual root that queries all level-1 entries.
- merkle_sync_start: send HASHES at level 0 (virtual root) instead of
level 1/prefix 0. Root-level REQUEST prefix reconstruction now uses
the correct level-1 prefix from DB.
- _handle_batch: use merkle_sync_prefix_bytes(next_lvl) for synthetic
child HASHES instead of current level's pb_i (could be wrong size).
- Remove timeout/retry mechanism: delete _session_timeout_cb,
_session_start_timer, timer/retries fields. ETCP provides reliable
transport — no need for application-layer retries.
2026-07-25 23:00:42 +03:00
Evgeny
332e3a61e5
fix merkle_sync: prefix serialization writes LSB bytes instead of MSB
...
_prefix_write was writing the least significant pb bytes of the 64-bit
prefix, but the protocol expects the most significant pb bytes (bits
63..64-pb*8). For pb<=4 these ranges are disjoint → wire always got
zeros. _prefix_read also lacked the final left-shift to align the
result at bit 63.
This caused all level>=2 merkle sync requests/batches to receive
prefix=0 instead of the real prefix, making get_items/update_bucket_hash
find zero members → handle_batch len=7 with no data → sync completed
without actually exchanging member data.
2026-07-25 21:53:06 +03:00
Evgeny
ccc5396167
merkle_sync: fix _handle_batch — call _session_done after terminal buckets
2026-07-25 21:32:00 +03:00
Evgeny
d512bacc81
merkle_sync: fix message format — type after ns (match chat_sync)
2026-07-25 20:56:05 +03:00
Evgeny
ecb03ca290
conn_mgr: detect duplicate conn in handshake; etcp: loud collision errors in link/peer_id
2026-07-25 19:43:26 +03:00
Evgeny
a4582202a8
merkle_sync: fix range_end formula — cover all parent+child bucket bits
2026-07-25 17:58:51 +03:00
Evgeny
be5a760de9
merkle_sync: add debug logs to _get_level_hashes (SQL error + bitmap result)
2026-07-25 17:43:22 +03:00
Evgeny
5983acd988
merkle_sync: fix _get_level_hashes — range query instead of exact mismatch (prefix encoding bug)
2026-07-25 17:37:12 +03:00
Evgeny
7a9e3bea5f
db_sync: mc>pc guard with last_peer_count — detect stalled sync when pc doesn't change
2026-07-25 16:56:30 +03:00
Evgeny
3490789249
db_sync: skip SYNC_DONE in count>0 handler when received==0 — breaks bad_sig recv→send loop on client side
2026-07-25 16:49:46 +03:00
Evgeny
c9436219a0
db_sync: fix synced_pos overwrite in SYNC_DONE — use max to preserve total_processed advance
2026-07-25 16:28:09 +03:00
Evgeny
34404403ef
db_sync: verify sig before send + fix total_processed double-count
2026-07-25 16:10:20 +03:00
Evgeny
e9fce43be5
db_sync: fix bad_sig infinite loop — delete+rechain, advance synced_pos past dup/bad_sig, accept on covered tail
2026-07-25 15:58:18 +03:00
Evgeny
27906e9f91
db_sync: односторонний sync, sparse-таблица, vp в SEND_DATA, PUSH-релей
2026-07-25 15:00:21 +03:00
Evgeny
fe18c454e2
chatgui: add diagnostic logging for Windows emoji animation bug investigation
2026-07-24 22:11:03 +03:00
Evgeny
e071a9e2f8
db_sync: fix test sync protocol isolation (add auto_sync flag, destroy order, test refactor)
...
- utun_instance: fix destroy order (topo_groups before conn_mgr to avoid UAF in topo_recovery)
- topo_recovery: add NULL guard for instance/ua in try_next
- db_sync_instance_add: add auto_sync flag (1=send INIT_SYNC, 0=quiet)
replaces separate _quiet variant, cleaner API
- db_sync_peer_set_state, db_sync_reinitiate: test-only peer control utilities
- test_db_sync: full rewrite — stable, isolated sync protocol testing
all 3 branches (peer_empty, hash_MATCH, divergence) tested without PUSH contamination
Phase 6 extended: triple merge + tail PUSH + mid PUSH cascade on star topology
runs in 1.4s, consistently passes 10/10
- db_sync_doc: updated protocol architecture description
- chatgui: update db_sync_instance_add call with auto_sync=1
2026-07-24 21:27:23 +03:00
Evgeny
ad56767646
db_sync: notify all peers when cascade_from changes chain (lock-free sync)
...
После cascade_from в db_handle_send_data оповещаем ВСЕХ пиров
с synced_pos >= fix_from о том что цепочка изменилась — откатываем
их synced_pos. Это устраняет неэффективность конкурентных sync:
раньше только пир-отправитель обновлялся, остальные видели устаревшие
хеши и обнаруживали ложное расхождение на следующем цикле.
2026-07-24 17:26:09 +03:00
Evgeny
c46cb9a979
db_sync: fix si_send_data_batch column bug (author→node_id), add cascade_from to PUSH, add divergence+cascade test phases
...
- si_send_data_batch: неправильный SQL SELECT с несуществующей колонкой author
вместо node_id → ломал всю передачу данных в REFINE/SEND_DATA
- Добавлена проверка si_prep и возврат int с кодом ошибки
- Все вызовы si_send_data_batch проверяют возврат, при ошибке сброс sync_state
- db_handle_push: добавлен db_cascade_from после вставки (раньше chain_hash
не пересчитывался после PUSH)
- db_handle_refine: DEBUG_WARN при scnt==0 (fm за пределами диапазона)
- Добавлена публичная db_sync_chain_verify() для верификации цепочек
- test_db_sync: фаза 4 (divergence через разныe hashes + REFINE/SEND_DATA),
фаза 5 (PUSH без хвоста + cascade verification)
- Убран мёртвый код db_sync_on_new_conn
- chatgui: адаптивная раскраска пузырей исходящих сообщений
2026-07-24 16:55:08 +03:00
Evgeny
df8d910efa
chatgui: fix Ctrl-C on Linux — remove thread_local from g_currentNode
...
SIGINT on Linux can be delivered to any thread (not just worker).
signal_handler uses g_currentNode->requestStop(); with thread_local,
g_currentNode was nullptr in non-worker threads — Ctrl-C did nothing.
Removing thread_local fixes signal delivery: g_currentNode is set once
before signal handler is registered, pointer read is atomic on x86/x64.
2026-07-24 16:02:49 +03:00
Evgeny
e8920fe00e
chatgui: MsgIsOutgoingRole support for outgoing message alignment
2026-07-24 15:55:34 +03:00
Evgeny
fbc1bff1e1
chatgui: proper animation shutdown + TerminateProcess for rlottie threads
...
- AnimTimer::shutdown(): stop QTimer, clear m_icons before icon destruction
- ~MainWindow: AnimTimer::shutdown() -> cleanupAnimations() (correct order)
- main: replace ExitProcess with TerminateProcess(GetCurrentProcess,0)
TerminateProcess skips DLL_PROCESS_DETACH, avoiding libwinpthread
pthread_join hang on rlottie/miniaudio threads.
rlottie C API has no global shutdown - internal RleTaskScheduler threads
cannot be stopped through public API. Same for miniaudio WASAPI threads.
All owned resources already freed before TerminateProcess.
2026-07-24 15:49:58 +03:00
Evgeny
73be79d204
chatgui: fix rlottie thread hang on Windows shutdown
...
Root cause: librlottie RleTaskScheduler creates 32 worker threads on first
lottie_animation_from_data call. These pthreads wait in WaitForMultipleObjects(INFINITE)
and never exit. On MinGW, exit()/pthread_join blocks forever.
Changes:
- messagelist: s_icons moved to file-static; cleanupAnimations() clears them,
calling lottie_animation_destroy BEFORE static destruction
- mainwindow: ~MainWindow calls MessageList::cleanupAnimations() after node stop
- main: ShutdownSentinel counts threads at exit; if >4 remaining, calls
ExitProcess(0) to bypass CRT pthread_join hang
- main: if rlottie properly shuts down (<=4 threads), normal return (no ExitProcess)
2026-07-24 14:54:12 +03:00
Evgeny
74c6b0d102
chatgui: add shutdown diagnostics — ~DbManager, ~SoundManager, g_shutdown_sentinel
...
Three diagnostic points covering the gap between ~MainWindow done and CRT exit:
- DbManager: destroyed — confirms local dtors started after ~MainWindow
- SoundManager: static destructor entered — confirms static destruction phase
- main: static destructors done (g_shutdown_sentinel dtor) — confirms ALL statics done
If process hangs, we know exactly which phase failed.
2026-07-24 14:34:00 +03:00
Evgeny
0d558245ce
chatgui: move SoundManager shutdown to ~MainWindow before node cleanup
...
- SoundManager::shutdown() called explicitly in ~MainWindow (not static destruction)
- Before ma_engine_uninit: DEBUG_INFO diagnostic in timestamped log
- After ma_engine_uninit: DEBUG_INFO diagnostic
- Double-call safe: static destructor hits m_initialized=false, returns immediately
2026-07-24 14:22:28 +03:00
Evgeny
fbaf58530f
chatgui: rework shutdown — main thread owns cleanup, remove glШбаls
...
Changes:
- UtunNode::requestStop() — async stop from any thread (m_stop+wakeup)
- UtunNode::finalize() — cleanup in main thread (etcp_router, chat_sync, chat_core, utun_instance, uasync)
- UtunNode::stop() — requestStop + join + finalize (for tray Quit path)
- Worker runLoop: only exits poll loop on m_stop, then emits stopped — no cleanup
- stopped() handler: calls finalize() in main thread, then qApp->quit()
- Tray Quit: calls requestStop(), stopped handler does finalize+quit
- Ctrl-C (Windows): SetConsoleCtrlHandler calls requestStop() via g_ctrl_node
- Ctrl-C (Linux): signal_handler calls requestStop() via g_currentNode
- Removed: g_shutdown, g_signal_ua, utun_node_signal_shutdown globals
2026-07-24 14:14:27 +03:00
Evgeny
4c623e25ce
chatgui: add shutdown diagnostics (poll exit reason, cleanup steps, app.exec return)
2026-07-24 13:56:29 +03:00
Evgeny
faddbef32a
chatgui: add SetConsoleCtrlHandler for reliable Ctrl-C on Windows
2026-07-24 13:51:23 +03:00
Evgeny
a7ec45c4af
db_sync: replace all sync logs with unified narrative format sync [TBL:NODE]
...
- Unified format: 'sync [SHORT_TBL:PEER_HI] <-/-> action: key_data'
- Each log line explains what the algorithm is doing and why
- Added batch progress tracking in dump-all and tail SEND_DATA loops
- Track dropped records (duplicates, bad_sigs, parse_fails) in SEND_DATA recv
- Show synced_pos transitions (old->new) in SEND_DATA and SYNC_DONE
- Show all launched syncs in PEER CHECK log
- Convert all silent returns to ERROR logs with [TBL:NODE] context
- Convert old WARN/ERROR formats to new sync [TBL:NODE] format
- Add sync_state reset details on ERROR and timeout paths
2026-07-24 13:23:17 +03:00
Evgeny
ce9e58a925
chatgui: add scroll-to-bottom floating button, incremental message refresh via getMessagesSince
2026-07-24 04:07:51 +03:00
Evgeny
b6d44bd947
chatgui: don't save scroll position when at bottom — restore to bottom on reopen
...
When scrollbar is at max, save lastPosMsgId=0 so restoreScrollPosition
falls through to scrollToBottom() instead of restoring a stale mid-scroll pos.
2026-07-24 03:52:05 +03:00
Evgeny
6cafff200b
chatgui: add SIGINT/SIGTERM handler (as in utun.c), save scroll pos on every debounce
...
Signal handler via g_shutdown + uasync_wakeup ensures clean uasync poll exit.
updateReadPosition() now saves both lastReadMsgId and lastPosMsgId on every
scroll stop (300ms debounce), not just when read position changes.
connect(stopped, quit) triggers graceful Qt shutdown after uasync cleanup.
2026-07-24 03:47:15 +03:00
Evgeny
83ca0c65a4
chatgui: fix corrupted channel_id from non-null-terminated binary protocol
...
QString::fromUtf8(ch_id) read past length-prefixed string, capturing garbage.
Use fromUtf8(ch_id, ch_id_len) — length already available from bridge but was unused.
Messages now appear on refresh and unread badge correctly matches channel.
2026-07-24 03:33:14 +03:00
Evgeny
fdc30d1a4e
chatgui: synchronous DB write in saveChannelState/updateReadPosition, add shutdown debug logs
...
Replace gui_bridge_post_uasync_fn (async queue lost on shutdown) with direct
chat_core_save_ui_state (sync SQLite write). SQLite WAL handles concurrent access.
Add DEBUG_DEBUG traces in closeEvent, ~MainWindow, aboutToQuit.
2026-07-24 03:29:37 +03:00
Evgeny
393b7d36c8
chatgui: save scroll/read position on app quit via aboutToQuit
...
Make saveChannelState() public, connect to QApplication::aboutToQuit so
state is persisted on SIGINT, tray quit, or any other shutdown.
2026-07-24 03:24:54 +03:00
Evgeny
6ef21613c8
chatgui: pass author node_id in MSG_RECEIVED event, skip sound for own messages
...
Add author_node_id:8 to GUI_EVT_MSG_RECEIVED data format.
Callback now includes uint64_t author parameter.
SoundManager::play('msg_incoming') only when author != myNodeId.
2026-07-24 03:22:10 +03:00
Evgeny
37c5fa5607
chatgui: fix scroll jump on refresh, force debounce, add DEBUG logs
...
- Same-channel refresh: save scroll pos in memory, restore from memory (no DB race)
- Force m_readDebounce->start() after loadChannel (scrollToBottom may not trigger valueChanged)
- DEBUG_DEBUG logs in updateReadPosition, saveChannelState, onMessageReceived, setChannelUnreadCount
2026-07-24 02:59:15 +03:00
Evgeny
0c4862c66a
chatgui: track read position via debounced scroll, only fully visible msgs are read
...
- Debounce timer (300ms) advances lastReadMsgId only when message is fully in viewport
- Unread badge no longer resets on channel select — only when actual scroll reads msgs
- saveChannelState() uses tracked m_lastReadMsgId instead of viewport bottom
- getChannels() reads lastReadMsgId from ui_state (was reading unused channels column)
2026-07-24 00:30:44 +03:00
Evgeny
216e516192
build: use explicit file list for liblmdb in CMake instead of GLOB
...
file(GLOB) + regex FILTER didn't work reliably on Windows. Replace with
explicit listing of mdb.c + midl.c (same as autotools).
2026-07-24 00:13:25 +03:00
Evgeny
726a4b8303
Revert unnecessary #ifndef _WIN32 guards in mplay.c — CMakeLists.txt filter handles exclusion
2026-07-24 00:03:03 +03:00
Evgeny
e5dd41e5b2
build: exclude LMDB utilities from Windows CMake build, guard POSIX includes in mplay.c
...
file(GLOB) in libutun/CMakeLists.txt picked up mplay.c, mdb_dump.c and other
standalone LMDB tools that are not library code and fail on Windows. Filter them
out, keep only mdb.c + midl.c.
2026-07-23 23:58:39 +03:00
Evgeny
86d227bffe
chatgui: remember last read message, restore scroll position, show unread count badge
...
Store read/scroll positions per channel via ui_state table (key-value).
Draw red +N badge on channel list items for unread messages.
Fix getMessages() to fetch last N messages (was fetching first N).
2026-07-23 23:47:35 +03:00
Evgeny
de14f82048
chatgui: replace manual source lists with file(GLOB) in libutun/CMakeLists.txt
...
libutun/CMakeLists.txt: 151→84 lines (-67)
UASYNC_SOURCES: file(GLOB /*.c /liblmdb/*.c)
UTUN_COMMON_SOURCES: file(GLOB_RECURSE /*.c) excluding
lwip_orig/, uip/, transport_layer/BBR/, utun.c
New .c files in src/ or lib/ are now automatically included.
2026-07-23 22:46:48 +03:00
Evgeny
cf6108b1f1
chatgui: unify logging — debug_ui.h delegates to debug_config.h
...
debug_ui.h (50→10 lines): GUI_ERROR/WARN/INFO/DEBUG now delegate to
DEBUG_ERROR/WARN/INFO/DEBUG(DEBUG_CATEGORY_DEBUG, ...) from debug_config.h
Eliminates dual logging output, dual log file configuration.
Removed guiDebugFile() — debug_enable_file_output() already handles it.
Removed debug_ui.h include from utun_node.cpp (unused).
2026-07-23 22:45:26 +03:00
Evgeny
4aede4c6bd
chatgui: extract MainWindow constructor into sub-methods
...
MainWindow (~15 lines): setupUi+setupTray+setupSoundFromConfig+
setupBridgeCallbacks+setupMessaging+setupNode+setupConnects
setupSoundFromConfig(): sound config parsing + loading
setupBridgeCallbacks(): 7 gui_bridge callback registrations
setupConnects(): 5 Qt signal connections
2026-07-23 22:44:32 +03:00
Evgeny
6c59ed43b2
chatgui: move crypto from MainWindow to transport layer
...
chat_channel.c: new chat_core_create_channel_auto(name) — generates
X25519/Ed25519 keys, random channel_id, Ed25519 signature, creates channel.
chat_core_create_channel_auto_trampoline for gui_bridge_post_uasync_fn.
mainwindow.cpp: onCreateGroupRequested() reduced from 100 to 15 lines.
Removed openssl/evp.h and openssl/rand.h includes from UI code.
2026-07-23 22:43:13 +03:00
Evgeny
3f662d85ba
chat_core: split 912-line module into 5 files + delete dead chat_conn_mgr
...
chat_core.c (236 lines): init/destroy, getters, g_cc, helpers, si-registry
chat_msg.c (223 lines): submit_message, count, chain_hash, list_*, load_nodeinfo
chat_channel.c (197 lines): ensure_ready, create_channel, connect_channel, sign_join helper
chat_profile.c (189 lines): update_my_name, sync_my_addresses, save_ui_state
chat_status.c (118 lines): collect_status (NTP + ETCP connections)
chat_core_priv.h: shared g_cc extern + helpers
chat_conn_mgr.c/h: dead code (never compiled, never called)
CMakeLists.txt: add 4 new .c files to build
2026-07-23 22:41:28 +03:00
Evgeny
3448b0a482
channellist: fix dual blue selection — block signals + explicit select
...
- selectionCommand: remove Current flag to avoid redundant
currentChanged emission during mouse press
- loadChannels: wrap clear+repopulate in blockSignals(true/false)
to prevent selectionChanged and currentChanged from firing
on intermediate model states
- selectChannel: use explicit selectionModel()->select() with
ClearAndSelect + setCurrentIndex with NoUpdate
- simplified selection restore: only track selectedCid by ID,
removed fallback-to-row logic
2026-07-23 21:31:00 +03:00
Evgeny
4ec930c8f0
chatgui: fix dual selection highlight and missing online count
...
- channellist.cpp: selectionChanged guard now checks currentIndex().row()
is within model->rowCount() to avoid re-selecting stale index after
model clear, which caused both channels to stay blue when switching.
- chat_sync.c: cs_refresh_channels now posts CHANNEL_PEERS_ONLINE
for all channels after loading, fixing online count showing only
on the last connected group.
2026-07-23 21:25:39 +03:00
Evgeny
cbd9536a28
chatgui: fix invite link and Russian channel name encoding
...
- chat_sync.c: after invite trampoline, check if connection to invite
node is already UP and trigger cs_on_conn_up to send CHANNEL_INFO_REQ.
Fixes invite not completing when connection is reused (Fix 1 side effect).
- mainwindow.cpp: use name.toUtf8().constData() instead of qPrintable()
to preserve UTF-8 encoding on Windows (Russian channel names).
2026-07-23 21:07:41 +03:00
Evgeny
23db012064
conn_mgr: fix duplicate connection and double-release bugs
...
- conn_mgr_connect_node: check instance->connections globally to reuse
existing ETCP_CONN across groups instead of creating a new one (DUP addr)
- cm_start_phase_direct: close dead connection when etcp_link_new fails
to prevent shadowing live connection in instance->connections hash
- cm_cleanup_db_node: remove redundant topo_node_registry_release
(already done inside topo_node_free_lists)
2026-07-23 20:36:55 +03:00
Evgeny
58ad643516
Add debug logs to Ed25519 self-sig flow: computation, verification, skip due to no key
2026-07-23 20:00:11 +03:00
Evgeny
85269d1da3
Ed25519 self-signature in NODEINFO + fix sync sequence and zero-key bug
...
Add x25519_self_sig[64] to TOPOMSG_NODE/TOPO_NODE:
- topo_node.h: add field to both structs (wire format + memory)
- topo_node.c: compute Ed25519_sign(ed25519_privkey, x25519_pubkey) for own node
- topo_node.c: serialize/deserialize x25519_self_sig
- topo_group.c: verify Ed25519 self-sig on NODEINFO receive, reject forgery
Fix Ed25519 pubkey zero-key bug:
- topo_node_sqlite.c: get_ed25519_pubkey rejects all-zero key (MUST be non-zero)
Delay db_sync until Ed25519 key is available:
- db_sync.c: db_sync_on_conn_up checks db_get_ed25519_pubkey before starting
- db_sync.c: db_sync_peer_check_cb also checks Ed25519 key availability
- This prevents sync starting before NODEINFO with verified Ed25519 arrives
2026-07-23 19:55:15 +03:00
Evgeny
3890d2038d
db_sync: add missing ERROR/WARN logs to all error branches
...
- db_record_insert: error logs for si_prep failures (SELECT, INSERT, cascade SELECT/UPDATE)
- si_parse_record: WARN logs for truncated header, data/sig overrun
- db_chain_hash_at: ERROR logs for missing row, corrupted blob
- db_prev_chain_hash: ERROR log for si_prep failure
- db_cascade_from: ERROR logs for si_prep failures
2026-07-23 18:16:53 +03:00
Evgeny
acd4a189ae
db_sync: add author_sig VERIFY FAIL diagnostics + SYNC_DONE retry limit
...
- db_verify_author_sig: show ed_pubkey and sig first bytes on failure
- SI_PEER: add sync_retry_count field
- db_handle_sync_done: limit re-initiate to 3 retries before giving up
- db_sync_initiate_sync / db_sync_on_conn_up: reset retry_count
2026-07-23 18:13:14 +03:00
Evgeny
b48d3b4a77
db_sync: add diagnostic logs for message sync debugging during join
...
- db_handle_init_sync: TRACE→INFO with peer_cnt/my_cnt/tp_offset
- db_handle_send_data: detailed batch info (range, remaining count)
- db_sync_initiate_sync: add table name to log
- db_sync_on_conn_up: add first table name to summary log
2026-07-23 16:47:22 +03:00
Evgeny
3e95cf5ca6
fix: dialog hangs on join success + remove per-packet spam logs
...
- chat_sync.c: move pending_invite clear from INFO_RESP to WELCOME,
post GUI_EVT_CONNECT_RESULT on invite success in cs_handle_welcome
- etcp_connections.c: NORM_DECRYPT_TRY/CRYPTO_DECRYPT_OK DEBUG_DEBUG->TRACE
- secure_channel.c: ENCRYPT/DECRYPT DEBUG_DEBUG->TRACE
2026-07-23 16:36:40 +03:00
Evgeny
4f831703f0
fix: etcp_conn_set_peer_node_id переиндексация при state=0 + conn_mgr ставит peer_id сразу
2026-07-23 16:19:03 +03:00
Evgeny
511a2dcd06
fix: авто-подключение Phase 2/3 — запрос всех нод из node_addresses, без привязки к peers_<ch>
2026-07-23 14:41:22 +03:00
Evgeny
196c2896d3
debug: sochet count after instance_init (категория debug, видно при текущем конфиге)
2026-07-23 14:17:58 +03:00
Evgeny
01a0a568a6
debug: crypto_ctx session_key логгирование — CRYPTO_CONN_READY, CRYPTO_ON_UP, CRYPTO_DECRYPT_OK, DECRYPT_FAIL+seskey
2026-07-23 14:04:44 +03:00
Evgeny
3e0a4e0eb1
fix: замена malloc на u_strdup в channelSelected — u_free падал на чужой памяти
2026-07-23 13:12:04 +03:00
Evgeny
0e324cf36d
chat_core: connect_channel API — запуск topo_group_connect_init при выборе канала из GUI, убрано дублирование создания групп в utun_node
2026-07-23 12:51:45 +03:00
Evgeny
be258eea4d
fix: remove stale peers_* CREATE TABLE from chat_core, drop ORDER BY node_RTT
...
chat_core_ensure_channel_ready() had a duplicate CREATE TABLE peers_*
with OLD schema (no node_RTT, node_type, connected). Since it was called
from 4 places WITHOUT topo_node_sqlite_channel_put() first, the old
schema was created first, and IF NOT EXISTS in the new DDL was a no-op.
Removed the entire old block. Only topo_node_sqlite_channel_put() now
creates peers_* tables with the full schema.
Also removed ORDER BY p.node_RTT from get_public_peers/get_local_peers —
ordering not needed for sequential connect attempts.
2026-07-23 00:24:16 +03:00
Evgeny
8facce46ac
feat: auto-connect Phase 3 (local/netif addresses) + restart fix
...
Phase 1: connected peers (connected=1)
Phase 2: direct/EIM (addr_type=1,2), exclude self
Phase 3: local/strict NAT (addr_type=0,3), exclude self
Timeout: 5000→2000ms per attempt
Restart: DOWN triggers reconnect when phase=DONE & active=0
Debug logs: init, Phase1 per-peer, UP phase info, restart branches
2026-07-22 23:55:44 +03:00
Evgeny
7dee05c628
fix: node_registry crash — TOPO_NODE_REG_ENTRY node/lldata overlap
...
struct TOPO_NODE_REG_ENTRY имел node и ll.data[0] (гибкий массив) на одном смещении.
memcpy(re->ll.data, &node_id, 8) затирало re->node значением node_id,
из-за чего node_registry_find возвращал не указатель а битый node_id → SIGSEGV.
Убрал struct TOPO_NODE_REG_ENTRY, перешёл на явные смещения:
data[0..7]=ключ, data[8..15]=указатель, queue_entry_new(16).
2026-07-22 23:05:04 +03:00
Evgeny
6edd40d141
topo_group_connect: авто-подключение CHAT-групп + conn_mgr_connect_from_invite + замена chat_conn_mgr в chatgui
...
Добавлено:
- conn_mgr_connect_from_invite() — подключение к новому узлу по invite-данным
(INIT → INVITE_INFO_REQ/RESP → проверка членства в группе → сохранение в БД)
- topo_group_connect.c — авто-подключение при старте CHAT-группы:
Phase 1: одновременный connect всех connected=1 пиров, таймаут, отмена незавершённых
Phase 2: последовательный перебор публичных адресов до первого успеха
- Счётчик active_conn_count с проверкой nodeinfo-путей (UP/DOWN)
- restart() при phase=DONE и count==0
БД:
- connected INTEGER NOT NULL DEFAULT 0 в peers_<ch> + ALTER TABLE для существующих
- topo_node_sqlite_set_connected / get_connected_peers / get_public_peers
Chatgui:
- Включён topo_group (убран utun_instance_set_topo_group_enabled(0))
- Создание TOPO_GROUP_TYPE_CHAT при channel_ready и при старте
- Invite connect через conn_mgr_connect_from_invite
- Удалён chat_conn_mgr (из сборки) + весь старый auto-connect код
2026-07-22 22:48:12 +03:00
Evgeny
4215349349
topo_recovery: каскадное восстановление узлов с группировкой по next_hop
...
При разрыве ETCP-соединения модуль собирает каскадно отвалившиеся узлы:
- add_node из hop_list вычисляет next_hop относительно failed_peer,
группирует узлы в отдельные recovery-контексты (direct/indirect списки)
- start запускает асинхронный перебор для каждой группы параллельно
- is_next_hop-узел пробуется первым с приоритетом по мин. RTT
- таймаут 2с на попытку, conn_mgr_cancel_callback при отмене
- отмена: topo_group_new_conn (on_up) находит узел в любом ctx -> ctx целиком
- завершение: оба списка пусты -> освобождение ctx
2026-07-22 19:01:55 +03:00
Evgeny
f6b37a857b
conn_mgr: bind to topo_group, DB node loading, configurable DIRECT timeout, tests
...
- conn_mgr_init(TOPO_GROUP* group) — работает внутри заданной группы
- conn_mgr_connect_node: загрузка узла из SQLite если нет в BGP-таблице
- topo_node_sqlite_node_load(): загрузка TOPO_NODE (ref=0) из БД
- cm_start_phase_direct: db_loaded-ветка — перебор всех адресов без NAT-фильтра
- cm_cleanup_db_node: удаление TOPO_NODEQ из группы при неудаче, только если нет путей
- cm_start_phase_indirect: исправлено зависание при best_candidates==0 (cm_deliver_result)
- conn_mgr_set_direct_timeout_ms(): конфигурируемый таймаут фазы DIRECT
- conn_mgr_destroy до etcp_router_destroy (исправлен порядок)
- test_conn_mgr: +2 сценария (DB-успех, DB-недоступен), проверка topo_group
2026-07-22 17:33:58 +03:00
Evgeny
852ce401e7
Добавлен group_id в etcp_router и topo_group, удалён msg_transport
...
- etcp_router: SVC_ROUTE_HDR (+8B), ETCP_ROUTER_CONN/TRANSIT_QUEUE хеши расширены под group_id
- Все caller'ы (proxy, routing, conn_mgr, nat, chatgui, tests) обновлены
- topo_group: глобальный реестр TOPO_NODE по node_id, ref_count=0 при создании
- BGP-обмен активируется для всех групп (а не только дефолтной)
- Протокол: group_id добавлен в WITHDRAW/TABLE_REQ/TABLE_COMPLETE/ERR_GROUP_MISMATCH
- Per-connection коллбэки заменены на instance-level conn_status
- msg_transport полностью удалён из проекта
57/57 тестов
2026-07-22 15:51:03 +03:00
Evgeny
5265783164
fix: self node online=0 after chat_core_init refactor — add topo_node_sqlite_node_set_online(self, 1)
2026-07-22 13:54:36 +03:00
Evgeny
e2d9879636
refactor: remove direct nodes table writes from chat_core/conn_mgr, use topo_node_sqlite API
...
- chat_core_init: replace INSERT INTO nodes with topo_node_sqlite_node_update_verified, remove redundant topo_node_sqlite_init call
- chat_core_update_my_name: replace UPDATE nodes with topo_node_sqlite_node_update_verified
- chat_conn_mgr_connect_from_invite: simplify invite node insert (x25519 only, no ed25519)
- topo_node_sqlite: add detailed column comments to peers table DDL (both server and chatgui)
- chat_core: add detailed column comments to peers table CREATE TABLE
2026-07-22 13:38:17 +03:00
Evgeny
7aa4a34f35
fix chatgui: members showing offline after JOIN — always refresh channel cache before posting online count
2026-07-22 12:19:59 +03:00
Evgeny
a7346c25e3
fix chatgui: members not showing (schema mismatch) and username showing JSON instead of name
...
- topo_node_sqlite_member_put: remove joined_at column from INSERT (not in server schema, duplicates join_ts)
- chat_core: rename peers table column name→userinfo to match server schema + add ALTER TABLE migration
- chat_sync: remove 3 redundant INSERT INTO nodes that wrote raw JSON userinfo into nodes.name, overwriting correct plain name from topo_node_sqlite_node_update_verified
2026-07-22 12:03:57 +03:00
Evgeny
df809f251c
ntp: use NTP-corrected time everywhere instead of unixepoch()/gettimeofday
...
- db_sync_next_timestamp(): ntp_time_get_us() via si->db_sync->inst
- topo_node_sqlite_node_put: +time_t now_sec param, replace unixepoch()
- topo_node_sqlite_node_update_verified: +time_t created_at param
- topo_node_sqlite_member_put: joined_at = join_ts (already NTP-corrected)
- All INSERTs (nodes, local_identity, accounts, peers):
replace DEFAULT(unixepoch()) with explicit ntp_time_get_seconds()
- ON CONFLICT DO UPDATE: created_at = COALESCE(nodes.created_at, excluded.created_at)
- Updated callers: topo_group.c, chat_sync.c, chat_conn_mgr.c, chat_core.c
2026-07-22 11:39:10 +03:00
Evgeny
fab1c77cfb
chatgui: remove unused addServer/addClient/removeServer/removeClient
2026-07-22 10:22:37 +03:00
Evgeny
6574c58257
chatgui: unify config update logic, fix node_id derivation, fix test
...
- config_updater.{h,cpp}: single implementation — config_update_in_lines
for batch updates + config_update_option for file-level. REPLACE/APPEND
modes, section auto-creation
- node_config.cpp: generateIdentity() now derives node_id via
SHA256(pubkey) (like sc_derive_node_id_from_pubkey) instead of random.
save() uses config_update_in_lines for line-level update when file
exists, saveFull() only for new file and addServer/addClient.
Removed duplicate findSectionBounds/updateOptionInSection/configUpdateOption
- test_config_updater.cpp: Q_ASSERT replaced with VERIFY macro — Q_ASSERT
in Release mode does not evaluate the expression, causing false positives.
Test now works in both Debug and Release
2026-07-22 10:13:40 +03:00
Evgeny
ab252a0984
chatgui: include platform_compat.h for htole64 on Windows
2026-07-22 09:23:35 +03:00
Evgeny
b1cbd5acf9
topo_node_sqlite: dynamic idx_sql allocation instead of fixed 128-byte buffer
2026-07-22 09:18:54 +03:00
Evgeny
2785845acf
platform_compat: use #include <process.h> instead of getpid macro
2026-07-22 09:13:36 +03:00
Evgeny
b1bf27d023
fix Windows warnings: getpid, htole64, gettimeofday, socket_t mismatches, radix min
2026-07-22 09:08:19 +03:00
Evgeny
b9a31b9fba
proxy: fix Windows warnings - getsockopt cast, uasync_add_socket_t
2026-07-22 08:55:48 +03:00
Evgeny
17202beb0a
test_ntp: use compat headers instead of arpa/inet.h, add rule to AGENTS.md
2026-07-22 08:47:56 +03:00
Evgeny
090acc1f00
etc/rtt: UPSERT node_update_verified; gui: account delegate (rtt+nat subline), context menu member props (admin/supernode), cleanOrphanedPeers, refreshRtt timer 2s
2026-07-22 01:15:33 +03:00
Evgeny
c367144776
etcp: rtt_last→ping_update_rtt раз в минуту; route_ping: ping_update_rtt на PING_RESP
2026-07-21 22:29:19 +03:00
Evgeny
ad42f66df5
feat: PING/PONG RTT exchange + burst sender + TCP server; fix INIT peer_id offset
...
- etcp_connections: add flags byte to PING/PONG wire format (WANT_RTT/SEND_RTT)
- etcp_connections: add etcp_link_burst_start/check for BDP measurement
- etcp_connections: add tcp_server_on_link for STCP→ETCP bridge
- topo_node: add ping_request_cbk/ping_update_rtt for live RTT tracking
- topo_node: add last_ping_time field in connectivity
- topo_node_sqlite: extend DB schema for RTT data
- fix: INIT path read peer_id from offset 1 (not 2), PING offset stays 2
2026-07-21 20:50:14 +03:00
Evgeny
542694a0e9
fix: restore original source content after refactoring (accidental code changes removed)
2026-07-21 20:35:02 +03:00
Evgeny
fcf3fb7f51
refactor: move transport (etcp/stcp/normalizer) to transport_layer/, routing (bgp/pings/topo*) to routing_layer/
2026-07-21 20:25:41 +03:00
Evgeny
3dda701c67
schema: rm is_dm, rename name→userinfo (json_flat), fix join_msg format
...
- Remove is_dm column from channels table (dm detection by member count)
- Rename member name column to userinfo — extensible json_flat format
- Add json_flat.c/h library for compact JSON serialization
- Fix join_sig message format: use ch_x25519+ch_ed25519 instead of channel_id string
- Remove name from join_msg body (now in userinfo via json_flat)
- Update chat_core, chat_sync, member_sync, db_manager to new format
- Add topo_strategy.txt — архитектурные заметки по топологии
2026-07-21 00:11:50 +03:00
Evgeny
88d51349ea
statuspage: компактный блок часов, offset в секундах
...
- Шрифт часов 20 (был 22), bold оставлен
- Убраны зазоры: padding 10px→1px, margins 12,8→4,0, spacing 8→2
- Offset в NTP-статусе: микросекунды → секунды (114.8 s)
- Убран зазор (пустая строка) между NTP и Connections
2026-07-20 01:31:49 +03:00
Evgeny
333acb2fe5
ntp_node_time: учёт пол-RTT в корректировке времени
...
offset = t4 - t_sender_us - avg_rtt/2
RTT усредняется по всем линкам соединения (rtt_last в 0.1ms).
2026-07-20 01:19:33 +03:00
Evgeny
f83efda54e
ntp_node_time: исправлен знак offset — корректировка шла в обратную сторону
...
ntp_time_get_us() вычитает offset (local_us - offset_us), поэтому
offset_us должен быть local_raw - peer_time, а не наоборот.
Было peer_time - local_raw → corrected = 2*local - peer (ошибка).
Стало local_raw - peer_time → corrected = peer_time (верно).
2026-07-20 01:07:09 +03:00
Evgeny
fdaaa41010
ntp_node_time: фикс ложных докладов о дрейфе часов
...
check_drift() вызывался с сырой разницей часов между узлами, а не
с изменением offset со временем. При разнице часов между машинами
в 229 секунд это давало спам WARN на каждый TIME_SYNC обмен.
Теперь: первый обмен сохраняет offset без проверки; последующие
сравнивают дельту и warn только при реальном дрейфе (изменении offset).
2026-07-20 00:53:53 +03:00
Evgeny
15ca0675c0
Безопасность: pubkey check при reusing линка + node_changed при конфликте адреса чужого конна
2026-07-20 00:47:38 +03:00
Evgeny
ccd35074d8
Заменил find_link_index на ll_queue с хеш-индексом: универсальный ключ port(2)+addr(16)+family(1)=19 байт, IPv4 дополнен нулями
2026-07-20 00:21:12 +03:00
Evgeny
7a5df3e196
etcp: add node_changed callback chain + chatgui subscription
...
- etcp.h: add node_changed_cbks field to ETCP_CONN
- etcp_api.h/c: add etcp_conn_node_changed() + add/remove_node_changed_cbk
- etcp_connections.c: fire node_changed callbacks on pubkey mismatch
(with DEBUG_WARN(GENERAL) logging source addr, peer_id, old/new pubkey)
- etcp.c: cleanup node_changed_cbks on connection close
- chat_conn_mgr.c: subscribe to node_changed — clear DB addresses,
reset in-memory cache, close connections (deferred for current conn),
post GUI_EVT_NODE_CHANGED
- gui_bridge.h: GUI_EVT_NODE_CHANGED=11
- gui_bridge_impl.cpp: handle GUI_EVT_NODE_CHANGED
2026-07-19 22:09:23 +03:00
Evgeny
1b21ee9d73
chatgui: live NTP-corrected clock (HH:mm:ss) on Status page with per-second sync
2026-07-19 20:38:22 +03:00
Evgeny
a7d842440c
chatgui: split chat_core into chat_conn_mgr — connection manager with rotation, max_parallel slots, background ping, per-connection DOWN callback
...
- chat_conn_mgr.c/h: new connection manager (1 per instance, global in g_cc)
- cm_rotation() — single rotation method: random addr pick, INIT, retry
- 10 parallel slots per node (CM_MAX_PARALLEL), evict worst RTT on excess
- DEAD slot reuse before close — close only when replacement ready
- per-connection DOWN callback via etcp_conn_add_down_cbk
- background ping cycle: random node→random addr RTT measurement
- chat_core.c: added g_cc.conn_mgr field, init/destroy/getter
- chat_sync.c: migrate to new API, add_node() at WELCOME/JOIN/PEER_UPSERT
- Removed old ca_state/ca_ctx/ca_* single-flight code
2026-07-19 19:00:29 +03:00
Evgeny
98bfb9dcd2
chatgui: per-event sound settings with DB persistence
...
- Sound files loaded from filesystem (sound_dir in INI config, absolute or relative)
- Per-event enable/disable + volume stored in DB (ui_state table)
- SoundManager: setEvent(), effective volume = master * per-event
- SoundSettingsPage UI: 4 event rows (checkbox + slider)
- chat_core_save_ui_state() for async DB writes via uasync thread
- DbManager::getUiStateInt() for reading settings from GUI thread
- Default sounds copied to sounds/ dir next to DB, config entries written
2026-07-19 15:17:52 +03:00
Evgeny
1593079da8
chatgui: fix sound_manager use-after-free crash on Windows
...
- Keep mp3Data + ma_decoder alive for sound lifetime (was freed before audio thread)
- Remove MA_SOUND_FLAG_DECODE — stream from decoder instead of pre-decoding
- Shutdown in reverse order: sound → decoder → mp3Data
2026-07-19 14:58:34 +03:00
Evgeny
c2ad2e78c3
chatgui: add sound playback via miniaudio (MP3 notification sounds)
...
- SoundManager singleton wraps ma_engine + ma_sound (non-blocking, background thread)
- MP3 files embedded in QRC, decoded to PCM at startup with MA_SOUND_FLAG_DECODE
- miniaudio.h (MIT) in lib/, IMPLEMENTATION in separate miniaudio_impl.c
- Sound settings page in SettingsDialog: enable/disable, volume slider (0-100%)
- Config keys [gui] sound_enabled, sound_volume
- Incoming messages trigger msg_incoming.mp3 sound
2026-07-19 14:46:21 +03:00
Evgeny
f6f7e12192
refactor: demote high-frequency debug logs (raw_recv/dispatch→TRACE, normalizer→DEBUG), NTP drift→WARN
2026-07-19 13:53:27 +03:00
Evgeny
42041dfe84
feat: log connection status changes at general=info level (NEW/UP/DOWN/DELETE)
2026-07-19 13:41:25 +03:00
Evgeny
beed7a4e07
fix: INIT reset logic — reset only on session change or got_initial_pkt, always sync session_id
2026-07-19 13:18:42 +03:00
Evgeny
58df4d8571
ntp_node_time: переход с etcp_router на raw ETCP (P2P)
...
- Добавлен ETCP_ID_NTP_TIME=0x04 (raw ETCP packet ID)
- Удалён ETCP_RT_ID_NTP_TIME=0x12 (router-сервис)
- ntp_node_time.c: etcp_router_bind/send → etcp_bind/etcp_send
- send_time_sync() принимает ETCP_CONN* вместо dst_node_id
- recv_cb разбирает raw dgram вместо SVC_ROUTE_HDR
- Обновлены doc-файлы
2026-07-19 12:16:37 +03:00
Evgeny
2e7c32c893
fix(db): use INSERT ... ON CONFLICT instead of INSERT OR REPLACE for nodes table
...
INSERT OR REPLACE deletes the old row and inserts a new one,
resetting unspecified columns (online, update_ts) to DEFAULT 0.
This was wiping online=1 set by cs_on_peer_status_changed/member_sync_set_online.
Replaced 5 INSERT OR REPLACE INTO nodes with INSERT INTO ... ON CONFLICT
DO UPDATE SET — only updates the specified columns, preserving online status.
Files:
- chat_core.c:638 (invite flow)
- chat_sync.c:1045 (CHANNEL_INFO_RESP), 1193 (JOIN), 1449 (PEER_UPSERT)
- topo_node_sqlite.c:121 (BGP node_put)
2026-07-19 11:16:26 +03:00
Evgeny
cf46a59d3a
fix(chatgui): replace qDebug with DEBUG_INFO for online trace logs
2026-07-19 11:04:35 +03:00
Evgeny
ac0d1c18ed
debug(chatgui): add online status trace across full chain
...
- cs_is_peer_online: log found/init/links/online
- cs_on_peer_status_changed: log channel_count + found_in_channel
- cs_handle_welcome/cs_handle_channel_join: log before cs_post_channel_online
- MainWindow::onChannelPeersOnline: log cid+online
- ChannelList::setChannelPeersOnline: log search/rows, each row cid+match, SET or NOT FOUND
- ChannelList::loadChannels: log each added row cid+name
2026-07-19 10:58:25 +03:00
Evgeny
9de16be012
fix(chatgui): remove duplicate loadChannels after JoinDialog close, remove 800ms delay
...
- showJoinDialog: don't call loadChannels after dialog close — channel already in model via CHANNEL_UPDATED event, online badge via CHANNEL_PEERS_ONLINE. Duplicate loadChannels was resetting the peer online count.
- onConnectResult: remove 800ms QTimer — dialog closes immediately. Channel data arrives independently through the event pipeline.
2026-07-19 10:50:25 +03:00
Evgeny
3a7b359f87
fix(chat_sync): online status for joiner on inviter side not sent to GUI/peers
...
- cs_handle_channel_join: call cs_post_channel_online immediately after adding joiner
- member_sync_start with _on_invite_sync_done callback: on MT_OK push online=1 via merkle_sync_push_update
- DEBUG per-peer online status in cs_post_channel_online
2026-07-19 09:30:51 +03:00
Evgeny
e3286d409f
chatgui: кнопка + для invite в каналах, автокопирование ссылки, автоподключение из буфера
...
- Замена контекстного меню 'Пригласить' на кнопку + (18x18) справа снизу каждого канала с hover-эффектом
- InviteDialog: авто-копирование ссылки в буфер (Clipboard + Selection) при открытии
- JoinDialog: параметр autoJoinLink — если в буфере валидная utun:// ссылка, диалог сразу стартует подключение
2026-07-19 09:05:55 +03:00
Evgeny
501b636d19
topo_group: disable in chatgui; fix NAT detection for matching addresses
...
- Add utun_instance_set_topo_group_enabled() flag (default=1, chatgui sets 0)
- Move nat_detection create/destroy from topo_group.c to utun_instance.c (unconditional)
- NAT detection: simplify third_node search (any connected node)
- NAT detection: allow NULL topo_groups in receive_cbk and handlers
- NAT detection: handle NAT_INFO without topo_group (update socket directly)
- route_ping: make TOPO_GROUP optional in send_req_addr/handle_req
- topo_node: when NAT verified and address matches interface, set entry type to NAT instead of INTERFACE + socket_id|1
- topo_node: detect nat_type change in changed computation for rebuild
- test_nat_detection: fix socket_id check (|1 for NAT entries)
- chatgui: call utun_instance_set_topo_group_enabled(0)
2026-07-19 08:33:33 +03:00
Evgeny
208a0c8ae8
fix(chat_sync): peer online status not updated in invite flow
...
- cs_on_conn_up: call cs_on_peer_status_changed(peer,1) before return
in invite path (was skipped, leaving inviter at online=0 in DB)
- cs_handle_welcome: remove unconditional set_online(0) — online
status is managed by conn_up/conn_down, not by WELCOME
- cs_handle_welcome: add cs_post_channel_online() after WELCOME
to send PEERS_ONLINE to GUI when channel is fully loaded
- cs_post_channel_online: add DEBUG log for PEERS_ONLINE event
- db_sync peer_check: suppress spam log when no peers connected
2026-07-19 07:54:06 +03:00
Evgeny
ca6a27aadb
BGP: 2 addr per socket (remove TOPO_ADDR_REAL), config IP priority, private IPs in SQLite, NAT addr != INTERFACE
2026-07-19 07:00:04 +03:00
Evgeny
4df7195a58
debug: add ADDR_SYNC logs for BGP node_put DELETE and member_sync recv ac
2026-07-19 00:09:46 +03:00
Evgeny
586d46f1e6
fix: WELCOME wire format — flags+update_sig parsing, peer_needed gap, invalid join_sig skip
2026-07-18 23:53:04 +03:00
Evgeny
39a376e255
fix: BGP и чат больше не затирают адреса друг друга в node_addresses
...
- BGP DELETE: +AND socket_id != 0 — не трогает чат-адреса (invite/JOIN/WELCOME)
- Чат invite DELETE: +AND socket_id=0 — не трогает BGP-адреса
2026-07-18 23:23:14 +03:00
Evgeny
70930b784f
chatgui: fix — локальные адреса не записывались (g_cc.initialized до sync_my_addresses) + таймаут коллбэк 12→20 байт
2026-07-18 22:18:01 +03:00
Evgeny
57f861f360
chatgui: диагностические логи ADDR_SYNC во всех точках записи/удаления адресов в БД
...
- chat_core_sync_my_addresses: DELETE + INSERT с подсчётом строк, CHECK verify
- chat_core_connect_from_invite: DELETE + INSERT с IP:port
- member_sync_put: DELETE + INSERT с IP:port, warn если addrs_data=NULL
- cs_handle_channel_info_resp: адрес инвайтера из ETCP link
- cs_handle_channel_join: адреса джойнера
- cs_handle_peer_upsert: адреса пира
- cs_handle_welcome: адреса из WELCOME
Все логи с префиксом [ADDR_SYNC] в DEBUG_CATEGORY_DEBUG
2026-07-18 21:46:46 +03:00
Evgeny
0b385dca50
chatgui: обновление статуса/адресов узлов через чат-протокол
...
- merkle_sync: synced-флаг в сессии, MSG_ITEM_UPDATE(0x04), push_update() — рассылка лёгких дельт (online-статус) всем synced-соседям
- member_sync: apply_update в ops, node_updated_cb для GUI-нотификации внешних обновлений
- chat_sync: cs_on_peer_status_changed() — единая функция: БД + GUI + push_update + throttled member_sync_start (1/сек)
- cs_on_conn_down: исправлено — теперь сбрасывает nodes.online=0
- flush при destroy
2026-07-18 21:28:59 +03:00
Evgeny
20f5e6c953
sqlite: add cache_size/mmap_size/temp_store PRAGMAs to db_sync and topo_group — 159x insert speedup, fix test_chat_sync_stress timeout
2026-07-18 20:16:24 +03:00
Evgeny
0e0ad9316a
fix race condition: DB_READY lost when utun thread starts before gui_bridge_init
...
- mainwindow.cpp: swap setupMessaging() before setupNode() so g_receiver is created first
- gui_bridge_impl.cpp: add DEBUG_WARN when gui_bridge_post drops event due to NULL g_receiver
2026-07-18 18:08:09 +03:00
Evgeny
29e2527b6b
consolidate 3 SQLite connections into 1 shared handle
...
- utun_node.cpp: open topo_sqlite_db with FULLMUTEX + all PRAGMAs (WAL, FK, NORMAL sync, checkpoint)
- db_sync.c: reuse inst->topo_sqlite_db if available (shared_db flag)
- chat_core.c: reuse inst->topo_sqlite_db if available (shared_db flag)
- db_sync_destroy/chat_core_destroy: skip close on shared handle
- Only topo_groups_destroy closes the shared handle
- Fallback: each module opens own connection if topo_sqlite_db is NULL
2026-07-18 17:33:29 +03:00
Evgeny
853297290f
chatgui: fix NodesPage truncated Node ID + add DB diagnostics
...
- NodesPage: show full 64-bit Node ID (hex16) instead of truncated 4 hex chars
- NodesPage: show diagnostic when DB handle is NULL (was silent return)
- DatabaseSettingsPage: show 'Database not connected' when DB handle is NULL
- DatabaseSettingsPage: add refreshStatus() called on tab select
- SettingsDialog: refresh Database tab on category change
2026-07-18 17:04:50 +03:00
Evgeny
93665c50f0
etcp: remove dead set_*_cbk functions, use add/remove only
2026-07-18 16:52:43 +03:00
Evgeny
ef1922327a
rename ready_cbks → init_cbks (connection init, not fully ready)
...
ready_cbks/etcp_conn_set_ready_cbk/add_ready/remove_ready → init_cbks/..._init_cbk
ca_ready_cb → ca_init_cb
cm_direct_ready_cb → cm_direct_init_cb
cm_reverse_ready_cb → cm_reverse_init_cb
ntp_node_on_conn_ready → ntp_node_on_conn_init
connect_ready_cb → connect_init_cb
init accurately describes when conn->initialized=1, before keepalives establish UP.
Also fire etcp_fire_conn_status INIT at this point instead of create time.
2026-07-18 16:38:24 +03:00
Evgeny
ef3d7c3f37
chat_core: call ensure_channel_ready on invite — create msg/peers tables + register in db_sync
...
Without this, invite creates the channel in SQLite but db_sync never
knows about it, so peer sync fails with 'instance NOT FOUND'.
2026-07-18 16:14:53 +03:00
Evgeny
4188afb3c5
db_sync: lazy-register channel instance on INIT_SYNC when not pre-registered
...
When INIT_SYNC arrives for an unknown hash, scan all msg_* tables in
sqlite_master, compute SHA256 of channel_id, match the hash, and
auto-register via db_sync_instance_add. Fixes invite flow where
channel was created but db_sync wasn't notified.
2026-07-18 16:08:47 +03:00
Evgeny
a510cb0018
auto_connect: add DB dump diagnostics (node_addresses state, node existence, db path+status)
...
- chat_core.c: dump node_addresses total, per-node counts, nodes lookup before addr query
- topo_group.c: log db path, rc, and db pointer after sqlite3_open
2026-07-18 15:47:05 +03:00
Evgeny
3aadaa3396
fix: sqlite3_open wrong path in topo_group.c (db_path vs db_path/chats.db), keep separate connections for perf
...
- topo_group.c: open {db_path}/chats.db instead of {db_path} — was opening a directory
- chat_core.c: remove inst->topo_sqlite_db = g_cc.db — keep topo_sqlite_db as separate
uTun-only connection without FULLMUTEX, avoiding contention with GUI reads
2026-07-18 15:41:02 +03:00
Evgeny
9245a30fa5
auto_connect: diagnostic logging for early FAIL paths in chat_core_connect_auto
...
- chat_core.c: add DEBUG_INFO before each synchronous cb(FAIL) — pinpoints exact failure reason
- chat_sync.c: add log in ac_fill when ca_state=NULL after chat_core_connect_auto call
2026-07-18 15:06:23 +03:00
Evgeny
aa1ed006d5
etcp: instance-level conn status callbacks (NEW/UP/DOWN/DELETE), fix member online in chatgui
...
- Add etcp_add_conn_status_cbk/remove/set — unified callback for all connections
- 4 statuses: NEW, UP, DOWN, DELETE — one subscription covers all connections
- Fire points in etcp.c: create→NEW, on_up→UP, on_down→DOWN, close→DELETE
- chat_sync.c: replace cs_on_new_conn+per-conn subs with cs_on_conn_status
- db_sync.c: same migration to instance-level callback
- cs_is_peer_online: use conn->links_up instead of link->link_status (was 0 during INIT handshake)
2026-07-18 14:51:01 +03:00
Evgeny
ef27633a88
chatgui: clear clipboard before setText for reliable copy on Linux
2026-07-18 13:53:01 +03:00
Evgeny
e71cae16c1
db_sync: unified msg table — one DB, one table per channel
...
- db_sync: rename column author→node_id, open chats.db instead of sync file,
db_sync_instance_add takes table_name directly
- chat_core: remove CREATE TABLE msg_ch_*, remove on_db_sync_insert (74 lines),
remove fallback INSERT in submit_message, add minimal on_msg_inserted
for GUI notification only
- db_manager: update getMessages for new schema (parse JSON from data column),
fix ORDER BY to use author_signature instead of datahash,
update syncCursorNext to parse JSON
- si_register simplified: db_count from same table, no more msg vs sync gap
2026-07-18 13:50:35 +03:00
Evgeny
7c2798ec0e
debug: add diagnostic logging for ETCP recv/INIT/dispatch paths
...
- etcp_connections.c: raw_recv log, INIT conn lookup details, insert_link DUP details
- etcp_api.c: dispatch id/cb logs with DROPPED warning when no handler
- chat_sync.c: etcp_send rc log, fix ac_result_cb to always clear ca_state
2026-07-18 13:04:10 +03:00
Evgeny
a65478edcc
chatgui: fix duplicate connection on invite when node already connected
...
- chat_core_has_conn: search all connections (pending+ready) by peer_node_id
- chat_core_connect_from_invite: skip chat_core_connect_auto if already connected
- ca_timeout_cb: close timed-out connection to free socket link slot
+ cancel remaining timers + ca_cleanup on all-failed
2026-07-18 11:24:51 +03:00
Evgeny
93871c592b
db_sync: timeout for stuck sync_state=1, handle ERROR properly
...
- Add sync_start_tb to SI_PEER, set in db_sync_initiate_sync
- peer_check_cb: after 15s timeout reset sync_state=0 with WARN
- db_handle_error: accept si, reset sync_state=0, DEBUG_ERROR with details
- DB_SYNC_SYNC_TIMEOUT=15 added to db_sync.h
2026-07-18 10:52:54 +03:00
Evgeny
de4099a26b
logging: cleanup connection establishment logs
...
- Fix wrong categories: BGP/DEBUG -> ETCP for connection lifecycle events
- Fix level: WARN -> DEBUG for normal out-of-order pkts before init
- Fix level: INFO -> DEBUG for per-packet TX DATA spam
- Remove duplicate socket init logs (GENERAL duplicates of ETCP)
- Add missing INFO: INIT_RESPONSE received (client), INIT_RESPONSE sent (server)
- Unify all connection establishment messages under ETCP category
- Remove redundant DEBUG address prints in INIT send (info already in INFO msg)
- PING/PONG operations: BGP -> CONNECTION
- DIRECT IP detection: BGP -> NAT
2026-07-18 10:35:31 +03:00
Evgeny
3cd494bead
chatgui: auto-clean build dir on generator change
2026-07-18 03:31:55 +03:00
Evgeny
28c788658a
chatgui: Ninja + parallel build for Windows speedup
2026-07-18 03:30:40 +03:00
Evgeny
8f695cc828
AGENTS.md: add chatgui config and log file paths
2026-07-18 03:22:29 +03:00
Evgeny
3bf5a7b01d
Revert hardcoded default for db_sync in chatgui — enabled via config file instead
2026-07-18 03:21:37 +03:00
Evgeny
2a826b62bc
chatgui: enable db_sync=info debug category by default
2026-07-18 03:20:03 +03:00
Evgeny
4b7c7738de
debug: add DEBUG_CATEGORY_DB_SYNC (26) + TRACE logs for db_sync, merkle_sync, chat_sync, member_sync
2026-07-18 03:19:46 +03:00
Evgeny
9e34e9f838
fix chatgui: self in member list, online status on reconnect, lb spam
...
- cs_handle_welcome(): add self to local peers_<ch_id> so
joiner sees own account in channel member list
- cs_on_conn_up(): post CHANNEL_PEERS_ONLINE after reconnect
so GUI shows connected status (was only posted on conn_down)
- etcp_loadbalancer: DEBUG_WARN -> DEBUG_DEBUG for no suitable
link: tmr:wait — normal shaper behavior, not a warning
2026-07-18 02:55:10 +03:00
Evgeny
3e0b9483b7
fix chatgui: channel persistence & peer list after restart
...
- chat_core_sync_my_addresses(): remove private IP filter (192.168, 10.x, etc.)
so LAN addresses are stored for direct connections
- topo_node_sqlite_channel_peers_all(): include peers without addresses
in WELCOME message (was skipped entirely, causing empty peer list)
- chat_core_create_channel(): pass real local addresses to member_sync_put()
instead of NULL,0
- chat_core_init(): log number of channels loaded from DB on startup
2026-07-18 02:46:53 +03:00
Evgeny
6354318255
fix: replace arpa/inet.h with platform_compat.h in chat_core.c too
2026-07-18 00:51:18 +03:00
Evgeny
93f265c0a9
fix: replace <arpa/inet.h> with platform_compat.h in chatgui (cross-platform ntohs)
2026-07-18 00:48:11 +03:00
Evgeny
c594375023
fix: derive node_id from pubkey instead of privkey
...
sc_derive_node_id() hashed the private key, while invite links
(joindialog.cpp) hashed the public key — giving two different
node_ids for the same keypair.
Removed sc_derive_node_id(), kept only sc_derive_node_id_from_pubkey().
All callers updated to use pubkey-based derivation.
2026-07-18 00:41:38 +03:00
Evgeny
6f4025e420
refactor: move sqlite3 db from topo_group to UTUN_INSTANCE, remove conn_mgr/topo_group deps from chatgui
...
- topo_sqlite_db moved from TOPO_GROUPS to UTUN_INSTANCE (direct access)
- topo_groups_set_sqlite_db() removed
- chatgui: chat_sync_connect_node → chat_core_connect_auto (direct ETCP, no conn_mgr)
- chatgui: chat_core_connect_from_invite saves to SQLite → auto connect (no BGP)
- chatgui: removed _on_node_updated BGP callback from member_sync
- chatgui: removed conn_mgr_get_status from status dump
- chatgui: removed all conn_mgr.h and topo_group.h includes
- chatgui: CONN_MGR_ERR_* constants → CC_* in chat_core.h
- removed unused cc_parallel_* code, conn_state_str/conn_type_str helpers
2026-07-18 00:10:06 +03:00
Evgeny
52587c4f2b
move ETCP_ID_NAT_DETECTION to etcp_api.h alongside other ETCP_IDs
2026-07-17 21:32:48 +03:00
Evgeny
b238089678
refactor(nat_detection): remove BGP dependency, auto trigger on conn_up, clean API
...
- find_third_node: use nd->inst->connections instead of group->senders_list
- on_conn_up callback auto-calls trigger_checks (no BGP handshake needed)
- Remove group param from link_ready, request_check_all — nat_detection self-sufficient
- Remove trigger_checks + route_ping_cancel_for_conn from public API (internal only)
- topo_group.c: removed last nat_detection_trigger_checks call — completely decoupled
- Header: 4-line summary, no duplicate function list, 7 public functions
2026-07-17 21:23:40 +03:00
Evgeny
90363650e3
refactor(nat_detection): self-sufficient module with own ETCP_ID (0x02) and docs
...
- Assign ETCP_ID_NAT_DETECTION = 0x02, etcp_bind in create, etcp_unbind in destroy
- nat_detection_receive_cbk: own packet dispatcher (PING_REQ/RESP, NAT_INFO/CHECK_REQ)
- 4 handle_* become static internal, send_nat_check_req stays static (dead code)
- Rename TOPO_* -> NATDET_*: all subcommands, structs, message types
- Remove all NAT/PING constants and structs from topo_group.h
- Remove dispatch lines and subcmd_name cases from topo_group_receive_cbk
- API: clear sections (lifecycle/internal service/control/test helpers)
- trigger_checks: marked with IMPORTANT note about call order (must be after add_to_senders)
2026-07-17 20:45:49 +03:00
Evgeny
910cac8dce
refactor: separate NAT detection from topology into standalone nat_detection module
...
- Extract NAT detection logic (~250 lines) from topo_group.c into new nat_detection.c
- NAT_DETECTION struct owns ping_pending, next_ping_req_id, allow_nat_check_local (removed from TOPO_GROUP)
- route_ping.* signatures changed: TOPO_GROUP* -> NAT_DETECTION* (+ TOPO_GROUP* where needed)
- topo_group.c now only dispatches BGP subcommands to nat_detection_* handlers
- UTUN_INSTANCE gets struct NAT_DETECTION* nat_det field (init/destroy in topo_groups_init/destroy)
- External callers (etcp_connections, etcp, control_server) call nat_detection_* directly
- nat_detection_cancel_for_conn / nat_detection_send_nat_info / nat_detection_link_ready / nat_detection_request_check_all
- route_ping_destroy_pending properly implemented (was dead code)
- TOPO_SUBCMD_PING_REQ/RESP moved from route_ping.h to topo_group.h (all BGP subcommands in one place)
- Tests updated: test_nat_detection, test_route_ping - both PASSED
- Build: auto(CORE_SOURCES+libutun) and cmake(chatgui/libutun)
2026-07-17 19:49:54 +03:00
Evgeny
8180676120
fix: peers table schema mismatch causing silent member write failures
...
chat_core_ensure_channel_ready() created peers_<ch_id> with 7 columns
while topo_node_sqlite_member_put() INSERT expected 9 (name, creator_sig).
Fixed schema alignment + reordered calls in create_channel() so
topo_node_sqlite_channel_put() (full 11-column schema) runs first.
Added error logging to all 6 member_put/member_sync_put call sites.
2026-07-17 18:16:21 +03:00
Evgeny
0381f4df89
Убраны TCP_TIMESTAMPS и TCP_KEEPALIVE из lwip_tcp_opts.h (не используются, конфликтовали с ws2ipdef.h на Windows)
2026-07-17 17:49:15 +03:00
Evgeny
706ef5b472
etcp_connections.h: data[0] -> data[] (C99 flexible array, fix -Wstringop-overflow)
2026-07-17 17:40:25 +03:00
Evgeny
3884af7eb8
ntp_time.h: replace netinet/in.h with platform_compat.h for Windows build
2026-07-17 17:36:23 +03:00
Evgeny
960cde3eda
chatgui: add Status page in settings (NTP + connections status)
2026-07-17 16:25:55 +03:00
Evgeny
f0bb03c2cf
db_sync: datahash removed, Ed25519 signature mandatory, PK=(timestamp,author_signature), chain_hash includes signature, signed message=ts||json
2026-07-17 15:44:19 +03:00
Evgeny
05b24d36bb
db_sync: fix dh_match premature sync complete — send tail when mc > tp+1
...
Root cause: db_handle_init_resp marked sync_state=2 when my_dh==peer_dh
without checking that all my records fit in the confirmed prefix.
If mc > tp+1 (I have records beyond the common prefix), the tail was
never sent — lost records.
Fix:
- Remove special-case 'sc==0 && my_dh==peer_dh' (redundant, same bug)
- In general dh_match: if mc > tp+1, send remaining records [tp+1,mc-1]
using the same inline loop pattern as 'peer empty' branch
Test: 3 phases covering all dh_match paths:
- Phase 1: B empty+late instance → dh_match at tp=0 (sc=0) → tail-send 49
- Phase 2: A=80 B=50 → dh_match at tp=49 (sc>0, sparse) → tail-send 30
- Phase 3: fresh instances → peer empty → send all 30
2026-07-17 11:48:56 +03:00
Evgeny
2792586de7
db_sync: add INFO diagnostics for message sync flow tracing
...
- db_sync_on_conn_up: per-instance synced/skipped counters
- db_sync_peer_check_cb: summary INFO of check results
- db_sync_instance_add: peers_found + peers_synced counts
- db_handle_init_sync/initiate_sync: enhanced with tbl name
- db_handle_init_resp: tp + my_mc in sync complete/dh match
- db_handle_send_data: range + SYNC_DONE details; stop reason when mc>pk
- db_handle_sync_done: both counts + datahashes in mismatch; dh in confirm
- db_sync_recv_cb: INFO when instance NOT FOUND (timing race)
- cs_handle_channel_info_resp: sync readiness after channel ready
- cs_handle_welcome: note about db_sync peer_check timer
- on_db_sync_insert: counter (#1-3 then every 10) with ch/n/ts/dh/ct
2026-07-17 00:13:27 +03:00
Evgeny
db67767405
fix: demote 6 crypto diagnostic logs from INFO to DEBUG
...
ECDH, ENCRYPT, DECRYPT, INIT_SEND, NORM_DECRYPT_TRY, INIT_DECRYPT_TRY
all moved to DEBUG_DEBUG — visible only with debug=crypto=debug
2026-07-16 23:35:08 +03:00
Evgeny
4fa5b0361f
feat: show decoded invite details (node id, address:port) in JoinDialog
...
Auto-decodes invite link with 400ms debounce, shows 'Node: 0x... | IP:port'
2026-07-16 23:22:32 +03:00
Evgeny
55e3a7af94
fix: getInviteAddresses — use active direct-IP connections instead of DB peer list
...
Priority: iterate instance->connections for links with NAT_TYPE_DIRECT
(connected and reachable). Fallback: own socket addresses.
Removed broken getOnlinePeerAddresses() which returned other nodes' addresses.
2026-07-16 23:20:26 +03:00
Evgeny
2aa559acaf
debug: add full ECDH/session-key diagnostics (6 points)
...
K1: sc_set_peer_public_key — priv, peer_pub, shared_secret, session_key
K2: sc_encrypt — session_key, tx_counter, nonce, plaintext
K3: sc_decrypt — session_key, nonce from packet, ciphertext_len
K4: INIT_SEND — salt, obfuscated_pubkey, peer_pubkey, my_pubkey, session_key
K5: NORM_DECRYPT_TRY — session_key, recv_len, rx_counter
K6: INIT_DECRYPT_TRY — session_key, recv_len, recv_len-40, salt, encrypted_pubkey
All via DEBUG_INFO(DEBUG_CATEGORY_CRYPTO) — enable with debug=crypto=info
2026-07-16 22:13:35 +03:00
Evgeny
cdcc32cf84
fix: move DECRYPT FAIL/collision/reinit logs from DEBUG_CATEGORY_DEBUG to proper categories
...
- DECRYPT FAIL (1554): DEBUG_DEBUG → ETCP (main failure signal)
- not an init packet (1623): DEBUG_DEBUG → CONNECTION (was invisible ERROR)
- pkt_pool exhaust (1537): add ERROR log (was silent)
- REINIT/collision events (1473,1751-1838): DEBUG_DEBUG → CONNECTION
2026-07-16 22:03:33 +03:00
Evgeny
95061d3723
fix: demote INIT retry spam (link/send logs) to DEBUG_DEBUG
...
Keep at INFO only 'Sending INIT request' line per retry.
2026-07-16 21:41:50 +03:00
Evgeny
5b88d58dae
fix: demote spam auto_connect logs to DEBUG_DEBUG
...
Remain at INFO: attempt + result FAIL. Demoted to DEBUG: TIMEOUT,
CANCELLED, GC closing, flight launched, AUTO_CONNECT in_progress.
2026-07-16 21:11:53 +03:00
Evgeny
f039031883
fix: check conn_queue_entry->peer_node_id instead of conn->peer_node_id
...
etcp_conn_set_peer_node_id at state=0 updates conn->peer_node_id but
does not reindex the queue entry (key stays 0). Check the queue entry
directly to detect unindexed outbound connections.
2026-07-16 21:05:08 +03:00
Evgeny
c3354938e1
fix: peers_* table creation + GUI_ERROR to log + cross-connect conn reuse
...
- chat_core.c: CREATE TABLE IF NOT EXISTS peers_* in ensure_channel_ready
- utun_node.cpp: GUI_ERROR redirected to debug log file via guiDebugFile()
- etcp_connections.c: reuse unindexed outbound conn (peer_node_id==0)
on cross-connect INIT to avoid 'Can not insert link to socket'
2026-07-16 20:51:24 +03:00
Evgeny
abee0ef3a9
chatgui: add --asan flag to build_linux.sh
2026-07-16 19:33:52 +03:00
Evgeny
f3ac1cbb06
chat_sync: fix double-free in auto_connect — clear ca_state in ac_result_cb on success
2026-07-16 19:24:13 +03:00
Evgeny
bfa3e666d4
fix test_uasync_socket_race: increase listen() backlog from 32 to 1024
...
Root cause: accept queue overflow (backlog=32) caused kernel SYN drops.
Children waited ~1s for SYN retransmit timeout (5 gaps × 1s = 5s out of 7.2s).
With backlog=1024 the timeout drops from ~7.2s to ~0.065s (110× faster).
2026-07-16 19:22:06 +03:00
Evgeny
a8ce7d47b7
test_bgp_triangle: reduce keepalive_timeout from 2000ms to 200ms (10x speedup, 13.2s -> 1.27s)
2026-07-16 19:13:05 +03:00
Evgeny
3d04c37f56
stcp: add on_close callback to stcp_server_create/stcp_client_connect; member_sync: add join_ts/update_sig/update_ts fields, verify update_sig in apply; topo_node_sqlite: add join_ts/update_sig/update_ts to member_put, add member_get_join, add node_update_verified; chat_sync: include join_ts in join_msg, add update_sig/update_ts to CHANNEL_INFO_RESP; WELCOME verify join_sig; tests: use generated node_ids, reduce max ticks
2026-07-16 19:04:00 +03:00
Evgeny
0137a1bad4
chatgui: preserve input focus on chat refresh (save/restore focusWidget in loadChannel)
2026-07-16 13:03:23 +03:00
Evgeny
51d47ea6a8
chatgui: restore input focus after sending message
2026-07-16 12:54:34 +03:00
Evgeny
c4d1f984bd
chatgui settings: add Database tab with integrity check (quick/full) and optimize
2026-07-16 12:46:40 +03:00
Evgeny
03310db2cd
test_chat_sync_stress: simplify to 20 batches, add profiling (avg per-record time, sync time, total)
2026-07-16 12:45:28 +03:00
Evgeny
bb425c6722
db_sync v2: positional sync per-peer (synced_pos), datahash instead of chain_hash, no cascade on PUSH, single cascade after SEND_DATA batch, startup chain verification. PRAGMA synchronous=NORMAL + wal_autocheckpoint=10000 for performance.
2026-07-16 12:31:52 +03:00
Evgeny
0479c309bb
Диагностика синхронизации: merkle_sync DEBUG_DEBUG логи обмена; убран спам auto_connect no IPv4; сохранение адреса инвайтера из ETCP; детали DECRYPT FAIL (link_state/enc_errs)
2026-07-16 00:41:51 +03:00
Evgeny
0d5a72c40e
chat_sync: node_name теперь в пакетах — CHANNEL_INFO_RESP/JOIN/PEER_UPSERT передают имя, верификация использует имя из пакета (не из БД)
2026-07-16 00:32:09 +03:00
Evgeny
3f0fdad754
config_updater: поддержка создания конфига с нуля (без файла); новый файл — собирается с нуля, существующий — insert_or_replace
2026-07-15 23:47:00 +03:00
Evgeny
e325b84a8e
config: одно открытие файла — parse_config_from_buf вместо повторного fopen; убран read_file_to_mem
2026-07-15 23:39:01 +03:00
Evgeny
ef24af7d24
Ключи: node_id из SHA-256(privkey) через весь конфиг; приоритет privkey — pubkey/node_id всегда выводятся из него; CHANNEL_INFO_RESP: верификация inviter_join_sig через ETCP-ключи
2026-07-15 23:13:29 +03:00
Evgeny
da86841516
Диагностика: WARN при мутации конфига (ключи/node_id) + детали при invalid sig в JOIN/CHANNEL_INFO_RESP + предупреждение при расхождении node_id инвайта и ETCP
2026-07-15 22:44:33 +03:00
Evgeny
895eb0abbf
Убрал спам-логи ETCP SEND/RECV/DECRYPT OK + добавил диагностику синхронизации мемберов (DEBUG_CATEGORY_DEBUG) в ключевые точки topo_group, merkle_sync, member_sync, chat_sync
2026-07-15 22:25:19 +03:00
Evgeny
e708940bcd
debug: upgrade router_deliver to DEBUG_INFO, show cb ptr
...
Router deliver now visible without trace — shows svc_id, len, remote_node_id, conn ptr, callback ptr
This will confirm whether CHANNEL_INFO_REQ reaches chat_sync on the server side
2026-07-15 22:06:54 +03:00
Evgeny
d161782b46
fix: merkle_sync.c linked-list -> queue lookup, upgrade debug logs to INFO
...
- merkle_sync.c ms_find_conn_for_node: replace c=c->next with queue_find_data_by_index
- chat_sync.c cs_find_conn_for_node, cs_on_conn_up: DEBUG_DEBUG -> DEBUG_INFO
- etcp.c queue_set_ready: DEBUG_DEBUG -> DEBUG_INFO
2026-07-15 21:59:29 +03:00
Evgeny
d71753fa79
debug: add diagnostic logs for chat invite connect flow
...
- cs_find_conn_for_node: show queue state, entry found/missing, conn flags
- cs_on_conn_up: log when skipping due to !initialized
- etcp_conn_queue_set_ready: log reindex details (old/new entry, count)
- etcp_conn_set_peer_node_id: show state+reindexed flag
2026-07-15 21:42:16 +03:00
Evgeny
a7ecee01f5
etcp: replace connections linked-list with indexed ll_queue, add state/ref_count lifecycle
...
- Remove ETCP_CONN.next linked-list, UTUN_INSTANCE.connections list/count
- Unified connections in single ll_queue indexed by peer_node_id (0=pending)
- struct conn_queue_entry { peer_node_id, conn* } for uniform queue data
- Connection lifecycle via etcp.c: create→pending, conn_ready→indexed, close→detach+deferred free
- Close split: phase1 detach from external world, phase2 deferred via uasync_call_soon
- etcp_conn_set_peer_node_id: reindex on ID change (WARN)
- etcp_conn_ref_take/free: blocking close until refcount returns to 0
- Remove chat_connections — use unified connections queue directly
- Update all iteration/search patterns across 40 files (src + tests + chatgui)
2026-07-15 19:56:47 +03:00
Evgeny
6902f5fd95
chat: add ll_queue with index for P2P connections (replaces linear search)
...
- utun_instance.h: add chat_connections queue (indexed by node_id, 8 bytes)
- chat_sync.c: queue_new in init, queue_free in destroy, queue_find_data_by_index in cs_find_conn_for_node
- chat_sync.c: remove from queue in cs_on_conn_down
- chat_core.c: add to queue in connect_from_invite and connect_auto
- chat_core.c: remove from queue in cc_parallel_cleanup and ca_cleanup
- db_sync.c: replace linear conn search with queue_find_data_by_index (db_sync_send_hash)
2026-07-15 18:15:16 +03:00
Evgeny
d0af503d01
config: fix allow_all parsing — accept yes/1/true like other bool options
...
- config_parser.c: allowed_keys_allow_all now uses strcasecmp(yes/1/true) instead of atoi()
- node_config.cpp: keep allow_all=yes
2026-07-15 18:01:54 +03:00
Evgeny
3368abad2a
etcp+chat: add DEBUG_INFO logs for invite/crypto handshake debugging
...
- etcp_connections: DECRYPT FAIL now logs my_pub/peer_pub/session_ready at INFO level (debug category)
- chat_sync: log invite start with pubkey/node_id/addr_count
- chat_core: log pubkey set on invite connect (my_pub + peer_pub)
- joindialog: GUI_INFO on decoded invite
2026-07-15 17:53:25 +03:00
Evgeny
d83d281fa0
config: add [allowed_keys] allow_all=yes by default, add [gui] as valid section
...
- node_config.cpp: add [allowed_keys] allow_all=yes to default config
- config_parser.c: add SECTION_GUI to suppress 'Key outside section' warnings
2026-07-15 17:34:48 +03:00
Evgeny
4c8e5f6223
db_sync+chat_sync+etcp: fix conn init race, reduce keepalive log spam
...
- etcp_connections: keepalive SEND/RECV/DECRYPT_OK: DEBUG→TRACE; DECRYPT_FAIL: WARN→DEBUG
- db_sync_on_conn_up: skip sync if !conn->initialized, wait for next UP event
- db_sync peer_check_timer+instance_add: also check conn->initialized
- chat_sync cs_on_conn_up: ignore conn_up before initialized (cs_send fails otherwise)
- db_sync_on_conn_up log now includes init= and links=
2026-07-15 17:25:14 +03:00
Evgeny
5b749d6cc8
chatgui: db_path is now a directory (chat_data/) with chats.db and sync/ inside
...
- Default db_path changed from 'chats.db' to 'chat_data' directory
- chat_core_init receives <db_path>/chats.db
- db_sync receives <db_path> (creates <db_path>/sync internally)
- Directory auto-created on startup via QDir::mkpath
2026-07-15 17:09:11 +03:00
Evgeny
6252556a02
chatgui: migrate message sync from chat_sync to db_sync
...
- Replace db_sync_stub.c with real src/db_sync.c in libutun
- Remove message sync protocol from chat_sync (INIT_SYNC/INIT_RESP/SEND_DATA/PUSH/ACK_PUSH/SYNC_DONE)
- Keep chat_sync auxiliary: join protocol, peer management, auto-connect
- Remove chat_core_insert_record, cursor_*, mark_sent/ttl_delete stubs
- chat_core on_db_sync_insert now only does SQLite INSERT + GUI notify
- Move db_sync_init() from instance_init_common to utun_instance_init for config override timing
- Force db_sync_enabled=1 in utun_node.cpp
- db_sync handles all P2P message sync via service 0x20
2026-07-15 17:02:47 +03:00
Evgeny
e86944d661
style: reformat db_sync.c — break 500-char lines into readable ~130-char max
2026-07-15 16:32:36 +03:00
Evgeny
acaa3a767c
refactor: move chat_sync and member_sync to direct ETCP P2P, bypass etcp_router
...
Replace etcp_router_bind/etcp_route_send/etcp_router_unbind with
direct etcp_bind/etcp_send/etcp_unbind + find-conn-by-node_id helpers.
Same approach as db_sync (0x20). Service IDs unchanged (0x30, 0x31).
2026-07-15 16:13:45 +03:00
Evgeny
d840b458a7
fix: pause router retransmits before clearing ETCP queues on reinit
...
When etcp_conn_reinit is called, it clears ETCP queues (input_wait_ack
etc.) which frees dgram objects to data_pool. If a router retransmit
timer fires concurrently, it sends through the same conn → normalizer
allocates from corrupted data_pool → SIGSEGV.
Fix: call etcp_router_pause_retrans_for_node() BEFORE etcp_conn_reset()
to cancel retrans timers and free inflight_q entries for all router
connections to the peer. No callbacks, no close notifications —
lightweight pause, router connections stay alive and resume when
ETCP connection comes back up.
2026-07-15 15:37:03 +03:00
Evgeny
9378b18ce7
fix: defer connection_close in ready_cb using uasync_call_soon
...
ca_ready_cb and cc_parallel_ready_cb called etcp_connection_close
synchronously on non-selected connections from within the ready_cbk
callback chain. This corrupts senders_list in topo_group, causing
UAF in topo_group_start_link_nat_check.
Now uses uasync_call_soon (zero-delay timer) to defer the close
to the next event loop iteration, after the callback chain completes
and callbacks_running flag is reset.
2026-07-15 15:00:05 +03:00
Evgeny
f669254da3
feat: hard crash on etcp_connection_close from callback chain
...
Added callbacks_running flag to ETCP_CONN:
- set to 1 before up_cbks / down_cbks / ready_cbks iteration
- reset to 0 after iteration completes
- etcp_connection_close checks flag and does intentional SIGSEGV
with FATAL log message if called during callback chain
This catches illegal synchronous close from within callbacks
instead of producing cryptic UAF segfaults later.
2026-07-15 14:43:47 +03:00
Evgeny
371208d489
chatgui: выпилить все записи в БД из GUI потока (DbManager)
...
- DbManager теперь read-only, получает sqlite3* handle через setDb()
- chat_core — единственный владелец БД (SQLITE_OPEN_FULLMUTEX + WAL)
- initTables/seedStubData/createChannel/insertMessage/setUiState удалены из DbManager
- seed 5 stub-аккаунтов перенесён в chat_core_init()
- GUI_EVT_DB_READY — уведомление о готовности БД
- setUiState заменён на QSettings
- каналы загружаются по DB_READY коллбэку
- убран двойной sqlite3_open (один файл, один хендл)
2026-07-15 14:26:32 +03:00
Evgeny
409a99f56b
feat: cross-connect collision resolution via is_server master + collision flag
...
Protocol: added collision field to INIT_REQUEST_PKT (1 byte before ed25519_pubkey).
When two peers connect simultaneously, the one with is_server=0 (API-created
outbound link) is the master. Resolution by smaller node_id:
- We have master link + smaller node_id → send our INIT with collision=1
- We have master link + larger node_id → yield, process as slave
- Remote sends collision=1 → become slave unconditionally
- session_id change always forces reinit (genuine restart)
Removed unconditional etcp_conn_reinit on INIT_RESPONSE(0x03) — guarded by
reset_done flag. Server-side reinit now has collision check BEFORE reset_done
guard; session_id change penetrates reset_done protection.
Closes cross-connect reinit loop causing endless UP/DOWN flapping.
2026-07-15 13:53:15 +03:00
Evgeny
0912499309
fix: segfault in callback chain iteration — save next before invoke
...
In etcp_conn_ready / etcp_on_up / etcp_on_down / etcp_connection_create /
tcp_server_on_link, callback chains were iterated with:
while (cbe) { cbe->fn(...); cbe = cbe->next; }
If the callback removes itself from the chain (e.g. ca_ready_cb calls
etcp_conn_remove_ready_cbk which u_free's the entry), cbe->next reads
freed memory → SIGSEGV.
Fixed by saving next pointer before invoking the callback:
while (cbe) { n = cbe->next; cbe->fn(...); cbe = n; }
2026-07-15 12:46:37 +03:00
Evgeny
abbb6de701
fix: block redundant conn reinit on cross-connect INIT (reset_done flag)
...
Problem: when two peers connect simultaneously, each incoming
INIT_REQUEST(0x02) or INIT_RESPONSE(0x03) triggers etcp_conn_reinit
unconditionally, causing endless UP/DOWN flapping loop.
Fix: add reset_done flag to ETCP_CONN:
- 0 at creation and after explicit reinit (reinit allowed)
- set to 1 in etcp_conn_ready (connection stable, block reinit)
Three call sites guarded with !conn->reset_done:
- client: handle_init_response_client (INIT_RESPONSE 0x03)
- server: existing link INIT_REQUEST processing
- server: new link INIT_REQUEST processing
send_reset logic preserved unconditionally — only etcp_conn_reinit
itself is blocked when already stable.
2026-07-15 12:17:14 +03:00
Evgeny
2bf7dcc6f0
debug: comprehensive connection diagnostics — recv/send/reinit paths
...
- RECV: log every packet (src addr, link found, session_ready, decrypt result)
- RECV: log init decrypt rejection with packet code (catches 0x03 INIT_RESPONSE
silently dropped by init path)
- SEND: log destination addr+fd in send_init_response and etcp_encrypt_send
- REINIT: log full reason in server and client paths (code, session, got_init,
initialized, links_up state before reinit)
2026-07-15 11:46:44 +03:00
Evgeny
f7d88e5532
fix segfault in ca_ready_cb: ca_state owns all ca_ctx, single cleanup point
...
- Added struct ca_ctx** ctxs to ca_state (parallel array)
- ca_cleanup now frees all ctxs[i] and the ctxs array
- ca_ready_cb: removed u_free(ctx), added etcp_conn_remove_ready_cbk before cleanup
- ca_timeout_cb: removed u_free(ctx) — ctx lives until ca_cleanup
- All error paths set ctxs[i]=NULL for ca_cleanup safety
2026-07-15 11:21:31 +03:00
Evgeny
1e7585438d
chat_core_connect_auto: add outbound conn to inst->connections
...
etcp_connection_create does NOT add conn to inst->connections list.
Without this, incoming INIT handler can't find the outbound conn
by peer_node_id and creates a new one, causing insert_link collision.
2026-07-15 11:05:27 +03:00
Evgeny
a8164baf41
chat_core_connect_auto: set peer_node_id on ETCP_CONN
...
Without peer_node_id, incoming INIT handler can't find the existing
outbound connection, creates a new one, and fails on insert_link collision.
2026-07-15 10:51:53 +03:00
Evgeny
fc6a873b5c
etcp_connections: reuse existing outbound link for incoming INIT by addr
...
When two peers send INIT simultaneously, the first link occupies the socket.
Incoming INIT arriving after finds the existing outbound link by (ip,port)
instead of failing with 'Can not insert link to socket'.
2026-07-15 10:46:33 +03:00
Evgeny
0adf7d07ef
chat_core_connect_auto: dedup addresses by (addr,port)
2026-07-15 10:32:06 +03:00
Evgeny
33aa6bbd5a
auto-connect: cursor-based, no close on timeout, GC every 1s, cancel API
...
- ca_timeout_cb: removed etcp_connection_close, ETCP lives past 3s timeout
- ca_state.cancelled flag + chat_core_connect_auto_cancel() for external cancel
- chat_core_connect_auto returns ca_state* via out_state
- Rewritten auto_connect: cursor (ch,peer) instead of bulk collect
- GC every 1s: closes flights with no link_status after 3s
- ac_result_cb no longer clears ca_state (GC handles cleanup)
- stop: cancels all flights via chat_core_connect_auto_cancel
2026-07-15 10:24:44 +03:00
Evgeny
dccf54b30b
auto-connect + GUI per-channel indicators
...
- chat_core_connect_auto: direct ETCP connect from SQLite (no BGP)
- auto_connect: parallel connect to peers with 3s timeout, retry 10s
- RTT saved to node_addresses on disconnect
- vertical status bar + circle badge with online count per channel
- ChannelListView prevents deselection
2026-07-15 06:00:43 +03:00
Evgeny
1a0229fd4f
add NTP time synchronization module
2026-07-14 20:14:00 +03:00
Evgeny
f3719a28df
fix: change timestamp unit from microseconds to milliseconds
...
- db_sync.c: last_timestamp_us → last_timestamp_ms, use tv_sec*1000 + tv_usec/1000
- db_sync_stub.c: same change
- QDateTime::fromMSecsSinceEpoch() in chatgui expects milliseconds
- 1 µs → 1 ms change fixes 'minutes ticking like seconds' display bug
2026-07-14 19:33:16 +03:00
Evgeny
5fc621690a
fix: wall-clock timestamps + merkle_sync timeout + build script
...
- Replace get_time_us() with utun_gettimeofday() for PUSH message timestamps
(db_sync.c, chat_core.c) — monotonic clocks differ across Linux/Windows
- Fix merkle_sync: restart session timer in _handle_request to prevent
double-sided timeout when both nodes start member_sync simultaneously
- Fix INIT_RESP short-format: don't mark synced when my_count > peer_count
- Add db_sync_get_last_timestamp() to avoid duplicate timestamp generation
between db_sync and chat_core on_db_sync_insert
- Fix db_sync_stub to generate timestamps consistently
- build.sh: auto-rebuild chatgui via CMake after utun build
2026-07-14 19:23:02 +03:00
Evgeny
4636a69225
fix chatgui: pass chain_hash in PUSH + start member_sync on server join
...
chat_sync_push: add chain_hash parameter, use it instead of zeros
(fixes chain_hash mismatch → all PUSH messages were rejected)
on_db_sync_insert: pass computed chain_h to chat_sync_push
cs_handle_channel_join: call member_sync_start for the joiner
(server now initiates member sync when client joins.
Previously merkle_sync was only started by client → timeout
because server never responded)
cs_handle_welcome: add DEBUG_INFO before member_sync_start on client side
2026-07-14 18:43:04 +03:00
Evgeny
f9f516c2e9
fix chatgui: PUSH new messages to peers + comprehensive debug logging
...
chat_sync_push: fix PUSH format to match cs_handle_push expectations
(was missing insert_record header: ts+dh+nid before ct+dlen+data)
Add DEBUG_INFO log with peer count after send.
on_db_sync_insert: call chat_sync_push after successful local insert
→ new messages are now pushed to all connected peers
Add DEBUG_ERROR to 4 silent returns (JSON parse fail, SQL errors)
chat_core_submit_message: add DEBUG_INFO entry log (ch, ct, len)
chat_core_insert_record: add DEBUG_WARN/ERROR to 7 silent returns
(truncated record, SQL prepare fail, unknown step error)
cs_handle_push: add DEBUG_INFO for ACK send, DEBUG_ERROR for insert fail
cs_handle_send_data: DEBUG_WARN when record truncated mid-loop
cs_on_conn_up: DEBUG_INFO sync path with channel count
Full trace now shows every message: SUBMIT → insert → PUSH → RECV PUSH → ACK
2026-07-14 18:34:24 +03:00
Evgeny
58b9f28149
fix chatgui: prevent invite deadlock on connection flap
...
cs_on_conn_down: remove invite state zeroing on disconnection.
Only timeout callbacks and explicit protocol end (CS_MSG_ERROR,
transition to JOIN phase) clear the invite state.
Connection flap now causes automatic retry:
conn_up → pending_invite_ch_id != 0 && !info_req_timer → resend
CHANNEL_INFO_REQ. No deadlock possible.
2026-07-14 18:22:05 +03:00
Evgeny
8c41b44718
fix chatgui: repair INIT_RESP handler, add debug logging to all sync handlers
...
- cs_handle_init_resp: change silent reject len<37→len<5 (actual payload
sent is 6 bytes, plen=5 after stripping type byte).
Support short format (synced, peer_count+sparse_count) and long format
(divergence, with test_pos+peer_ch). Add INFO logs at each decision.
(fixes sync never starting after invite join — RECV INIT_RESP len=5
was silently rejected)
- All 12 silent return branches in handlers: add DEBUG_WARN with
handler name, peer, ch_id, and reason (makes malformed packets
visible in logs)
- Key sync flow INFO logs:
cs_handle_init_sync: peer_count, my_count
cs_handle_send_data: records sent/received count
cs_on_conn_up: invite vs sync path
chat_core_insert_record: successful insert
2026-07-14 18:07:57 +03:00
Evgeny
2d179ec41d
fix chatgui: message format, member notify, chain_hash sync
...
- on_db_sync_insert: parse JSON {"n":...,"ct":...,"d":...}, store
d→data, n→node_id, ct→content_type with proper chain_hash
(fixes JSON displayed instead of message text)
- chat_core_cursor_open: SELECT chain_hash column
- chat_core_cursor_next: include chain_hash(32) in output record
- cs_handle_send_data: parse chain_hash in received records
(fixes chain_hash mismatch → all sync records were dropped)
- cs_handle_channel_join: post GUI_EVT_MEMBERS_CHANGED
(fixes creator not seeing new member after join)
- cs_handle_welcome: trigger INIT_SYNC with inviter after join
(fixes no message sync after invite join)
2026-07-14 17:46:33 +03:00
Evgeny
c4751557b1
fix chatgui: ensure msg table + db_sync instance on join and restart
...
- chat_core_ensure_channel_ready(ch_id): idempotent — creates
msg_<id> table + registers db_sync instance if missing
- chat_core_create_channel: refactored to use ensure_channel_ready
- cs_handle_channel_info_resp: call ensure_channel_ready on join
- chat_core_init: iterate existing channels on restart
- Fixes 'no such table: msg_<id>' after invite join
- Fixes 'no db_sync instance for ch=<id>' after restart
2026-07-14 17:22:01 +03:00
Evgeny
4254ab97bb
fix chatgui: db_sync_stub + chat_sync_init for invite link join
...
- db_sync_stub.c: complete rewrite — proper structs, all API functions
(db_sync_instance_add, insert_signed, set_insert_cb, select)
Fixes db_sync_instance_add returning NULL (inst->db_sync was NULL)
- libutun/CMakeLists.txt: remove src/db_sync.c, stub replaces it
- chatgui/CMakeLists.txt: add transport/db_sync_stub.c
- utun_node.cpp: remove redundant db_sync_init/destroy,
add chat_sync_init/destroy — server now registers svc_id=48
Fixes 'no handler for svc_id=48' on incoming CHANNEL_INFO_REQ
2026-07-14 17:03:00 +03:00
Evgeny
ccd25813f6
refactor: extract merkle_sync — universal Merkle-tree sync module
...
- merkle_sync.h/c: tree (5-level prefix, SHA256 buckets), wire protocol
(HASHES/REQUEST/BATCH), sessions (10s timeout, 3 retries), async API
with done_cb
- member_sync: thin glue layer, implements 3 data model callbacks
(update_bucket_hash, get_items, apply_items) for chat members
- chat_sync: updated member_sync_start() calls with done_cb callback
- member_tree_hash table renamed to merkle_tree_hash
- member_sync.h public API preserved, internal tree/wire logic removed
2026-07-14 16:35:58 +03:00
Evgeny
f617dcd68e
db_sync: LMDB→SQLite, multi-instance, etcp_api, chatgui integration
...
- src/db_sync: LMDB replaced with SQLite (separate tables per instance: db_sync_name_id)
TTL index (author, timestamp), WAL mode, per-instance peers/timers
opaque DB_SYNC_INSTANCE* handle, insert callback, select API
new fields: author_signature, delivered_peers, delivery_chain
transport: etcp_api direct P2P (was etcp_router)
- src/db_sync.h: user-oriented API docs, multi-instance lifecycle
- lib/Makefile.am: liblmdb sources removed
- lib/sqlite3.c+h: SQLite amalgamation added
- topo_node: LMDB→SQLite (src/topo_node_sqlite.c moved from chatgui)
- chatgui: real db_sync.c replaces db_sync_stub.c
chat_core: db_sync_insert_signed + dual-write insert callback
utun_node: db_sync_init/destroy replaces chat_sync_init/destroy
CMakeLists: stubs removed, real db_sync.c added
2026-07-14 14:17:43 +03:00
Evgeny
37417ba49d
Fix: my_node_name insert inside [global] section, add button tooltips in channellist
2026-07-14 09:17:01 +03:00
Evgeny
cca3511503
fix: replace deprecated SHA256 API with EVP, conditional dl linkage for Windows
2026-07-14 09:07:03 +03:00
Evgeny
d70cdbb040
chatgui: preserve active channel selection on reload, members sync, profile settings, member list model
2026-07-14 08:52:10 +03:00
Evgeny
c3f946fb63
chat_sync: fix join group stall — remove node_id match in cs_on_conn_up, add CS_MSG_ERROR protocol response
2026-07-13 18:11:18 +03:00
jeka
93de0aa591
agents
2026-07-13 15:46:29 +03:00
Evgeny
0c2eeb8820
chatgui: validate config options on startup, refuse to start on errors
2026-07-13 15:46:20 +03:00
Evgeny
637b21da9e
debug: remove console_level/file_level — simplified output routing
...
Remove secondary level filtering in debug_output(). Now the only filter
is debug_should_output() (per-category + global fallback). Output goes
to file (if file_output set) or console (if console_enabled), with no
additional level check.
Removed:
- debug_set_console_level(), debug_set_file_level()
- console_level, file_level fields from debug_config_t
- debug_set_level() no longer sets console_level
2026-07-13 15:38:08 +03:00
Evgeny
c0935aba6c
docs: update AGENTS.md and etcp_arch.md
2026-07-13 15:21:30 +03:00
Evgeny
6bf267924d
add DEBUG_CATEGORY_CONNECTIVITY for handshake/protocol lifecycle logs
...
New category (id=25) replaces DEBUG_CATEGORY_DEBUG in chat_sync and
chat_core. This allows enabling only protocol-level logs (SEND/RECV,
timeouts, handshake) without the noise from DEBUG category.
Changes:
- debug_config.h: add CONNECTIVITY=25, COUNT→26
- debug_config.c: add 'connectivity' to g_debug_categories
- chat_sync.c: DEBUG→CONNECTIVITY in all protocol logs
- chat_core.c: DEBUG→CONNECTIVITY in connection/create logs
- utun_node.cpp: remove hardcoded DEBUG=TRACE (now config-driven)
- chatgui.cfg: connectivity=info in debug_categories
2026-07-13 15:14:48 +03:00
Evgeny
5318476cdf
chat_sync: add protocol request timeouts and SEND/RECV debug logs
...
- Add info_req_timer (5s) for CHANNEL_INFO_REQ — reports CONN_MGR_ERR_TIMEOUT
to GUI on timeout, clears pending invite state
- Add join_timer (8s) for CHANNEL_JOIN → WELCOME — reports timeout on failure
- cs_on_conn_down: cancel all proto timers, reset pending invite state
- cs_send: log every outgoing message (SEND <type> to=<peer> ch=<id> len=<n>)
- Dispatcher: log every incoming message (RECV <type> from=<peer> ch=<id> len=<n>)
- Add cs_msg_name() helper for readable message type names
- pending_invite_node_id/ch_id no longer cleared immediately after send —
kept until response or timeout, enabling proper error reporting
2026-07-13 15:06:06 +03:00
Evgeny
24294b22f6
fix: use got_initial_pkt instead of new_conn for send_reset decision
...
new_conn is only true for the first INIT after server restart.
Subsequent INITs from same peer (recovery loop) see new_conn=0
and revert to old logic, sending 0x05 (no reset) and overwriting
the first 0x03 response.
got_initial_pkt stays 0 until client actually sends seq=1, so
server keeps sending 0x03 across all INIT retries until client
resets and starts from seq=1.
2026-07-13 14:32:16 +03:00
Evgeny
43d95016ae
fix: send INIT_RESPONSE with reset when server creates new connection after restart
...
When server restarts, new ETCP_CONN has session_id=0 (calloc).
If client sends INIT_REQUEST_NOINIT (0x04) with session_id=0,
the condition conn->session_id != session_id is false (both 0),
so no reset was sent. Client kept old seq numbers while server
expected seq=1, causing 'Waiting for initial packet' deadlock.
Fix: add || new_conn to the condition — when server created a
fresh connection (was restarted), always send reset to client.
2026-07-13 14:19:27 +03:00
Evgeny
41e0736b75
etcp_connections: force reinit when client sends ETCP_INIT_REQUEST (reset)
...
Server now checks both code==ETCP_INIT_REQUEST and session_id mismatch
to decide send_reset. Previously only session_id was checked, so if
session matched (both sides had 00000000), reinit was skipped even
when client explicitly requested reset (code 0x02).
Client side already correct: handle_init_response_client:1473 calls
etcp_conn_reinit if pkt_code==ETCP_INIT_RESPONSE (0x03).
2026-07-13 13:29:58 +03:00
Evgeny
1d29cab751
etcp: INFO-level TX DATA log + Initial packet received log
...
- 1133: DEBUG_DEBUG -> DEBUG_INFO for TX DATA (seq, len, retry, queue lengths)
- 1437: add DEBUG_INFO when initial packet seq=1 accepted
These two INFO lines show the exact order of first sends and receives
to diagnose INIT sequencer sync without guessing.
2026-07-13 13:19:08 +03:00
Evgeny
d0f5a2970f
etcp_connections: improve INIT diagnostics (demote spam, add type/source/fields)
...
- 1556: Normal decryption failed -> DEBUG_DEBUG (expected for INIT, no more spam)
- 1581: added 'INIT X25519 OK from %s' with source address
- 1604-1617: INFO log for decrypted packet type (PING/PONG/INIT) with peer_id+src
- 1662-1668: expanded INIT accepted log with all fields:
peer_id, mtu, link_id, socket_id, type, only_local, src_ip:src_port,
session_id, actual src (UDP) — shows NAT mismatch
2026-07-13 11:01:50 +03:00
Evgeny
03701f525f
conn_mgr: add missing sc_init_ctx before sc_set_peer_public_key
...
Without sc_init_ctx, crypto_ctx.initialized==0, sc_set_peer_public_key returns
SC_ERR_NOT_INITIALIZED, and all subsequent sc_encrypt (INIT, etc) fail with
'encryption failed' error 2. Fixed in cm_start_phase_direct and
reverse-connect path (both places that create ETCP_CONN for conn_mgr).
2026-07-13 10:03:15 +03:00
Evgeny
89b1a01448
invite+clipboard+conn_mgr: sock_meta for alien nodes, clipboard fix, bg_ping fix
...
- chat_core_connect_from_invite: add TOPO_SOCKMETA4 (id=0, UNKNOWN, UNKNOWN)
so cm_has_direct_ip/cm_start_phase_direct can match socket_id=0 addr
- conn_mgr: cm_bg_ping_timer_cb reads real addr from nq->node->v4_addrs
instead of NULL; added cm_bg_ping_noop_cb per required etcp_send_ping_to_socket
- invitedialog: set both QClipboard::Clipboard and Selection on Linux/X11
2026-07-13 09:37:46 +03:00
Evgeny
e3b32cf4d3
conn_mgr: fix all etcp_route_send calls (dgram was NULL) + improve error diagnostics
...
- conn_mgr.c: 5 call sites used queue_entry_new(data_size) with data[] instead
of dgram — all etcp_route_send calls silently dropped. Fixed by switching to
dgram-based allocation (queue_entry_new(0)+u_malloc) matching all other callers.
- DIRCECT_REQ reuses already-allocated pkt as qe->dgram (no extra memcpy).
- etcp_router.c:1078 — 'empty entry' now shows dgram=%p len=%u dst=0x... force=%d
- etcp_connections.c:1139 — 'bad args' now shows all arg pointers to identify NULL
- etcp_connections.c:1145 — 'no socket' now shows addr_family=%d
- conn_mgr.c:633 — 'no candidates' now notes direct+reverse failed
2026-07-13 08:49:20 +03:00
Evgeny
2d93dd66c8
chatgui: fix Windows build - replace netinet/in.h with socket_compat.h
2026-07-13 08:08:27 +03:00
Evgeny
85a91a1320
chatgui: invite link connect flow + GUI_ERROR always-on diagnostics
...
- debug_ui.h: remove NDEBUG guard so GUI_ERROR works in Release builds
- invite_link.h/cpp: add error field to InviteData with specific failure reason
- joindialog: show exact decode error in QLabel instead of generic message
- chat_sync: implement invite connect flow (CHANNEL_INFO_REQ/RESP, JOIN, WELCOME)
- topo_node_sqlite: node/address table init and lookup
- utun_node: getInviteAddresses fallback from ETCP sockets
- minor fixes in mainwindow, chat_core, gui_bridge
2026-07-13 08:06:19 +03:00
Evgeny
102816d0dc
node_config: load() returns true on parse success; main: specific diagnostics per missing field
2026-07-13 07:52:49 +03:00
Evgeny
c65940f499
Copy Qt platforms/qwindows.dll plugin alongside executable
2026-07-13 07:44:06 +03:00
Evgeny
79bdafc9a7
Optimize recursive DLL resolution: scan only newly added DLLs
2026-07-13 07:43:25 +03:00
Evgeny
cb1021f231
Recursive DLL dependency resolution via objdump for build.sh windeployqt fallback
2026-07-13 07:36:51 +03:00
Evgeny
58503907b5
Use objdump -p for smart DLL dependency discovery as windeployqt fallback
2026-07-13 07:33:49 +03:00
Evgeny
666507d3fe
Move Qt DLL deployment from CMake to build.sh (windeployqt + manual fallback)
2026-07-13 07:30:56 +03:00
Evgeny
f0f20c158b
Simplify windeployqt: use PATH, add diagnostics, --no-compiler-runtime
2026-07-13 07:23:35 +03:00
Evgeny
ed5ccd1ffb
Add windeployqt post-build step for automatic Qt DLL deployment on Windows
2026-07-13 07:19:37 +03:00
Evgeny
65611790fa
Fix enterEvent signature for Qt5/Qt6 compatibility
2026-07-13 07:06:58 +03:00
Evgeny
e74240f0dd
Add my_ed25519_privkey field to UTUN_INSTANCE struct
2026-07-13 07:01:42 +03:00
Evgeny
e438e19f9e
Add cross-platform utun_mkdir() wrapper for Windows compatibility
2026-07-13 06:44:18 +03:00
Evgeny
de7841f33a
chatgui: create group, unified logging, fix uasync_post epoll bug
...
- Add CreateGroupDialog with group name input
- Generate X25519+Ed25519 keypairs, random uint64 channel_id,
Ed25519 signature, write to DB via uasync thread
- chat_core_create_channel(): create msg table, topo_node_sqlite_channel_put()
- GUI_EVT_CHANNEL_UPDATED notification to reload channel list
- Per-category debug config: debug_level= + debug_categories= in [gui]
- Unified logging via debug_config: all threads write to same file/console
- debug_enable_console(1) to mirror file output to stderr
- DEBUG_LEVEL_DISABLED=-1: truly disable category, NONE=0 fallback to global
- Fix uasync_post under epoll: process_posted_tasks was never called
- Fix MainWindow constructor parameter ordering (dbPath vs debugFile)
- debug_ui.h: append mode ('a' instead of 'w')
2026-07-12 17:39:20 +03:00
Evgeny
a9a6b6bb10
TOPO_GROUP: add group_type support (UTUN/CHAT), mismatch detection, topo_groups_create_group()
...
- CHAT groups don't send subnets and skip route insert/delete
- Group type mismatch sends ERR_GROUP_MISMATCH to peer
- New topo_groups_create_group() public API for creating typed groups
2026-07-11 22:16:39 +03:00
Evgeny
3f874a80ab
TOPO_GROUP: embed struct ll_entry as first member (direct queue embedding, hash index)
2026-07-09 19:50:17 +03:00
Evgeny
1f4749a1b9
Убрал имена функций из DEBUG-сообщений (__FUNCTION__ уже добавляет)
...
Оставлены метки-подсказки: NODEINFO, ACK_SEND, ETCP_SEND, DUMP,
router, conn_mgr, db_sync, probe, ctrl_out, socks_proxy и т.д.
2026-07-09 19:23:49 +03:00
Evgeny
28e5950d29
TOPO_BGP -> TOPO_GROUP: multi-group support
...
- Renamed TOPO_BGP to TOPO_GROUP with topo_group_id (64bit)
- Added TOPO_GROUPS container (ll_queue group_list) in UTUN_INSTANCE
- Memory pools moved from TOPO_GROUP to TOPO_GROUPS (instance-level)
- Default group: TOPO_GROUP_UTUN = 0x8000000000000000
- topo_groups_get_default() searches by group_id, not just first entry
- All topo_bgp_* renamed to topo_group_*; function signatures updated
- Files: topo_bgp.h/c -> topo_group.h/c
2026-07-09 18:08:49 +03:00
Evgeny
3c3d9a65d9
refactor: переименование route_node/route_bgp в topo_node/topo_bgp
...
Файлы: route_node.* route_node_lmdb.* route_bgp.* -> topo_node.* topo_node_lmdb.* topo_bgp.*
Структуры:
- ROUTE_BGP -> TOPO_BGP, ROUTE_BGP_CONN_ITEM -> TOPO_BGP_CONN_ITEM
- NODEINFO -> TOPO_NODE, NODEINFO_Q -> TOPO_NODEQ, NODEINFO_PATH -> TOPO_NODEPATH
- NODEINFO_ROUTES -> TOPO_NODESUBNETS, NODE_CONNECTIVITY -> TOPO_CONNECTIVITY
- wire: NODEINFO_MSG -> TOPOMSG_NODE, NODEINFO_IPV4_* -> TOPOMSG_*4 и т.д.
- memory: NI_IPV4_* -> TOPO_*4, NI_IPV6_* -> TOPO_*6
- ROUTE_SUBCMD_* -> TOPO_SUBCMD_*, ETCP_ID_ROUTE_ENTRY -> ETCP_ID_TOPO_ENTRY
Функции:
- route_bgp_* -> topo_bgp_*
- nodeinfo_* -> topo_node_*
- route_node_* -> topo_node_*
- route_node_lmdb_* -> topo_node_lmdb_*
Смысл: отделение механизма формирования топологии узлов от IP-роутинга.
2026-07-09 17:01:56 +03:00
Evgeny
c7ac42eb5f
route_node: refactor NODEINFO — separate protocol/memory structs, linked lists with memory_pool
...
- NODEINFO_MSG (protocol, packed): added flags byte + group_id field
- NODEINFO (memory): ref_count, linked list heads instead of inline arrays
- NODEINFO_ROUTES: separate struct with linked list subnet heads
- NODEINFO_Q: node*, routes*, tranzit_data*, hop_list* as separate mallocs
- 6 memory_pools in ROUTE_BGP for NI_* linked list items
- ni_list_count() universal counter via _ni_head cast
- nodeinfo_serialize/deserialize for protocol <-> memory conversion
- NODEINFO_FLAG_SEND_SUBNETS controls subnet data in protocol
- group_id defaults: utun=NODEINFO_GROUP_UTUN(1) with subnets
Fixes:
- deserialization: data+2 instead of data+sizeof(BGP_NODEINFO_PACKET)
- memset: start after ll_entry to preserve ll.size
- hop_src: subtract hop_count*8 to point at correct dynamic offset
- same-ver branch: remove_path(conn) instead of remove_path_by_hop(peer)
- double-free in route_bgp_remove_conn/process_withdraw
- conn_mgr_add_alien_node: rewritten for new structures
- all test files updated for new API
2026-07-09 16:20:48 +03:00
Evgeny
62954ca0a9
chatgui: replace MsgClient/ChatPropagator/crypto with chat_core, update DB/messaging/layout
2026-07-08 21:15:45 +03:00
Evgeny
1889d23240
metrics: RTT/loss histograms + Ed25519 signing + peer exchange via INIT handshake + file logging to stats/<peer>.dat
...
- etcp_metrics struct: 12-bucket RTT histogram, 11-bucket loss histogram, 10-min snapshots (>=200 pkts)
- Total counters: packets/bytes sent/rcvd, losses (retrans + probe gap detection)
- CSV append to <stats_dir>/<peer_id>.dat every 10 min
- Ed25519 pubkey exchange in INIT handshake (V3), always present
- Signed metrics exchange via ETCP_SECTION_METRICS (0x0A)
- Received metrics saved as from_<peer_id>.dat with signature hex
- on_metrics_rcvd callback in ETCP_BINDINGS
- stats_dir derived from config file path, mkdir'd at instance init
- Simplified versioning: ETCP_INIT_REQ_SIZE / ETCP_INIT_RESP_SIZE via sizeof
2026-07-07 17:16:45 +03:00
Evgeny
f5c93266dc
security: hardening flags + control_server fixes (F-001, F-002)
...
- Add --hardened flag to build.sh with FORTIFY, stack protector, PIE, RELRO
- Add --enable-hardening to configure.ac
- F-001: fix %s -> %.32s to prevent stack leak from non-null-terminated network string
- F-002: add pre-check recv_len >= MAX before buf_space computation to prevent size_t underflow
2026-07-07 07:47:37 +03:00
jeka
861d81815f
gui update db and connection
2026-07-06 21:57:52 +03:00
jeka
9dafb4c31e
gui update db and connection
2026-07-06 21:52:46 +03:00
Evgeny
19a4505a03
chat_sync: новый протокол синхронизации чата вместо ChatPropagator
...
- gui_bridge.h/cpp — кросс-поточные асинхронные коллбэки uasync↔GUI
- chat_sync.h/c — протокол синхронизации (INIT_SYNC/RESP, SEND_DATA, PUSH/ACK, SYNC_DONE)
- DbManager полностью переписан: per-channel таблицы msg_<ch> + peers_<ch>,
4 ключа в channels, signature, protocol/rtt в node_addresses, sync-методы
- ChatPropagator удалён, заменён на chat_sync
- db_sync_stub.c — заглушки для сборки chatgui без LMDB-версии db_sync
- db_schema.md актуализирован под новую схему
2026-07-06 16:25:52 +03:00
Evgeny
46f5ff7eca
test_etcp_router: fix flaky keepalive timeout under dummynet congestion
...
Root cause: 80kbps congestion causes 9+ second backpressure during push
phase. No packets reach server → keepalive timeout (2s default) fires
→ ETCP link down → BGP cleanup → etcp_router_conn_restart()
- frees send_q (up to 64 = ROUTER_MAX_SEND_Q_PACKETS lost)
- sends 9-byte restart notification to service handler (conn=NULL)
- resets seq to 0
Fixes:
1. Set keepalive_timeout=60000, keepalive_adaptive=0 in test configs
to prevent spurious timeouts during intentional congestion testing
2. Handle 9-byte restart notification in srv_handler:
when conn==NULL && len==9 → reset g_expected_seq=0 gracefully
2026-07-06 12:28:54 +03:00
Evgeny
7628f77b93
chatgui: integrate UtunNode + NodeConfig, replace MsgClient
...
- Add NodeConfig: simplified INI config manager for embedded uTun node
- X25519 key generation via OpenSSL EVP
- Random node_id generation
- addServer/removeServer, addClient/removeClient API
- Auto-creates config with default server on first run
- Integrate UtunNode into MainWindow:
- Creates NodeConfig in ~/.config/chatgui/node.conf
- Starts embedded uTun node (no TUN, no msg_transport)
- In separate thread with uasync_poll event loop
- Replace MsgClient (TCP IPC) with UtunNode (direct calls):
- ChatPropagator now uses UtunNode for send/recv
- send(uint64_t, QByteArray) replaces sendTo
- messageReceived signal replaces received signal
- MainWindow cleanup: remove MsgClient, add UtunNode+NodeConfig
2026-07-06 11:59:01 +03:00
Evgeny
118ab04788
chatgui: add UtunNode C++ wrapper for embedded uTun node
...
- UtunNode runs uTun instance in a dedicated std::thread
- no TUN, no msg_transport — direct etcp_route_send/recv calls
- Thread-safe cross-thread communication via Qt signals
- C callback (etcp_recv_fn) stores UtunNode* via thread_local
- etcp_router_bind on service ID 0x11 for chat messages
- uasync_poll(100ms) loop runs until stop() called
2026-07-06 11:51:41 +03:00
Evgeny
bfb83f7459
chatgui: add CMake build for libutun (C library linked into GUI)
...
- Add tools/chatgui/libutun/CMakeLists.txt — builds libuasync (from lib/*.c)
and libutun (from src/*.c except utun.c) as static libraries
- All C code compiled as C99, linked into chatgui C++ binary
- Include paths and defs match autotools build
- chatgui CMakeLists.txt: add_subdirectory(libutun), link utun library
- Fix zxing-cpp docs/ directory issue
2026-07-06 11:48:56 +03:00
Evgeny
797c0736a7
headers: add extern "C" guards for C++ interop (chatgui)
...
Added #ifdef __cplusplus / extern "C" { ... } / #endif to ~65 headers
in src/ and lib/, enabling the C library to be linked into C++ code (chatgui).
Fixed packet_dump.h (added missing header guard) and etcp_bbr.h
(#pragma once guard).
2026-07-06 11:44:29 +03:00
Evgeny
8756f561be
build: extract libutun.a from src/ + add db_sync module + etcp API, BBR improvements
...
- Add libutun.a (noinst) containing all src/*.c except utun.c
- utun binary now links libutun.a + libuasync.a
- tests/Makefile.am simplified: all tests link libutun.a instead of
manual .o file lists (removed ~70 lines of boilerplate)
- Add db_sync module: distributed content-addressed DB with LMDB
backend, peer-to-peer sync via etcp_router (svc 0x20)
- etcp API: etcp_send_in_order(), etcp_clear_inflight_queues(),
verify_packet_signature(), BBR getters
- BBR: adaptive threshold (1/4 of pipe-min instead of hardcoded)
- route_bgp/etcp_connect: STCP transport support in NODEINFO
- conn_mgr: NODEINFO_ADDRS doc for nat_type/transport/proto fields
- Cleanup: removed AUDIT_FINDINGS.txt, filelist.txt, nat.txt
2026-07-06 11:42:13 +03:00
jeka
7139969acd
fix: Windows/MSYS2 build compatibility
...
- proxy/icmp_proxy.c: define struct icmp/ip + ICMP constants for _WIN32
- lwip_tcp_priv.h: use #include <winsock2.h> instead of #define htonl/htons
- lwip_tcp.h/c: rename poll field to pollfn (avoid WSAPoll macro conflict)
- tests: guard Unix-only headers with #ifndef _WIN32, skip fork/socketpair tests
2026-07-05 20:57:44 +03:00
Evgeny
59d307f98b
conn_mgr.h: document in ll_queue style; config_parser/utun_instance updates
2026-07-05 19:08:13 +03:00
Evgeny
90ad64a106
stcp: add protocol field to NODEINFO addr structs, TCP support in etcp_connect, stcp traffic test
...
- route_node.h: add NODE_PROTO_UDP/NODE_PROTO_TCP constants, protocol field in NODEINFO_IPV4_ADDR/NODEINFO_IPV6_ADDR
- route_node.c: fill protocol for UDP sockets + TCP servers from config, update dumps
- etcp_connect.c: create stcp_link for TCP-capable addresses, ready/close callbacks, cleanup
- etcp_connections.c: store stcp_server_listen result in instance->stcp_server, fix socket init checks for TCP-only configs
- utun_instance.c: use stcp_link_server_destroy (high-level API) instead of stcp_server_destroy
- tests/test_stcp_traffic.c: 2 nodes via etcp_connect+TCP, 1MB bidirectional traffic (10-1800 byte pkts)
2026-07-05 14:49:35 +03:00
Evgeny
4914348557
etcp_router: транзитные очереди per (src,dst) с backpressure + унификация etcp_send
...
- TRANSIT_QUEUE: отдельная очередь на каждую пару src+dst узлов
- ll_queue с хеш-индексом для быстрого поиска transit-очередей
- backpressure через waiter на send_input_q (threshold=0, один пакет за вызов, round-robin)
- Очередь создаётся при первом пакете который не получается отправить напрямую, удаляется при опустошении
- Унифицирован etcp_send: единый путь queue_data_put(send_input_q) для UDP (normalizer->input) и STCP (tx_queue)
- Убран STCP-ветвления из router_forward_transit/drain_cb
- Исправлено перекрытие ll.data и tq->q в TRANSIT_QUEUE (добавлены явные поля src_node_id/dst_node_id)
- Фикс лика dgram в tx_queue_cb/client_tx_queue_cb (добавлен queue_dgram_free)
- transit_queues живут внутри ETCP_CONN, инициализируются лениво, очищаются в etcp_connection_close (до pn_deinit) и stcp_link_close
2026-07-05 12:57:41 +03:00
Evgeny
55fa5c7759
fix: add retry_timer fallback in tcp_proxy_server for backpressure stall
...
waiter-based backpressure (commit ba14e31e ) could starve HTTPS CONNECT
worker under concurrent 4-worker load — send_q never drained below threshold
fast enough for the waiter to fire before curl timed out (exit=28).
Add retry_timer (500ms, force=1) alongside etcp_router_on_send_ready
waiter: waiter gives instant wake when send_q drains, timer guarantees
delivery via force=1 if waiter hasn't fired in time.
Also improve socks_proxy DEBUG diagnostics in backpressure branches.
2026-07-04 19:32:31 +03:00
Evgeny
0b5a710fe6
etcp_connect + BGP_READY callbacks + router reconnect test
...
- etcp_connect.c: async connect API with EARLY/LATE/BGP_READY callbacks
- etcp_connect.h: declaration (via etcp_api.h)
- connect_deliver: fix to preserve unfired callback nodes
- etcp_set_routing_exchange_state: fires bgp_ready_cbk on TABLE_COMPLETE
- route_bgp: TABLE_COMPLETE handler + route_bgp_send_table_complete
- etcp.c: connections_count tracking, cleanup on close
- test_etcp_router_reconnect: a-b-c topology with b restart (etcp_connect)
- test_etcp_connect: unit tests for async connect API
- etcp_router: inflight/retrans/close improvements
- Various proxy/NAT/router cleanups
2026-07-04 18:51:01 +03:00
Evgeny
f1f533a552
move CLOSE/RST flags from hdr->seq to hdr->flags
...
- ROUTER_SEQ_CLOSE_FLAG (0x80000000) → ROUTER_FLAG_CLOSE (0x02 in flags)
- ROUTER_SEQ_RST_FLAG (0x40000000) → ROUTER_FLAG_RST (0x40 in flags, already existed)
- router_send_one_flags: uint32_t seq_flags → uint8_t flag_bits
- router_send_to: uint32_t seq_flags → uint8_t flag_bits, hdr->seq=0, hdr->flags=flag_bits
- etcp_router_recv_cb: check hdr->flags instead of hdr->seq for CLOSE/RST
2026-07-03 20:38:11 +03:00
Evgeny
03490cfc00
refactor: extract etcp_router_recv_cb into 5 functions + fix send_q threshold
...
- router_verify_signature — Ed25519 signature verification
- router_handle_ack — ACK processing + drain on send_blocked
- router_forward_transit — packet forwarding
- router_check_peer_restart — session restart + RST detection
- router_handle_data_packet — reorder/assembly/dedup
- free_entry helper
- etcp_router_recv_cb: 198 → 42 lines
- ROUTER_MAX_SEND_Q_PACKETS threshold: MAX/2 → MAX-1 (min wait)
2026-07-03 19:27:36 +03:00
Evgeny
ba14e31e09
fix: remove retry_timer, use waiter-based round-robin on send_q for fairness
...
- tcp_proxy_server: drain_cb uses etcp_router_on_send_ready instead of retry_timer
- socks_proxy: on_read_cb + tx_waiter_cb use etcp_router_on_send_ready instead of waiter_register
- Result: FIFO round-robin via ll_queue waiters on send_q, all streams get fair share
- No timers — wakeup is event-driven via queue_data_get → check_waiters
- TCP backpressure: read_queue callback_suspended prevents over-reading
2026-07-03 16:23:56 +03:00
Evgeny
5b850ea5da
test: add profiling (MB/s per file per worker) to socks_http_proxy
2026-07-03 15:54:09 +03:00
Evgeny
2fba5c31c4
fix: backpressure data loss in socks/http proxy + comprehensive test
...
socks_proxy (client side):
- tx_buf buffering on send_data failure in RELAY path, retry in tx_waiter_cb
- process_http_request: version_str null-term fix (memcpy(vlen)+explicit \0)
- process_http_request: assemble hdr+body+extra into heap pkt, atomic send
- socks_proxy_handle_etcp: alloc failure logs write_queue state + byte counters
tcp_proxy_server (exit node):
- read_queue_drain_cb: tx_buf buffering on backpressure, retry_timer (500ms, force=1)
- on_fin_cb: defer FIN when read_queue+tx_buf has pending data (dst_fin_deferred)
- handle_data + drain_cb: per-stream byte counters (sent/recv/relayed/drain_count)
- on_fin_cb/on_error_cb: detailed state logging (counters, queues, buffers)
test_socks_http_proxy:
- 4 workers: socks_ipv4, socks_domain (DNS resolution via SOCKS), http_proxy, https_connect
- 4 file sizes: 1KB, 100KB, 1MB, 10MB — deterministic content, byte-by-byte cmp -s
- HTTPS server with self-signed cert, POST/echo, HEAD, OPTIONS
- 51/51 tests PASS
2026-07-03 14:29:17 +03:00
jeka
4f168c93f6
1
2026-07-03 12:48:25 +03:00
Evgeny
6c938ed2ba
test_etcp_router: dummynet congestion test + timer leak fixes
...
- test_etcp_router: full rewrite with dummynet proxy, congestion cycles
(fill inflight to backpressure, push 20 packets through, release shaper)
bitmap tracking (0 loss, 0 dup, 0 corrupt checks), timing diagnostics
- Makefile.am: add utun-dummynet.o to test_etcp_router LDADD
- conn_mgr: fix cm_exch_probe timer leak (NULL callback → retry_cb),
clean exchange_pending in cm_entry_destroy + conn_mgr_destroy
- utun_instance: add stcp_server_destroy() call in utun_instance_destroy
2026-07-03 12:48:51 +03:00
Evgeny
2cb85cbc3d
socks_proxy: поддержка HTTP-прокси (GET/POST/HEAD/OPTIONS/...) — не только CONNECT
...
process_http_request() теперь обрабатывает любые HTTP-методы:
- CONNECT — туннель как раньше, без изменений
- GET/POST/PUT/HEAD/OPTIONS/... — парсинг абсолютного URL, DNS,
send_connect + пересборка строки с относительным путём + тело DATA
test_socks_http_proxy: +3-й worker (http_proxy через -x без --proxytunnel),
+проверки POST (echo), HEAD (200 OK), OPTIONS (Allow). Все 78 проверок — PASS.
2026-07-02 22:04:37 +03:00
Evgeny
754c08e9c2
etcpmon: widen sockets list by ~100px (15 chars), shift action section
2026-07-02 21:26:21 +03:00
Evgeny
71ccccc2d5
etcpmon: widen sockets list +15px, shift action section right
2026-07-02 21:20:37 +03:00
Evgeny
c6d1ebeeaf
debug: log etcpmon socket_list NAT values in send_socket_list
2026-07-02 20:40:08 +03:00
Evgeny
eea0ed0a48
debug: add NAT category logging to self-detect, init_resp nat update, and NAT_INFO receive paths
2026-07-02 20:31:32 +03:00
Evgeny
0738dcfd5a
fix: self-detection uses interface_addr instead of local_addr (works with 0.0.0.0 bind); don't overwrite nat_addr in handle_init_response_client if NAT already verified
2026-07-02 20:24:32 +03:00
Evgeny
4862c30261
add CFG_SERVER_TYPE_LOCAL (type=local) and UNKNOWN semantics: PRIVATE/LOCAL hidden from nodeinfo, PRIVATE blocks incoming INIT, LOCAL accepts; UNKNOWN treated as PUBLIC; self-detection of PUBLIC IP on incoming INIT; filter LOCAL from NAT checks and connectivity
2026-07-02 19:30:08 +03:00
Evgeny
3c5d82a6ee
add cross-build-win.sh for Windows cross-compilation; gitignore build-win/ build artifacts only
2026-07-02 18:59:20 +03:00
Evgeny
389ef00da6
refactor: split socket meta 'type' into config_type and nat_type — separate config (PUBLIC/NAT/PRIVATE) from detected NAT (EIM/STRICT/DIRECT) across NODEINFO, conn_mgr, route_bgp, route_node, etcpmon; win32 compat fixes (memmem, SHUT_WR, tun test_mode, tcp_proxy guards)
2026-07-02 18:58:34 +03:00
Evgeny
487cb8718e
fix: preserve newlines in config_updater insert/update — no extra newlines on key replacement, add leading nl when inserting at end without trailing nl
2026-07-02 17:37:17 +03:00
Evgeny
42d96f118d
fix: swap queue_entry_free/queue_dgram_free order in 27 places — prevents UAF when dgram_free accesses freed entry
...
uasync: replace raw socket_node* handle with packed index — fixes UAF after socket_array realloc
tcp_io: defer u_free in tcp_conn_destroy via uasync_call_soon — prevents callback-chain UAF
tcp_io: guard read_cb/write_cb with NULL queue checks after deferred destroy
tcp_io: save read_queue to local before queue_data_put + NULL guard after
route_connectivity: linked-list probe_ctx — cancel all parallel probes before nq free
2026-07-02 17:14:38 +03:00
Evgeny
8962f58ea4
uasync: replace raw socket_node pointer with index-based handle — fix UAF after realloc
2026-07-02 17:08:24 +03:00
Evgeny
1f541d6432
tcp_io: save read_queue to local var before queue_data_put, add NULL guard after
2026-07-02 16:38:31 +03:00
Evgeny
e66156eb49
tcp_io: deferred free in tcp_conn_destroy to prevent UAF in callback chain
2026-07-02 16:26:43 +03:00
Evgeny
2cd38988e6
AGENTS: add ASAN build instructions
2026-07-02 15:49:10 +03:00
Evgeny
d58b532741
gitignore: add utun.pid
2026-07-02 15:48:05 +03:00
Evgeny
4716e54069
build: add --asan flag to build.sh, tcp_io: null sock/queues in destroy + guard read_cb/write_cb
2026-07-02 15:47:54 +03:00
Evgeny
aa73e9d8cb
route_connectivity: fix UAF in conn_probe_finish — break ctx->nq on cancel_node, always free ctx in finish
2026-07-02 15:02:11 +03:00
Evgeny
993c265125
control_server: add idle timeout (30s) on client socket + large output queue warning
2026-07-02 14:17:42 +03:00
Evgeny
5ca0bbf9e7
tcp_io: place write_monitor=0 before queue_resume_callback to prevent busy-loop when waiter_defer=1
2026-07-02 13:50:43 +03:00
Evgeny
0ef7ee597c
tcp_io: fix write_cb busy-loop with deferred callback — turn off write_monitor after flush when waiter_defer=1
2026-07-02 13:43:19 +03:00
Evgeny
7d460ca156
fix: ASAN-detected UAFs and buffer overflows across 6 modules
...
- etcp_connections: fix link leak & UAF in etcp_socket_remove — remove_link inside etcp_link_close shifts array, skip NULL set and i++
- stcp_server: fix UAF in stcp_conn_process_recv — defer free via uasync_call_soon after stcp_conn_do_close
- etcp: save pkt_len before queue_data_put to output_queue (callback may free entry synchronously)
- socks_proxy: add pool bounds check before memcpy, UINT16_MAX truncation guard, freed flag
- tcp_proxy_server: reorder cleanup (cancel waiters before tcp_conn_destroy), UINT16_MAX guard
- test_route6_lib: increase nodes[] array to STRESS_NODES + STRESS_OPS
2026-07-02 13:35:22 +03:00
Evgeny
b738b2ff1b
etcp_router: add u_check guards at send_q/recv_q entry points to detect memory corruption
2026-07-02 12:57:21 +03:00
Evgeny
cc5289e37c
etcp_router: don't reset start_sent in reactive restart — prevents START-flag cascade on multi-hop restart detection
2026-07-02 12:28:31 +03:00
Evgeny
0c5f25c96d
etcp_router: fix restart cascade — sync peer_sess_id on auto-create, remove sess_id increment on reactive restart
2026-07-02 12:23:12 +03:00
Evgeny
b53758bdbe
etcp_router: cancel timers in conn_restart, reset last_ack_sent_tb — fix use-after-free SIGSEGV
2026-07-02 11:34:57 +03:00
Evgeny
f5b1c3e789
etcp_router: fix OOB drops after restart — add peer_sync_done to sync rx_seq with first incoming seq
2026-07-02 11:12:14 +03:00
Evgeny
0edd21e335
etcpmon: lift Router to y=1181 (tight to Queues), shrink window to 1400
2026-07-02 10:33:41 +03:00
Evgeny
e0c38676e7
etcpmon: compress Queues h 300->280, lift Router y 1260->1240
2026-07-02 10:31:44 +03:00
Evgeny
fefd2bcc52
etcpmon: fix layout — restore Debug Levels y=485, lift Links to y=710, compress Queues h=300 y=900
2026-07-02 10:29:58 +03:00
Evgeny
8427e18c98
control_server: fix infinite loop in router_conns aggregation — use read-only head->next traversal instead of get/put
2026-07-02 10:23:06 +03:00
Evgeny
7329fa65f1
etcp_router: add congestion counters, fix tx_seq rollback on etcp_send failure, add router metrics to etcpmon GUI
...
- etcp_router.h: add 9 per-conn counters (pkts_sent/err/rcvd, ack_sent/recv/stale, dup/oob/sign_fail)
- etcp_router.c: increment counters at 13 event points; fix tx_seq rollback on etcp_send failure (was causing phantom inflight=256 deadlock); add DEBUG_ERROR on all 5 ignored etcp_send returns; fix router_ack_do_send to update timestamps only on success
- etcpmon_protocol.h: add etcpmon_router_metrics (14 aggregated fields)
- control_server.c: iterate router_conns to fill aggregated router metrics
- etcpmon_gui: new 'Router Congestion' block with queue depths and all counters, Debug Levels shifted down, window 1300->1440
- test_etcp_router_unit: fix test_ack_timer for correct no-BGP-route behavior
2026-07-02 09:49:10 +03:00
Evgeny
de8cce521a
all 51 tests pass: fd=0 protection + clean socks_http_proxy test
...
- socket_compat: never close fd=0
- socks_http_proxy: rewritten cleanly, 2 workers, 25 reqs each, up to 100KB
- uasync_socket_race: dup2-based fd=0 reservation
- u_async: removed DIAG spam
- tcp_io: removed debug fprintf
Result: 51/51 tests pass.
2026-07-02 00:58:47 +03:00
Evgeny
f06ebd2ab4
fix: protect fd 0 from close in socket_close_wrapper + dup2 reserve in tests
...
- socket_close_wrapper: never close sock==0 (prevents fd 0 reuse cycle)
- test_uasync_socket_race: dup2-based fd 0 reservation, pass 800/800
- tcp_io: SOCKET_INVALID before on_error (previous commit)
- Plus earlier fixes: uasync gen counter, ll_queue call_soon_id, pkt_normalizer
Result: test_uasync_socket_race PASSES, 50/51 tests pass
2026-07-02 00:50:36 +03:00
Evgeny
a97a38d867
fix: set tc->sock=SOCKET_INVALID before on_error in handle_error
...
В одном epoll_wait batch три события для fd: EPOLLERR (освобождает tc),
EPOLLIN (read_cb), EPOLLOUT (write_cb). read_cb/write_cb guard проверяет
tc->sock==SOCKET_INVALID, но sock обнулялся ПОСЛЕ on_error.
Перенос sock=SOCKET_INVALID до on_error защищает от use-after-free.
Доказано: без фикса segfault на tcp_io.c:374 (write_cb → tc->connected).
С фиксом тест работает без крашей.
2026-07-02 00:43:37 +03:00
Evgeny
aff3b2d00f
fix: always remove socket from epoll in tcp_conn_handle_error
...
tcp_conn_handle_error гвардил uasync_remove_socket_t по tc->socket_id,
пропуская повторный вызов. В одном epoll_wait batch два события
(EPOLLERR + EPOLLOUT) на один fd: первое делает remove (socket_id=NULL),
второе проходит guard и dispatch'ит write_cb на освобождённом tc.
Фикс: всегда вызывать uasync_remove_socket_t + epoll_ctl(DEL),
независимо от socket_id.
2026-07-02 00:16:05 +03:00
Evgeny
ccdbab95a8
fix: use-after-free in pkt_normalizer + ll_queue waiter cancel + uasync gen counter for epoll fd-reuse
...
- pkt_normalizer: save recvpart->len before queue_data_put (may free synchronously)
- ll_queue: save uasync_call_soon handle in queue_waiter_handle, cancel on free
- uasync: generation counter in epoll data.u64 to skip stale events after fd reuse
- uasync: keep fd_to_index mapping after socket_array_remove for inactive nodes
- test: test_uasync_socket_race — 4 children × 200 iterations, currently flaky
2026-07-01 23:51:31 +03:00
Evgeny
a01e2f0899
tun_enabled config + socks/http stress test (50 reqs, 2 workers)
...
- config_parser: tun_enabled в [global] (по умолчанию yes), не дефолтить
tun_ifname если TUN не нужен
- utun_instance: уважать tun_enabled, чистые дефолты tcp_proxy TUN
- socks_proxy: фикс дэдлока — reply сразу после CONNECT, без ожидания DATA
- utun.conf.sample: документирован tun_enabled, tun_ifname
- test_socks_http_proxy: 50 запросов (SOCKS+HTTP), 2 воркера параллельно,
файлы 1k..100k, сверка через cmp, python http.server + curl
2026-07-01 22:14:37 +03:00
Evgeny
dfdec06a17
build.sh: add missing ./configure step after autoreconf
2026-07-01 21:19:21 +03:00
Evgeny
393a641e18
socks/http proxy client: SOCKS5 + HTTP CONNECT через ETCP
...
Добавлен модуль socks_proxy.c/h — SOCKS5 и HTTP CONNECT proxy на клиенте.
Использует tcp_io для локальных TCP соединений, туннелит трафик через
существующий ETCP-протокол (ETCP_ID_TCP_PROXY/ETCP_ID_TCP_PROXY_CLIENT).
Конфиг [tcp_proxy_client]:
- socks_enabled/socks_addr — включить SOCKS5 сервер на указанном IP:PORT
- http_proxy_enabled/http_proxy_addr — включить HTTP CONNECT сервер
- Можно включать TUN, SOCKS и HTTP прокси одновременно или раздельно
Весь трефик идёт через exit node (tcp_proxy_server), менять exit не пришлось.
2026-07-01 20:33:11 +03:00
Evgeny
53d41d5c62
fix: use-after-free in route table — add route_delete before u_free in route_bgp_update_my_nodeinfo and route_bgp_process_nodeinfo, relax routes_overlap to allow hierarchical routes
...
Root cause: when bgp->local_node was reallocated (changed=1), old route
entries remained with stale v_node_info pointing to freed memory. The freed
memory got reused by a BGP peer's NODEINFO_Q, causing route_lookup to return
wrong node_id (b3b2b1b0afaeadac instead of local), which then failed at
etcp_route_send with 'no BGP route' and dropped packets to 10.23.2.1.
Changes:
- route_node.c: route_delete(old) before u_free + route_insert(new) after alloc
- utun_instance.c: remove duplicate route_insert (now atomic inside function)
- route_bgp.c: route_delete before freeing old peer NODEINFO_Q
- route_lib.c: routes_overlap now rejects only exact prefix+network duplicates
- tests/Makefile.am: add route_lib.o to test_route6_lib
2026-07-01 18:53:23 +03:00
Evgeny
c60ba6eaec
tun: tun_init_nat always uses TUN_MTU_DEFAULT (1500), ignore ETCP mtu from config
2026-07-01 17:57:36 +03:00
Evgeny
c5123e4baf
bgp: prevent sending NODEINFO to self + own NODEINFO early return
...
- route_bgp_process_nodeinfo: skip own node_id early, don't add to bgp->nodes
- broadcast loop: skip sending NODEINFO to connection where peer == node_id
- route_bgp_should_send_to: don't send node's NODEINFO to itself
- tests: lower debug level to ERROR, fix keepalive adaptive config
2026-07-01 17:49:27 +03:00
Evgeny
928c2fe057
tun: always use TUN_MTU_DEFAULT (1500) for TUN interface, ignore ETCP mtu from config
2026-07-01 17:35:53 +03:00
Evgeny
b5b6875bc5
bgp: skip own NODEINFO in route_bgp_process_nodeinfo
...
When own NODEINFO is reflected back from a peer, do not add it
to bgp->nodes. Only update bgp->local_node which is sent separately.
This prevents route duplication and the 'local node in learned list'
inconsistency.
2026-07-01 14:48:38 +03:00
Evgeny
7c953c1929
bgp: add test_bgp_triangle + keepalive_adaptive config option
...
- keepalive_adaptive=0 disables adaptive keepalive period growth,
keeping it fixed at 200ms for faster timeout detection in tests
- test_bgp_triangle: 5-node triangle topology test (6 phases):
validates alternative path recording (fix#1), cascading node
removal on full isolation, and full recovery
- config generation via utun_instance_create_from_str() with
pre-generated keys — no temp files needed
2026-07-01 14:22:59 +03:00
Evgeny
1c09ad2e5a
bgp: fix node removal when alternative paths exist
...
- route_bgp_process_nodeinfo: record alternative paths even when NODEINFO
version hasn't changed (fixes nodes disappearing on link down despite
having other active links)
- route_bgp_process_withdraw: only remove node when all paths gone (ret==1)
- route_bgp_remove_conn: broadcast withdraw for each removed node with
correct wd_source
2026-07-01 13:37:35 +03:00
jjj
3284dffaaf
1
2026-07-01 13:02:32 +03:00
Evgeny
c893285d71
action popup: use SW_RESTORE + SetForegroundWindow to bring hidden window to front
2026-07-01 12:46:19 +03:00
Evgeny
75028f278a
action popup: re-show window on every action result if it was hidden
2026-07-01 12:42:30 +03:00
Evgeny
7fc1b5419f
action popup: use ClearType Consolas 10pt font instead of ANSI_FIXED_FONT
2026-07-01 12:27:32 +03:00
Evgeny
dee9889423
action popup: convert \n -> \r\n for Windows EDIT control line breaks
2026-07-01 12:24:48 +03:00
Evgeny
35871891db
action nodes: send BGP node dump as text response to GUI, display in popup
...
- route_node_format_all(): format all BGP nodes to snprintf buffer
- control_server: 'nodes' action sends ETCPMON_RSP_ACTION_RESULT (0x89) with text
- etcpmon_protocol.h: new response type + struct, increase MAX_MSG_SIZE to 32K
- etcpmon_client: on_action_result callback, send_action via send_request with seq_id
- etcpmon_gui: ETCPMonActionResult popup window class with EDIT multiline,
on_action_result creates popup (same size as main) or appends text + scrolls
2026-07-01 12:19:50 +03:00
Evgeny
373e4b33c7
route_node_dump_all: dump all BGP nodes to log via debug INFO
...
Add route_node_dump_all() in route_node.c that walks bgp->nodes list
and outputs per-node info: node_id, name, version, pubkeys, IPv4/IPv6
addrs/sockets/subnets, paths with hop list, connectivity state, conn_mgr.
Wire 'nodes' action in control_server to call this function.
2026-06-30 23:33:45 +03:00
Evgeny
090e2f28e4
1
2026-06-30 19:18:03 +03:00
Evgeny
a2c7f1e6cb
fix etcp: infinite loop in feed_dgram_to_asm due to uint16_t overflow in new_cap doubling
2026-06-30 16:21:43 +03:00
Evgeny
21da640ebe
route_bgp: find_conn_for_node prefers live links_up path, fallback to best any
2026-06-30 14:59:26 +03:00
Evgeny
80177c9b3e
fix: test_conn_mgr flakiness — wait for BGP nodeinfo, not just INIT links
...
Root cause: test1 used lks() (INIT links up) but conn_mgr needs BGP NODEINFO.
Nodeinfo arrives after INIT, so test1 must wait for it.
Also made result volatile to prevent loop optimization.
2026-06-30 00:34:06 +03:00
Evgeny
8f13f0ec4d
refactor: extract handle_ping, handle_pong, send_init_response, handle_init_response_client from read callback
...
Reduce etcp_connections_read_callback_socket from ~600 to ~300 lines.
All 4 helpers are static file-scope functions, no logic changes.
2026-06-30 00:16:34 +03:00
Evgeny
5420e414ce
fix: DIRECT detection read srс_ipv4/src_port before INIT RESPONSE overwrites the buffer
...
Both req (INIT_REQUEST) and resp (INIT_RESPONSE) point to pkt->data.
resp->peer_port at offset 23-24 overwrites req->src_ipv4[0..1] at same offset.
Save src_ipv4/src_port before building the response.
2026-06-29 23:58:46 +03:00
Evgeny
69112ffde1
feat: NAT_DIRECT detection during INIT handshake + refactor init packet structs
...
- Extract ETCP_INIT_REQUEST_PKT / ETCP_INIT_RESPONSE_PKT named structs
- Replace anonymous structs and manual offset parsing with typed struct access
- Add src_ipv4/src_port fields (V2) to INIT REQUEST for DIRECT detection
- Server compares reported client addr with observed src; match + public IP → NAT_TYPE_DIRECT
- Skip STUN NAT check for DIRECT links
- route_bgp: handle NAT_TYPE_DIRECT → NAT_VERIFIED_DIRECT in handle_nat_info
2026-06-29 23:15:38 +03:00
Evgeny
89d675f15d
fix: drain input_send_q and input_wait_ack at end of etcp_conn_reset to ensure inflight queues are cleared on remote node restart
2026-06-29 20:17:53 +03:00
Evgeny
914f252b12
fix: remove send_blocked_inflight — per-link inflight gate was blocking input_send_q and ACK send, causing bidirectional deadlock
2026-06-29 20:04:20 +03:00
Evgeny
a7b20f268f
feat: conn_mgr, dummynet block-addr, indirect routing, alien nodes, nodeinfo refactor
2026-06-29 20:01:40 +03:00
Evgeny
c0207ad41d
fix: move nodeinfo_dyn_size declaration to route_bgp.h
2026-06-25 09:47:27 +03:00
Evgeny
8051dfe4e5
zxing-cpp: strip to core library only (remove tests/wrappers/examples/docs); .gitignore: fix /core to allow zxing-cpp/core/ dir
2026-06-25 09:37:45 +03:00
Evgeny
22c24d135e
chatgui: invite link dialogs, zxing-cpp QR code, crypto transport, channel improvements; msg_transport: chat protocol support
2026-06-25 09:29:44 +03:00
Evgeny
d8c8c1c5b0
control_server: node subscription protocol with output queue, push notifications on routing changes
2026-06-25 09:28:07 +03:00
Evgeny
231081dd2f
docs: add chatgui animated emoji system and tdesktop-dev reference to AGENTS.md
2026-06-24 13:50:10 +03:00
Evgeny
62b3695a77
chatgui: rlottie animated emoji with hover-to-animate, drag-to-select
...
- Add LottieIcon class (TGS gzip decompress + rlottie C API render)
- Add AnimTimer singleton (33ms tick, activate/deactivate refcount)
- Add EmojiButton (hover-triggered animation in emoji picker)
- Add AnimatedEmoji support to EmojiData (5 TGS mappings)
- MessageDelegate: QTextLayout-based animated emoji overlay (text + reactions)
- ChatView: drag-to-select (click deselects, 5px drag starts selection)
- ChatView: hoveredIndexChanged signal for hover-triggered animations
- MessageList: wire AnimTimer tick to viewport update, hover → activate
- CMake: AUTORCC, rlottie, zlib dependencies
- Add 5 TGS animations as Qt resources
2026-06-24 13:45:25 +03:00
Evgeny
0e2b0e28d8
tools/chatgui: Makefile cmake wrapper, author name in bubble, emoji panel height ~1/1.7
2026-06-23 14:39:09 +03:00
Evgeny
e50ca9978e
tools/chatgui: input bar with emoji panel, custom tab bar, Ctrl+Enter multiline, scroll fixes
2026-06-23 00:17:07 +03:00
Evgeny
b667d6f352
tools/chatgui: Qt5 GUI chat app stub with tray, channel list, message bubbles
2026-06-22 22:48:27 +03:00
Evgeny
6717c863e7
etcp_router: Ed25519 digital signature for service messages
...
- Add ed25519_public_key[32] to NODEINFO struct for pubkey distribution
- Add ed25519_public_key[32] to ROUTE_BGP (derived from X25519 privkey at init)
- Add ROUTER_FLAG_SIGNED (0x08) to SVC_ROUTE_HDR flags byte
- router_send_one_flags: when is_signed, sign [hdr][payload] and append 64-byte sig
- etcp_router_recv_cb: verify Ed25519 signature when ROUTER_FLAG_SIGNED set
- New API: etcp_router_conn_send_signed()
- Drop signed packets if sender node not in routing table or no Ed25519 key
- 5 unit tests in test_etcp_router_unit.c covering OK/tampered/unknown/no-key/short
2026-06-22 15:53:24 +03:00
Evgeny
2bbdf8195f
fix: TASSERT return value in test_etcp_stcp.c and test_stcp_link.c
2026-06-18 22:11:25 +03:00
Evgeny
73f707ef9b
crypto: migrate ECDH(secp256r1) to X25519, drop TinyCrypt
...
- SC_PUBKEY_SIZE: 64 -> 32 bytes, SC_PUBKEY_ENC_SIZE: 72 -> 40
- sc_set_peer_public_key uses EVP_PKEY_derive with X25519
- sc_generate_keypair via EVP_PKEY_keygen(EVP_PKEY_X25519)
- sc_compute_public_key_from_private via EVP_PKEY_new_raw_private_key
- sc_validate_key: check non-zero (X25519 has no invalid keys)
- sc_obfuscate_pubkey: XOR now 32 bytes
- Remove all TinyCrypt code (~860 lines), always use OpenSSL
- Remove TinyCrypt from build system, drop test_crypto/test_ecc_encrypt
- Update all test keys (128 hex -> 64 hex)
- Fix bbr_integration.c split-line pubkeys
2026-06-17 21:28:07 +03:00
Evgeny
34683f0500
fix: update last_recv_local_time on INIT packet receive to prevent spurious keepalive timeout
...
last_recv_local_time was not set in the server INIT processing path,
causing the keepalive timer to see a stale timestamp and trigger a
false link-down → route_bgp_remove_conn() right after reconnect.
Routes could be deleted before the first normal packet from the
client updated the timestamp via process_decrypted.
2026-06-17 15:05:20 +03:00
Evgeny
150e9977df
stcp: unified transport — etcp_send/bind over TCP via stcp_link
...
- stcp_link.h/c: manage TCP connections through STCP protocol
stcp_server_listen, stcp_link_connect/send/close
rx dispatch goes directly through inst->api_bindings (single table)
- etcp_api.c: etcp_send checks conn->transport_link for TCP path
etcp_bind stores only in api_bindings (no duplication)
- etcp_connections.c: init_sockets creates stcp_server for TCP
init_connections creates stcp_link_connect for TCP clients
tcp_server_on_link creates minimal ETCP_CONN + fires callbacks
- etcp.h: ETCP_CONN.transport_link field (NULL for UDP, set for TCP)
- config_parser: CFG_SERVER.transport field, parsing transport=tcp|udp
- utun_instance.h: struct stcp_server*
- Tests: test_stcp_link (handshake, wrong key)
test_etcp_stcp (etcp_send/bind over TCP)
- Renamed: transport.h/c → stcp_link.h/c (cleaner, no bindings table)
- 46/46 tests pass
2026-06-16 01:19:58 +03:00
Evgeny
f913bdf351
stcp: streaming TCP module + stream cipher + comprehensive tests
...
- secure_channel: add sc_stream_state + sc_stream_init/sc_stream_xor/sc_stream_cleanup
AES-128-CTR streaming cipher for incremental encrypt/decrypt
- stcp.h/c: shared stcp_conn lifecycle, set_on_close, rx/tx queue setup
- stcp_server: listen/accept, handshake (obfuscated pubkey + ECDH + stream), DATA phase
- stcp_client: connect, handshake, DATA phase
- Protocol: key_block(72) + enc(data+crc) + padding for handshake
size(2 LE) + enc(data+crc) for data messages
- Tests: test_stream_cipher (AES-CTR correctness)
test_stcp (6 cases: sizes 0..65535, 200 msgs, wrong key,
close detection, multi-client, interleaved send/recv)
- Fix: 0-length message handling in tx_queue callbacks
2026-06-14 10:00:02 +03:00
Evgeny
0dd942be63
fix: стабилизация тестов test_tcp_io и test_bbr_integration
...
- test_bbr_integration: bbr_max_cwnd=100KB (16×BDP) — устранён overshoot очереди
- test_tcp_io: адаптирован под EPOLLHUP на socketpair (send до poll, error_cb вместо fin)
- tcp_io: расширенная диагностика error_cb с состоянием сокета
2026-06-11 13:16:48 +03:00
Evgeny
474bb8bd6b
bbdr: rename BBR log fields, add mode transition logs, configurable max inflight
2026-06-11 11:06:31 +03:00
Evgeny
3419ff3a85
debug: single source of truth for category names, GUI dynamic labels
...
- debug_get_category_name(): replace switch/case with table lookup in g_debug_categories[]
- etcpmon_gui: remove hardcoded cat_names[], create labels/radios dynamically from server CSV
2026-06-11 10:16:14 +03:00
Evgeny
6b2b0f1360
etcp: per-link acked bytes/packets counters + BBR debug logging
...
- Add acked_bytes/acked_packets to struct ETCP_LINK (init, reset, increment per ACK)
- Add DEBUG_CATEGORY_BBR (23) for BBR-specific debug output
- Add BBR input/output DEBUG_DEBUG around bbr_main call in etcp_ack_recv
- Add "bbr" category name to debug_config and etcpmon GUI
2026-06-11 09:55:30 +03:00
Evgeny
20e81e493d
proxy recv_cb: silent drop всех известных subcmd при отсутствии conn, не WARN
2026-06-10 13:32:03 +03:00
Evgeny
23732039de
SOCKET сообщения жизненного цикла: INFO→DEBUG
2026-06-10 11:18:55 +03:00
Evgeny
f883c8da75
Убрал безусловный DEBUG_ERROR в memory_pool_destroy
2026-06-10 11:15:02 +03:00
Evgeny
4211e32f51
tcp_io: единый обработчик ошибок tcp_conn_handle_error
...
- Вынесена общая логика обработки фатальных ошибок сокета
- Обработчик: close сокета, обнуление коллбэков, аварийный drain, вызов on_error
- Устранён use-after-free: пулы освобождаются до вызова on_error
- flush_write_buf возвращает int (0=ok, 1=error/tc destroyed)
- Все ошибки аллокации write_buf ведут к вызову on_error (ENOMEM)
- Обновлён header: документация в актуальное состояние
2026-06-10 10:38:22 +03:00
Evgeny
7c840c8cfd
inflight fix
2026-06-10 01:01:32 +03:00
Evgeny
1a1e305b6b
fix: etcp_connection_close — закрывать линки до очистки очередей (SIGSEGV на input_send_q=NULL)
2026-06-09 22:52:44 +03:00
Evgeny
974c6770e0
fix: prevent ack_q unbounded growth on duplicate packets
...
Check queue_find_data_by_index(ack_q) before creating a new ACK_PACKET
in ETCP_SECTION_PAYLOAD handler. Previously every duplicate packet
created a new entry in ack_q, and with links blocked (inf_block) the
queue grew without bounds.
2026-06-09 22:49:27 +03:00
Evgeny
075c4f4583
memory_pool: name field — идентификация пула в диагностике коррапшна
2026-06-09 22:20:25 +03:00
Evgeny
9e133699bf
log_dump: level+category, memory_pool: дамп user_data через log_dump при коррапшне
2026-06-09 22:20:06 +03:00
Evgeny
81cad40e3b
memory_pool: усиленная канарейка 4B + хранение alloc_loc для диагностики
2026-06-09 22:19:47 +03:00
Evgeny
baca018387
proxy/udp: buf 65536→1600 на стеке, UDP не нужен гигантский буфер
2026-06-09 22:19:30 +03:00
Evgeny
48a4f182aa
ll_queue: inline→static inline queue_waiter_call — fix link error with -Og
2026-06-09 22:18:29 +03:00
Evgeny
7c456a1652
proxy: bounds check data_len перед memcpy в handle_data — fix buffer overflow
2026-06-09 22:18:12 +03:00
Evgeny
a0ea19acb8
fix: diag_timer_cb UAF — обнуляем rc->diag_timer до раннего возврата
2026-06-09 21:50:04 +03:00
Evgeny
1f34629753
Merge commit 'HEAD@{1}' into bbr
...
# Conflicts:
# src/etcp.c
# src/etcp_connections.c
2026-06-09 19:48:52 +03:00
Evgeny
9a3eb1ce80
fix: reconnect test — clear_queue callback deadlock + conn_ok timing
...
- etcp_conn_reset: queue_resume_callback after clear_queue (input_queue,
input_send_q, input_wait_ack) to prevent suspended callback deadlock
- is_connection_established: check conn->initialized (reliable across
reinit) instead of link->initialized (never cleared on reinit)
- test: force etcp_conn_reinit after server recreation so conn_ok
waits for fresh INIT handshake
- test: guard send_packets() with is_connection_established in reconnect
phases to avoid sending data while conn is down
2026-06-09 19:35:06 +03:00
Evgeny
5982b011b4
etcp: restore etcp_link_update_inflight_lim + state machine fixes + diagnostics
...
- etcp_link_update_inflight_lim: self-contained method with clamping,
send_blocked_inflight check, loadbalancer_link_ready on cwnd increase
- etcp_conn_on_inflight_lim_changed: recalc optimal_inflight + resume input
- etcp_ack_recv: use etcp_link_update_inflight_lim instead of manual set
- etcp_request_pkt: fix line 928 check old link (inf_pkt->last_link) not new
- etcp_link_close: recalc optimal_inflight on link removal (both branches)
- etcp_socket_remove: fix dangling pointer loop (nullify after close)
- uasync_print_resources: show timer names, remain time, deleted entries
- diagnostics in utun_instance_destroy and test_etcp_reconnect
2026-06-09 16:40:37 +03:00
Evgeny
e55c4ec7ce
bugfixes
2026-06-09 13:18:42 +03:00
Evgeny
dd1b9f2680
etcp: dedup ack_q — не добавлять дубликаты ACK для одного seq
2026-06-07 21:01:44 +03:00
Evgeny
52f32da3f1
etcp: BBR callback для обновления inflight_lim_bytes + пересчёт optimal_inflight
...
- BBR: добавлен callback on_cwnd_update(ctx, new_cwnd) в struct bbr, вызывается при изменении cwnd
- etcp_link_update_inflight_lim() — атомарно обновляет inflight_lim_bytes линка и пересчитывает optimal_inflight (сумма по всем линкам)
- BBR теперь сам обновляет лимиты через callback, ручное присваивание в etcp_ack_recv() удалено
- is_server в config_parser.c: печать адресов через sockaddr_storage_to_str (поддержка IPv4/IPv6)
- utun_instance.c: local_sockaddr_equal() — добавлено сравнение AF_INET6
- Убраны отладочные memory_pool_is_freed
2026-06-07 12:17:18 +03:00
Evgeny
defb70f63a
1
2026-06-06 00:22:21 +03:00
Evgeny
40c7a5b487
1
2026-06-05 22:34:49 +03:00
Evgeny
e81299a727
1
2026-06-05 21:43:26 +03:00
Evgeny
3217f744f9
memory_pool_is_freed + стратегические проверки на висячие указатели
...
memory_pool: memory_pool_is_freed(pool,obj) — поиск obj в free-списке
tw_pcbs (3 места): !ctx→halt и is_freed→halt в начале итерации
— ловит висячий PCB до re-alloc и после re-alloc
etcp: is_freed→halt перед etcp_conn_input (caller + callee)
— ловит pkt освобождённый до входа
tcp_alloc: убран старый скан tw_pcbs (заменён на is_freed)
все dangling проверки — halt (while(1)) вместо break/return
2026-06-05 20:45:42 +03:00
Evgeny
24a5de9398
memory_pool: канарейка (0xAA) + счётчик double-free; lwip_tcp: убраны TCP_TW_MAX/tw_iter, добавлен хук в tcp_alloc
...
memory_pool: +2 байта за объектом — canary 0xAA для детекции buffer overflow,
counter для детекции double-free. При free проверяется canary и counter==0,
при alloc выставляется новый counter.
lwip_tcp: убраны TCP_TW_MAX и счётчики tw_iter (толку нет, краш на 2й итерации).
Оставлены: !pcb->ctx (dangling pointer), self-loop checks, next_owner диагностика.
Добавлена проверка в tcp_alloc: если новый PCB найден в tw_pcbs → halt.
2026-06-05 20:01:28 +03:00
Evgeny
a09c647dfd
lwip_tcp: детект и защита от self-loop (pcb->next==pcb) в tw_pcbs
...
tcp_slowtmr: после tcp_free проверка pcb==pcb2 → ctx->tw_pcbs=NULL, break
tcp_kill_timewait: проверка inactive->next==inactive → ctx->tw_pcbs=NULL, tcp_free
lwip_tcp_input: проверка pcb->next==pcb перед tcp_timewait_input → tcp_abort
все 3 лога выводят next_owner для диагностики источника self-ссылки
2026-06-05 18:15:43 +03:00
Evgeny
11002bcb57
lwip_tcp: защита от зацикливания tw_pcbs + next_owner диагностика + таймауты + фикс RTO
...
- TCP_TW_MAX=256: циклозащита в for/while циклах tw_pcbs (input, slowtmr, kill_timewait)
+ TCP_RMV макрос тоже защищён от бесконечного поиска
- next_owner в struct tcp_pcb/tcp_pcb_listen: отслеживает кто правил pcb->next
(REG=1, RMV=2, SLOWTMR=3, INPUT=4). memset при alloc обнуляет
- таймауты: FIN_WAIT 20s→6s, SYN_RCVD 20s→6s, MSL 60s→25s (TIME_WAIT=50s)
- tcp_alloc: RTO из ctx->rto_min_ms вместо хардкода 3000
- handle_fin: pcb_state в лог
2026-06-05 17:19:50 +03:00
Evgeny
7a35f4c386
proxy client: привести lwIP TCP close к лучшим практикам
...
handle_close: tcp_abort→tcp_close + полное обнуление коллбэков (graceful FIN вместо RST)
handle_error: отделён от handle_close, свой cleanup с tcp_abort (RST — нештатная ситуация)
poll_cb/destroy: полное обнуление коллбэков перед tcp_abort (tcp_arg/recv/sent/err/poll)
handle_fin: исправлен лог (shutdown write, не read)
tx_waiter_cb: проверка pc->pcb перед tcp_recved
2026-06-05 15:33:17 +03:00
Evgeny
483bf440fb
tcp_proxy_client: skip tcp_shutdown on TIME_WAIT/CLOSED pcb
...
handle_fin вызывает tcp_shutdown(pcb,0,1) на любом PCB, включая TIME_WAIT.
При active close (FIN_WAIT_1→FIN_WAIT_2→TIME_WAIT) PCB уже в tw_pcbs,
tcp_shutdown на нём портит состояние → tw_pcbs зацикливается → lwip_tcp_input зависает.
Проверка state != TIME_WAIT && != CLOSED перед вызовом.
2026-06-05 12:45:51 +03:00
Evgeny
6f1916b6b2
tcp_proxy_client: tcp_close→tcp_abort, fix tw_pcbs loop
...
При CLOSE и FIN от сервера в обратном порядке (FIN relay + CLOSE от двух FIN),
клиент сначала обрабатывает CLOSE (tcp_close → TIME_WAIT), потом FIN
(tcp_shutdown на TIME_WAIT pcb), что портит tw_pcbs список — pcb->next
замыкается на себя, lwip_tcp_input зависает в бесконечном цикле.
tcp_abort шлёт RST и удаляет pcb сразу, без TIME_WAIT.
2026-06-05 12:25:46 +03:00
Evgeny
01dbd76834
1
2026-06-05 00:17:17 +03:00
Evgeny
6ee030ca7c
1
2026-06-04 23:07:34 +03:00
Evgeny
3ae4988353
1
2026-06-04 22:39:02 +03:00
Evgeny
57281a975e
1
2026-06-04 21:59:40 +03:00
Evgeny
b953a6daf0
tcp_io: FIN/close через write_queue, отладка всех этапов закрытия
...
- tcp_io.h/c: push_fin/push_close через очередь отправки
Кодирование: dgram=NULL→close, len=0+dgram!=NULL→FIN (sentinel)
FIN: shutdown(SHUT_WR), стоп чтения, on_fin_sent
CLOSE: close сокета, on_closed
read_cb: отбрасывание входящих после fin_sent
guard wq_fetch: error||closed (не fin)
- tcp_proxy_server: адаптация handle_fin→push_fin, handle_close→push_close
read_queue_drain_cb: discard при fin_sent
DEBUG_INFO на всех точках закрытия
- tcp_proxy_client: send_fin, handle_fin — DEBUG_INFO
- test_tcp_io: +6 тестов (push_fin, push_close, ordering, double-push, fin+close)
2026-06-04 19:20:20 +03:00
Evgeny
612b6bf1bf
tcp_io: add DEBUG_TRACE for POLLOUT/busy-loop diagnostics
2026-06-04 16:37:07 +03:00
Evgeny
58e45e9232
proxy: implement CLOSE and FIN relay protocol
...
- CLOSE: admin connection teardown (drain queues, shutdown, free)
Server: handle_close — pause read, drain rq (discard), drain wq to socket, shutdown, free
Client: handle_close — drain to_lwip/tx_buf (discard), tcp_close pcb, free
ERROR calls handle_close on both sides
- FIN: transparent relay event through ETCP (TCP_PROXY_SUBCMD_FIN=0x06)
Server: on_fin_cb relays FIN_MSG to client, on_flushed_cb relays FIN_MSG
Server: handle_fin relays FIN to remote socket via shutdown(SHUT_WR)
Client: recv_cb relays FIN_MSG to exit, tx_waiter_cb relays FIN_MSG
Client: handle_fin relays FIN to local TCP via tcp_shutdown(pcb,0,1)
- new tcp_conn_pause_read() in tcp_io (EPOLLIN off + cancel waiter)
- poll_cb simplified: remove tun_closed&&rem_closed wait block
- conn_free drains close_pending before free on both sides
- handle_data WARN→INFO for drops after close
- tcp_shutdown declared in lwip_tcp.h
2026-06-04 16:02:32 +03:00
Evgeny
f8111f7f03
tcp_proxy_client: move PROXY FEED per-packet log from DEBUG to TRACE
2026-06-04 12:26:27 +03:00
Evgeny
859290c202
etcp_router: move per-packet ETCP_SEND/ETCP_RECV/ACK_SEND/queued logs from DEBUG to TRACE
2026-06-04 12:24:15 +03:00
Evgeny
cfd885de7c
tcp_proxy_server: move per-packet SOCK:RECV log from INFO to TRACE
2026-06-04 12:20:10 +03:00
Evgeny
8d0c40195b
tcp proxy/lwip: move per-packet traffic logs from INFO/ERROR to TRACE
2026-06-04 12:13:50 +03:00
Evgeny
e765d62e43
etcp_route_send: add force parameter to bypass send_q limit for control messages
...
CLOSE/ERROR/CONNECT and routing messages use force=1 to never be
dropped by backpressure. Regular DATA uses force=0 (default).
2026-06-04 12:01:55 +03:00
Evgeny
c56ec0b0ed
uasync: добавить отладку poll→fd/rev, timer→имя при разрешении событий
2026-06-04 01:57:10 +03:00
Evgeny
4dfc0ce947
fix: correct INIT padding — include SC_NONCE_SIZE + SC_CRC32_SIZE in formula
...
REQUEST: s_max = mtu - SC_NONCE_SIZE - 3 - SC_CRC32_SIZE - SC_TAG_SIZE
- SC_PUBKEY_ENC_SIZE + UDP_SC_HDR_SIZE (= mtu-78, was mtu-61)
RESPONSE: s_max = mtu (noencrypt=0, simple cap)
Removed debug logs.
2026-06-04 01:31:39 +03:00
Evgeny
b8da0db1ab
debug: add final offset/to_add/data_len log before encrypt_send
...
INIT_REQ/INIT_RESP now log offset, s, to_add, data_len, noencrypt_len
right before etcp_encrypt_send to trace why enc_buf exceeds mtu.
2026-06-04 01:17:32 +03:00
Evgeny
30acde7b18
debug: add ERROR-level logs for INIT padding calc (req+resp)
...
Shows mtu, s_rand, s_max, offset/xoffset, and whether capped.
RESP: removed old hardcoded 1472+26 cap, replaced by formula.
Both paths use consistent formula based on #defines.
2026-06-04 01:13:15 +03:00
Evgeny
c0b6e5769e
fix: correct INIT padding cap using defines instead of hardcoded 19
...
Formula: s_max = mtu - 3 - SC_TAG_SIZE + UDP_SC_HDR_SIZE - SC_PUBKEY_ENC_SIZE
For mtu=1460: 1460 - 3 - 16 + 30 - 72 = 1399 (was 1390, off by 9)
2026-06-04 00:57:19 +03:00
Evgeny
3c036ecc4c
fix: restore conn_free cleanup — tcp_conn_destroy, timers, waiters were lost
...
Previous edit accidentally removed tcp_conn_destroy, timer cancellations,
and etcp_router_cancel_send_ready from conn_free. Without tcp_conn_destroy
the socket was never removed from uasync, causing repeated EPOLLERR →
repeated conn_free on freed memory → double-free crash.
Added debug logs for freed guard entry and u_free.
2026-06-04 00:44:51 +03:00
Evgeny
cb764a1143
fix: INIT padding cap computed from actual link MTU, not hardcoded 1472
...
Hardcoded 1472-46 cap exceeded link MTU=1460, causing 'packet too long'
error on INIT handshake. Use link->mtu - UDP_HDR_SIZE - offset - 19
instead of fixed 1472.
2026-06-04 00:33:29 +03:00
Evgeny
0c8de3db84
fix: double-free in tcp_proxy_server_conn_free via freed flag
...
error_cb can fire twice for the same fd in one epoll batch,
or conn_free called from multiple callbacks during restart/shutdown.
freed flag makes conn_free idempotent.
2026-06-04 00:13:28 +03:00
Evgeny
4ba790b921
fix: SIGSEGV in tcp_proxy_client_destroy — abort pcbs before lwip destroy
...
Move lwip_tcp_destroy after pcb cleanup to avoid aborting pcbs
with already-freed context. Add state != CLOSED guard to tcp_abort.
2026-06-04 00:02:47 +03:00
Evgeny
e0378ebf1d
refactor: remove consumer_ack, isolate proxy from router internals
...
etcp_router:
- removed consumer_ack field, consumer_ack function, consumer_ack logic
- ACK always auto-sent via router_schedule_ack (10ms throttle)
- conn_restart: local-only reset, no remote CLOSE, unified close notification (len=9)
- START detection: only when rx_seq>0 (first conn doesn't trigger)
- new API: etcp_router_on_send_ready / cancel_send_ready for send_q backpressure
tcp_proxy_server:
- removed write_on_get_cb, queue_set_on_get, rconn->consumer_ack
- removed etcp_router_conn_get, direct send_q access
- uses etcp_router_on_send_ready for backpressure
tcp_proxy_client:
- removed consumer_ack call
- unified conn=NULL handler (len=9 = close/restart with node_id)
protocol: close/restart notification now len=9 (svc_id + node_id), no RESTART subcmd
2026-06-03 23:46:11 +03:00
Evgeny
d784b2bfbe
fix: use-after-free in tcp_conn_destroy + throttle consumer_ack
...
tcp_conn_destroy: set read/write queue callbacks to NULL before
queue_free to stop deferred autofetch (drain_cb on freed rc).
write_on_get_cb: throttle consumer_ack to every 8th write_queue
dequeue instead of every single one (was 30+ ACK/sec).
ack_batch field in tcp_proxy_server_conn.
2026-06-03 22:47:23 +03:00
Evgeny
0449a5fd9d
test: 5 new router unit tests — RST, restart, sess_id
...
test_rst_flag: inject ROUTER_FLAG_RST → rconn destroyed, service notified
test_client_restart: pump random data → inject START → restart detected
test_sess_id_change: pump sess_id=0 → inject sess_id=1+START → detected
test_sess_id_wrap: pump sess_id=3, peer_sess_id=3 → inject sess_id=0+START → wrap detected
test_server_reinit: reinit router → new rconn start_sent=0, sess_id=0
inject() extended with uint8_t flags parameter.
pump_data helper for random data injection.
test_handler tracks g_notify_count for close/restart notifications.
fix: etcp_router_recv_cb — return after RST flag to avoid NULL rconn deref
2026-06-03 21:56:11 +03:00
Evgeny
d0029178e7
feat: 1-byte flags in SVC_ROUTE_HDR — START, RST, 2-bit sess_id
...
SVC_ROUTE_HDR: +uint8_t flags (23 bytes total).
bit7=START (0x80) — first data packet of new session
bit6=RST (0x40) — sequence violation detected
bit5-4=sess_id (0-3) — cyclically incremented on restart
router_send_one_flags: sets START+sess_id on first data packet.
router_send_ack: sets sess_id only (no START for ACK).
etcp_router_recv_cb: detects restart via sess_id change or START flag.
Old seq=0 heuristic replaced with explicit flags.
etcp_router_conn_get: init sess_id=0, peer_sess_id=0, start_sent=0.
etcp_router_conn_restart: increment sess_id before closing rconn.
2026-06-03 21:20:05 +03:00
Evgeny
ca7f6c0d01
feat: peer restart detection + etcp_router_conn_restart with service notification
...
etcp_router: new etcp_router_conn_restart(inst, node_id, svc_id) — closes
all rconns for the peer, notifies service via cb(NULL, entry) with
node_id, resets seq state.
seq=0 detection in etcp_router_recv_cb: when rx_seq >= 256 (MAX_INFLIGHT)
and a data packet arrives with seq=0, detect peer restart and reset rconn.
tcp_proxy_client: handle TCP_PROXY_SUBCMD_RESTART — clear all client conns
and server conns for the restarted peer.
Threshold prevents false positives on in-window seq=0 duplicates.
2026-06-03 20:45:42 +03:00
Evgeny
609be50b8f
feat: ETCP trace logging — ETCP_SEND, ETCP_RECV, SEND_Q_DRAIN, SEND_Q_ACKED, CONSUMER_ACK, ACK_SEND
...
Six key log points at DEBUG level to trace the full ACK chain:
ETCP_SEND — server sends direction A data
ETCP_RECV — received any svc_route packet
SEND_Q_DRAIN — send_q drained after client ACK
SEND_Q_ACKED — server received client ACK (direction A)
CONSUMER_ACK — server sends consumer ACK (direction B)
ACK_SEND — low-level ACK packet sent
2026-06-03 19:27:31 +03:00
Evgeny
e4e5ed71f8
fix: etcp_router_consumer_ack — use router_ack_do_send instead of schedule
...
router_schedule_ack skips when rx_seq==last_sent_ack_seq (no-op),
so the first consumer_ack call after setting consumer_ack=1 was
silently ignored. Client never got ACK → send_q stuck at 256.
router_ack_do_send always sends the ACK unconditionally.
2026-06-03 19:20:06 +03:00
Evgeny
4716641dff
fix: initial consumer_ack in handle_connect + diag: send_q, BACKPRESSURE, ACK logs
...
handle_connect: send first consumer_ack after setting consumer_ack=1
to unblock client router — fixes rq=32/send_q=256 deadlock.
diag_timer_cb: added send_q=N to DIAG line for instant root cause visibility.
read_queue_drain_cb: SOCK:BACKPRESSURE log with send_q count.
write_on_get_cb: SOCK:ACK debug log on each consumer_ack.
2026-06-03 19:07:06 +03:00
Evgeny
bbf39c091d
feat: send_q backpressure + ll_queue on_get callback + consumer_ack flow control
...
etcp_router: ROUTER_MAX_SEND_Q_PACKETS=256, router_enqueue_send returns
error when send_q full, etcp_route_send propagates -1 on backpressure.
ll_queue: queue_set_on_get — deferred callback after each queue_data_get.
Replaces manual consumer_ack polling with queue-driven notification.
tcp_proxy_server: consumer_ack=1, write_on_get_cb triggers ACK on
each write_queue dequeue. Full backpressure chain:
write_queue full → no dequeue → no ACK → sender stops → all queues pause
write_queue drains → dequeue → on_get → ACK → sender resumes
2026-06-03 18:51:12 +03:00
Evgeny
a0da29f1eb
fix: simplify diag_timer_cb — use pool->free_count instead of allocations-reuse
...
DIAG line now shows clear metrics:
rq/wq — queue sizes
ent_f/dat_f — free_count of entry/data pools (→0 = leak)
wbuf — partial send stuck
tcp_rb/tcp_sb — kernel socket buffers
2026-06-03 17:58:08 +03:00
Evgeny
dc2b394e7a
feat: per-connection diagnostic timer in tcp_proxy_server
...
1-sec diag_timer_cb prints rq/wq counts+bytes, outstanding pool
allocations, tcp kernel buffer sizes (SO_RCVBUF/SO_SNDBUF).
Started in handle_connect, cancelled in conn_free.
2026-06-03 17:36:45 +03:00
Evgeny
04f6b3e040
refactor: remove tcp_conn_push_write, use direct queue put with chunking
...
External code pushes to write_queue directly (entry_pool + data_pool).
Added queue_set_threshold(write_queue, 32, 0) for write backpressure.
Tests split data into write_chunk_size chunks before queue put.
2026-06-03 16:38:09 +03:00
Evgeny
63f019530b
feat: tcp_io library + uasync socket toggle + ll_queue empty_callback
...
lib/u_async: uasync_set_socket_read/write — O(1) EPOLL_CTL_MOD toggle per socket
lib/ll_queue: queue_set_empty_callback — one-shot deferred callback on queue drain
lib/tcp_io: TCP connection management via uasync + ll_queue with pool alloc
- read: direct recv into pool buffer, high/low water flow control
- write: autofetch via ll_queue callback, partial send via write_buf
- on_fin/on_error/on_flushed callbacks, FIN deferred until read_queue drained
- getpeername for pre-connected socket detection
tcp_proxy_server: migrated to tcp_io (22→13 fields, 437→270 lines, -7 functions)
tests: test_tcp_io (5 tests), test_tcp_proxy_server rewritten for tcp_conn
2026-06-03 16:24:46 +03:00
Evgeny
3533ec3122
fix: memory leaks in TCP proxy server/client
...
- tcp_proxy_server: close socket + conn_count-- on uasync_add_socket_t failure
- tcp_proxy_server: conn_count-- on connect() failure
- tcp_proxy_client: queue_free(to_lwip) + tcp_abort on send_connect failure
- tcp_proxy_client: free tx_buf + cancel tx_waiter in destroy loop
2026-06-03 12:55:00 +03:00
Evgeny
ac3fe79db8
etcp_router: consumer-driven ACK with interval throttle (10ms)
...
- consumer_ack flag: ACK sent only on consumption, not assembly
- etcp_router_consumer_ack() — called from tcp_proxy_client feed_from_transport
- last_ack_sent_tb: interval-based throttle — send immediately if >=10ms passed,
otherwise timer for remaining time
- timer rules: NULL handle after cancel/fire, NULL check before start
- ROUTER_ACK_INTERVAL_TB 1000→100 (100ms→10ms)
- test_etcp_router_unit: updated test 14 for new immediate-send behavior
2026-06-03 11:50:50 +03:00
Evgeny
e7eb24537d
fix: proxy ERROR handling — single CLOSE on error, no ERROR response cascade
...
- tcp_proxy_client_handle_error: set error flag + send CLOSE once if flag was clear
- tcp_proxy_client_handle_data/handle_close: drop silently, don't send ERROR back
- tcp_proxy_server_handle_data/handle_close: drop silently, don't send ERROR back
- Add recv→send 1MB integration test (3 clients × 3 requests, shell + python)
2026-06-03 10:36:55 +03:00
Evgeny
51d5790938
fix: remove tautological BBR_EXTRA_ACKED_GAIN checks
2026-06-03 02:21:26 +03:00
Evgeny
2a259191b9
feat: queue_set_waiter_defer — immediate or call_soon callback mode
...
queue_waiter_handle stores defer_q/cb/arg, no extra malloc.
queue_set_waiter_defer(q, 1) enables call_soon dispatch for waiter callbacks.
bbr_integration uses it instead of manual send_waiter_cb wrapper.
2026-06-03 02:18:46 +03:00
Evgeny
331d43c6f7
fix: proxy ERROR loop, BBR test backpressure, O(1) u_free, test ordering
...
- tcp_proxy: ERROR silently dropped (no ERROR->ERROR loop), Russian removed from logs
- etcp_bbr: swap min(lo) and max(4*mss) in bbr_bound_cwnd_for_inflight_model
- test_etcp_bbr: fix cwnd comparison (packets vs bytes)
- ll_queue: double-put detection (abort), Floyd cycle detection in consistency check
- ll_queue: QUEUE_DEBUG commented out (was always-on, O(N) per put)
- mem: u_free_impl now O(1) via doubly-linked list, double-free detection
- bbr_integration: queue_waiter_wait + call_soon backpressure (threshold=1)
- tests/Makefile.am: fast tests first, *.log cleanup before run
2026-06-03 02:06:09 +03:00
Evgeny
7f5325ac24
etcp_router: fix inflight underflow by splitting rx_acked into tx_acked + last_sent_ack_seq
...
rx_acked was used for two conflicting purposes:
1. remote ack of our sends (inflight = tx_seq - rx_acked)
2. our last sent ACK seq (dedup: rx_seq != rx_acked)
When the ack timer fired and set rx_acked = rx_seq, it overwrote
the inflight-tracking value. If rx_seq > tx_seq, the computation
tx_seq - rx_acked underflowed (e.g. 18 - 24 = 0xFFFFFFFA),
permanently blocking router_drain_send_q and causing send_q to
grow indefinitely.
Fix:
- Split rx_acked into tx_acked (remote ack, for inflight) and
last_sent_ack_seq (our ACK, for dedup)
- Incoming ACK handler only advances tx_acked forward (stale guard)
- Use int32_t cast on all inflight comparisons to handle stale states
- Add etcp_router architecture diagram (doc/etcp_router_arch.md)
2026-06-02 22:38:20 +03:00
Evgeny
3a2b427287
etcpmon: widen debug level labels by 30% and shift radio buttons right
2026-06-02 22:16:37 +03:00
Evgeny
43baeb2306
etcpmon: fix autoradio button groups and add missing ETCPROUTE category
2026-06-02 22:13:18 +03:00
Evgeny
fceec1aea6
fix: move debug logs before async operations (queue_put, timer_set, resume) for meaningful log ordering
2026-06-02 21:53:51 +03:00
Evgeny
c5c4967b69
1
2026-06-02 21:19:07 +03:00
Evgeny
4556f327c2
1
2026-06-02 21:05:06 +03:00
Evgeny
226a5744b5
etcpmon: Debug Levels block moved to right column, global radio labels removed, columns narrowed
2026-06-02 19:24:49 +03:00
Evgeny
1f4fe37fe5
proxy: rename + simplify + backpressure
...
- tcp_proxy/remote_proxy → tcp_proxy_client/tcp_proxy_server
- Все proxy файлы перенесены в src/proxy/
- Конфиг: [tcp_proxy]→[tcp_proxy_client], [remote_proxy]→[tcp_proxy_server]
- Убран subcmd CONNECTED (0x02) — клиент шлёт DATA сразу после CONNECT
- Backpressure: etcp_router_waiter_register/cancel через ll_queue threshold waiter
- Клиент: recv_cb send fail → tx_buf+waiter, не tcp_recved() (окно lwIP=0)
- Сервер: read_cb send fail → pause_buf+waiter, пауза read_id
- CLOSE/ERROR отправляется только после drain всех очередей
- Fail: conn не найден/closed → send ERROR вместо CLOSE/silent drop
- PROTOCOL.md: полная архитектура с диаграммами состояний и потоков
2026-06-02 18:02:37 +03:00
Evgeny
e7a9163011
remote_proxy: гарантированная доставка CLOSE/ERROR обратно (exit→client) через retry-таймер
...
- remote_proxy_conn: close_pending, close_timer, close_backoff
- rp_send_close/rp_send_error: при сбое etcp_route_send → close_pending=1 + таймер с backoff
- rp_close_retry_cb: повторная отправка CLOSE/ERROR с экспоненциальным backoff (50→5000 tb)
- rp_conn_free: очистка close_timer
2026-06-01 23:31:39 +03:00
Evgeny
b43de4c1f0
tcp_proxy: гарантированная доставка CLOSE/ERROR через retry при сбое маршрута
...
- proxy_conn.close_pending: флаг недоставленного CLOSE/ERROR
- send_close/send_error: при возврате -1 выставляют close_pending=1
- proxy_poll_cb: периодический retry close_pending → CLOSE дойдёт при восстановлении ETCP
- proxy_recv_cb: проверка !close_pending перед повторной отправкой close
2026-06-01 23:26:15 +03:00
Evgeny
60800a7f35
tcp_proxy: не слать данные в lwip после закрытия TUN-стороны (tun_closed)
...
- handle_data: добавить pc->tun_closed в проверку сброса данных от exit
- proxy_feed_from_transport: не писать в PCB после tun_closed
- предотвращает ERR_RST (-14) при записи в TIME_WAIT PCB
2026-06-01 22:59:20 +03:00
Evgeny
f43631a532
etcpmon: исправить синтаксис — orphaned код перенесён внутрь функции etcpmon_client_add_to_history
2026-06-01 20:31:52 +03:00
Evgeny
6d661360b1
etcp: адаптивный keepalive — отдельная команда ETCP_KEEPALIVE с period_ms
...
- ETCP_KEEPALIVE=0x08, формат: [0x08][period_lo][period_hi]
- link->ka_period_ms: 200ms при трафике, ×1.05+1 в idle, потолок 10s
- keepalive_timeout = peer_period * KA_TIMEOUT_MULT(10)
- приём KA обновляет keepalive_timeout адаптивно (2000ms→100000ms)
- флаг recv_keepalive по-прежнему в flag_up для быстрого сигнала
2026-06-01 20:15:06 +03:00
Evgeny
b2e72db31b
etcp: link_status = remote_keepalive && recv_keepalive (вместо только remote)
...
- link_status теперь требует двусторонней слышимости: remote && local
- recv_keepalive восстанавливается ДО вычисления link_status (избегает заклинивания)
- loadbalancer_link_ready по переходу 0→1 с проверкой was_up
2026-06-01 19:43:39 +03:00
Evgeny
c5b4ec7a05
bbr: исправить бесконечную рекурсию в bbr_now — bbr_now(bbr) → get_time_tb()
2026-06-01 18:28:02 +03:00
Evgeny
0adff0253d
bbr: исправить отображение сырых BW-значений (bw_latest/bw_lo/bw_hi) с /125 на /2097
...
BW_RAW_TO_KBPS = bw_raw * 8000 / BW_UNIT = bw_raw / 2097.152
pacing_rate / 125 остаётся без изменений (уже в bytes/sec после bbr_rate_bytes_per_sec)
2026-06-01 18:13:07 +03:00
Evgeny
4f0baa37db
bbr: исправить передачу потерь в BBR + пол для cwnd на уровне BBR_CWND_MIN_TARGET*mss
...
- etcp.c: rs->lost из link->bbr_loss_since_ack (был хардкод 0), вызов bbr_note_loss при ретрансмите
- etcp_connections.h: поле bbr_loss_since_ack для per-link учёта потерь в байтах
- etcp_bbr.c: везде где BBR_CWND_MIN_TARGET — умножить на mss (юнит-мизматч пакеты/байты)
- bbr_quantization_budget, bbr_set_cwnd, bbr_bound_cwnd_for_inflight_model, bbr_probe_rtt_cwnd
- bbr_init_lower_bounds: инициализация inflight_hi из cwnd (был ~0U навсегда)
- control_server.c + etcpmon: экспорт BBR-метрик (bw_hi/lo, inflight_hi/lo, режим, потери)
- tests/bbr_integration: интеграционный тест BBR (15с, 50ms/5%loss/1Mbit) с таблицей метрик
- устранён death spiral BBR при высоких потерях: cwnd теперь не падает ниже 4*mss
2026-06-01 17:50:16 +03:00
Evgeny
6c79939db3
congestion: заменить AIMD на BBR v3 (per-link), добавить юнит-тесты BBR
...
- Новые файлы: src/etcp_bbr.h/c — полный порт BBR v3 из BBR/bbr_v3.c (референс сохранён)
- struct ETCP_LINK: удалены AIMD-поля (rtt_history, rtt_swm, stat_win, stats_timer, inflight_phase...), добавлены bbr*, delivered_bytes, bbr_pacing_rate
- struct INFLIGHT_PACKET: +3 поля для rate_sample (delivered_at_send, inflight_at_send, is_app_limited)
- etcp_ack_recv: вызов bbr_main() с rate_sample, обновление inflight_lim_bytes и pacing
- etcp_request_pkt: заполнение BBR rate_sample полей при отправке
- Шейпер: bandwidth обновляется из bbr_pacing_rate
- Конфиг: inflight_min/max заменены на bbr_max_cwnd
- Дамп: BBR поля (mode, cycle, pacing, min_rtt_us, bw_hi/lo, inflight_hi/lo)
- Time injection: bbr->now_tb для детерминированных тестов
- tests/test_etcp_bbr.c: 8 юнит-тестов (init, startup, full_bw/drain, loss, cwnd cap, loss cut, fast_path, probe_rtt)
- Отключены test_etcp_congestion и test_etcp_reinit_inflight (старый congestion control)
- 40/40 тестов пройдено
2026-06-01 12:58:31 +03:00