5.7 KiB
Формат подписки sub.md
sub.md это обычный текстовый файл, который хостится на сервере и отдаётся как plain text.
Пример URL:
https://killpeople.freegore.xyz/sub
Внутри файл содержит список olcrtc-URI из uri.md и дополнительные технические поля для клиента.
Важно: это соглашение для клиентских приложений. Сам olcrtc такой файл не читает и не обрабатывает.
Назначение
Формат нужен для клиентских подписок:
- список серверов в одном файле
- метаданные подписки для UI
- метаданные отдельных серверов
- информация для автообновления подписки
Общая структура
Файл читается сверху вниз и состоит из:
- глобальных полей подписки с префиксом
# - строк
olcrtc://... - локальных полей конкретного сервера с префиксом
##
Базовая схема:
#name: ...
#update: ...
#refresh: ...
#color: ...
#icon: ...
#used: ...
#available: ...
olcrtc://...
##name: ...
##color: ...
##icon: ...
##used: ...
##available: ...
##ip: ...
##comment: ...
olcrtc://...
##name: ...
##comment: ...
Глобальные поля подписки
Строки вида #key: value относятся ко всей подписке.
| Поле | Значение |
|---|---|
#name: |
Имя подписки |
#update: |
Время последнего обновления в Unix time |
#refresh: |
Через какой интервал клиенту нужно обновлять подписку, например 5s, 10m, 6h |
#color: |
Цвет подписки. Поле только для UI |
#icon: |
Иконка подписки. Поле только для UI |
#used: |
Сколько уже использовано, например 10mb/10gb |
#available: |
Сколько доступно всего по подписке, например 1.1gb |
#available: это именно значение на уровне всей подписки. Если клиент умеет считать остаток сам, он может использовать это поле как исходные данные или как отображаемую подсказку.
Строки серверов
Каждая строка сервера содержит один olcrtc-URI в формате из uri.md:
olcrtc://<Carrier>?<Transport>@<RoomID>#<EncryptionKey>%<ClientID>$<MIMO>
Одна строка = один сервер/одна запись подписки.
Пустые строки между элементами допустимы.
Локальные поля сервера
Строки вида ##key: value относятся только к последнему URI, который был объявлен выше.
То есть клиент должен привязывать блок ##... к ближайшей предыдущей строке olcrtc://....
| Поле | Значение |
|---|---|
##name: |
Имя сервера/узла |
##color: |
Цвет для UI |
##icon: |
Иконка для UI |
##used: |
Использование для конкретного сервера, например 500mb/10gb |
##available: |
Доступный объём для конкретного сервера |
##ip: |
IP-адрес сервера, если его нужно показать клиенту |
##comment: |
Свободный комментарий |
Локальные поля почти повторяют глобальные, но без refresh, потому что период обновления задаётся на уровне всей подписки.
Рекомендации по значениям
- Для
#update:использовать Unix time в секундах. - Для
#refresh:использовать короткие интервалы вида5s,10m,6h,1d. - Для
#color:использовать один стабильный формат в рамках клиента, например#RRGGBB. - Для
#icon:использовать строковый идентификатор или emoji. - Для
#used:и#available:использовать человекочитаемые единицыkb,mb,gb,tb.
Полный пример
#name: Zarazaex Free RU
#update: 1778011200
#refresh: 10m
#color: #4A90E2
#icon: 🇷🇺
#used: 10mb/10gb
#available: 9.99gb
olcrtc://wbstream?seichannel@room-01#d823fa01cb3e0609b67322f7cf984c4ee2e4ce2e294936fc24ef38c9e59f4799%android-01$RU / olcng free sub / IPv6
##name: RU-1
##icon: 🇷🇺
##color: #4A90E2
##used: 500mb/10gb
##available: 9.5gb
##ip: 203.0.113.10
##comment: basic free node
olcrtc://jazz?datachannel@abc123xyz#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%android-01$DE / backup / IPv4
##name: DE-Backup
##icon: 🇩🇪
##color: #2EBD85
##comment: reserve route
Имплементация клиента для подписок
на данный момент - не существует единой реализации, но в скором времени они точно появятся даже в официальном репозитории