Files
windows/CONNECTION-ROADMAP.md
T
ros d5e827112a Add MusicBridge protocol documentation and implement system volume control
- Created PROTOCOL.md to outline the MusicBridge protocol v1, detailing setup, TLS, pairing, state management, and command structure.
- Implemented SystemVolume class for managing system audio levels, including methods for setting, reading, changing, and muting volume.
- Added unit tests for the MusicBridge agent, covering pairing, identity storage, command validation, and media state management.
- Included tests for real-time media reading from Windows and ensured proper handling of artwork caching and retrieval.
2026-09-09 01:05:52 +03:00

42 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Заготовки подключения — iOS не начинать до команды пользователя
## Уже есть
- `ConnectionInvitation`: проверяет домашний IPv4 HTTPS-адрес, код/срок и SHA-256
сертификата; создаёт строку `musicbridge://pair?data=<base64url UTF-8 JSON>`.
- Клавиша `I` в агенте выводит эту строку для каждого подходящего адреса при
открытом сопряжении (`B`) и запуске с `--lan`. Это **данные для QR, не QR-картинка**.
- В JSON: `version:1`, `endpoint`, `certificateSha256`, `code` (строка из 8 цифр),
`expiresAt` (ISO 8601). Payload содержит секрет сопряжения: не публиковать/не
отправлять внешним генераторам QR. Его срок совпадает со сроком кода.
- `DiscoveryDescriptor`: сервис `_musicbridge._tcp.local.`, имя
`MusicBridge-<12 первых символов отпечатка>`, TXT `v=1`, `id=<полный SHA-256>`.
- Авторизованный `GET /v1/info` возвращает `protocolVersion`, `agentId`,
`serviceType`, `instanceName`; идентификатор равен отпечатку сертификата.
## Следующая реализация на Windows
- [ ] Локальная генерация QR из payload; отображение в окне агента/трее.
- [ ] Закрывать/обновлять показанный QR при истечении кода, сопряжении или смене IP.
- [ ] Выбор адаптера при нескольких адресах; сейчас для каждого свой payload.
- [ ] mDNS/DNS-SD publisher: PTR/SRV/TXT/A, порт HTTPS агента, без кодов и токенов.
- [ ] Обработка конфликтов имён, смены адресов, сна/пробуждения и остановки сервиса.
- [ ] Проверка объявления со второго устройства. Сейчас multicast не отправляется.
- [ ] Tray, кнопки сопряжения/отзыва, автозапуск и упаковка Windows.
Не заменять mDNS рассылкой секретов. Объявления сети не являются доказательством
подлинности ПК: проверять сохранённый отпечаток TLS перед отправкой токена.
## Порядок подключения будущего нативного клиента
1. Считать QR внутри приложения, проверить схему/версию, размер payload,
HTTPS-адрес, отсутствие userinfo/параметров, формат отпечатка/кода и срок.
2. Проверить TLS по отпечатку из QR **до** отправки POST `/v1/pair`.
3. Сохранить токен и отпечаток в Keychain; не сохранять код как постоянный секрет.
4. Получить `/v1/info`, `/v1/state`, открыть WSS `/v1/events`.
5. При переподключении найти адрес по DNS-SD, сопоставить ID, проверить TLS;
при 401 запросить повторное сопряжение, не повторять команды автоматически.
Схема `musicbridge://` пока не зарегистрирована на iPhone; Safari ничего делать
с ней не должен. Swift, Xcode-проект, установка и интерфейс iPhone отложены.