kvm/internal/usbgadget
Alex P cd70efb83f feat: multi-session support with role-based permissions
Implements concurrent WebRTC session management with granular permission control, enabling multiple users to connect simultaneously with different access levels.

Features:
- Session modes: Primary (full control), Observer (view-only), Queued, Pending
- Role-based permissions (31 permissions across video, input, settings, system)
- Session approval workflow with configurable access control
- Primary control transfer, request, and approval mechanisms
- Grace period reconnection (prevents interruption on network issues)
- Automatic session timeout and cleanup
- Nickname system with browser-based auto-generation
- Trust-based emergency promotion (deadlock prevention)
- Session blacklisting (prevents transfer abuse)

Technical Implementation:
- Centralized permission system (internal/session package)
- Broadcast throttling (100ms global, 50ms per-session) for DoS protection
- Defense-in-depth permission validation
- Pre-allocated event maps for hot-path performance
- Lock-free session iteration with snapshot pattern
- Comprehensive session management UI with real-time updates

New Files:
- session_manager.go (1628 lines) - Core session lifecycle
- internal/session/permissions.go (306 lines) - Permission rules
- session_permissions.go (77 lines) - Package integration
- datachannel_helpers.go (11 lines) - Permission denied handler
- errors.go (10 lines) - Error definitions
- 14 new UI components (session management, approval dialogs, overlays)

50 files changed, 5836 insertions(+), 442 deletions(-)
2025-10-08 18:52:45 +03:00
..
changeset.go fix: configFS might not be mounted if the directory exists (#479) 2025-05-19 23:59:02 +02:00
changeset_arm_test.go chore(usbgadget): update usbgadget config only when needed (#474) 2025-05-19 21:48:43 +02:00
changeset_resolver.go fix(usbgadget): do not panic if a change isn't found (#481) 2025-05-20 00:34:32 +02:00
changeset_symlink.go fix: unit test not returning error when test fails 2025-05-19 22:51:11 +02:00
config.go chore: fix the base usb configuration (#610) 2025-07-09 23:57:51 +02:00
config_tx.go fix(usbgadget): do not panic if a change isn't found (#481) 2025-05-20 00:34:32 +02:00
consts.go feat: hid rpc channel (#755) 2025-09-04 22:27:56 +02:00
hid.go refactor(usb): move usbconfig to a seperated package 2025-03-10 14:02:52 +01:00
hid_keyboard.go feat: multi-session support with role-based permissions 2025-10-08 18:52:45 +03:00
hid_mouse_absolute.go feat: multi-session support with role-based permissions 2025-10-08 18:52:45 +03:00
hid_mouse_relative.go feat: hid rpc channel (#755) 2025-09-04 22:27:56 +02:00
log.go chore(usbgadget): update usbgadget config only when needed (#474) 2025-05-19 21:48:43 +02:00
mass_storage.go feat(usb_mass_storage): mount as disk (#333) 2025-05-12 19:07:27 +02:00
udc.go chore(usbgadget): update usbgadget config only when needed (#474) 2025-05-19 21:48:43 +02:00
usbgadget.go feat: release keyPress automatically (#796) 2025-09-18 13:35:47 +02:00
utils.go feat: release keyPress automatically (#796) 2025-09-18 13:35:47 +02:00