Align stream guide with session ownership and current audit status

This commit is contained in:
evgeny committed 2026-10-26 12:04:31 +01:00
1 parent 27ed4c74ff
commit 840bc9a6b0
2 files changed
+11 -4

No files matched your search

+10 -3
View File
@@ -1,7 +1,7 @@
Модуль стриминга. Техническое задание, этап 1.
Статус аудита 26.10.2026: сверка завершена только для stream_proto.h,
stream_block.h, stream_source.h и stream_media.h; остальные разделы проверены частично.
Статус аудита 26.10.2026: сверка завершена для stream.h, stream_proto.h,
stream_block.h, stream_source.h, stream_media.h и stream_optimizer.h; остальные разделы проверены частично.
Расхождение допуска deleted устранено: stream_member_load читает принятый флаг
в том же SELECT, что и профиль, и возвращает STREAM_ERR_NOT_MEMBER до crypto.
Штатный test_stream_member проверяет подписи/версии, source/supplier/self,
@@ -11,6 +11,9 @@ stream_block.h, stream_source.h и stream_media.h; остальные разде
Дефект publisher_block устранён: помещающийся Opus уходит в отдельную аудиопачку,
ожидающее видео получает следующий слот actor. Штатный test_stream_publisher
проверяет 23 сценария границ, продвижения треков и OPENING/FIN; раздел 7 отчёта.
При продолжении найден дефект expire_controls: ожидается длина INFO_REQ8 вместо9,
поэтому просроченный запрос удаляется без закрытия его пробы. Аудит остановлен;
реализация не исправлена, изолированное подтверждение и вариант исправления — раздел8 отчёта.
1. Цель и принятые решения
@@ -553,8 +556,12 @@ Stop/destroy выполняются по правилам ядра, вне callb
stream.c/h — контекст в UTUN_INSTANCE, локальные handles публикации/подписки, общий экземпляр и буфер.
DATA/GAP/END/CLOSED доставляются отложенно через один callback экземпляра ядра;
callback может закрывать handles, заимствованные данные живут до его возврата.
DATA/GAP/END используют общую позицию сессии и не повторяются для каждого raw handle;
медиакурсоры отдельных handles независимы. Последний owner закрывает сессию;
после FIN оставшиеся owners удерживают кольцо, publisher close без FIN отсоединяет их.
stream_member.c/h — канонические опции, проверка подписанного профиля/ключа и членства,
online-кандидаты только из живых BGP-путей этой CHAT-группы; мобильный источник допускается, relay исключается.
online-кандидаты только из живых BGP-путей этой CHAT-группы; мобильный источник допускается,
мобильный промежуточный поставщик требует подписанную роль supernode.
chat_core_set_my_profile_options — атомарная замена опций с сохранением имени, аватарки и остальных userinfo.
При старте снимаются оставшиеся после аварии собственные опции; смена эпохи/ключа или утрата членства отменяют подписку.
Удаление группы и остановка CHAT отменяют таймеры/события, отсоединяют handles и освобождают буферы;
+1 -1
View File
@@ -1,7 +1,7 @@
/* stream — публикация и приём трансляций CHAT-группы с подписью источника и восстановлением потерь через Reed–Solomon.
* Источник: publish_open → publish_write или publish_block → publish_finish → close.
* Приём: subscribe_open для событий байтового потока либо media_open → media_read для аудио/видео; затем close.
* Одна сессия/RS-кольцо на группу и источник; эпоха и режим выбора поставщиков общие для её handles.
* Одна живая сессия/RS-кольцо на группу и источник; эпоха и режим выбора поставщиков общие для её handles.
* Все вызовы — uasync-поток. Для открытия нужны запущенный чат, живая CHAT-группа и проверенный собственный мембер.
* Коды результатов — STREAM_* из stream_proto.h; открываемый *out заранее NULL и не меняется при отказе. */