Грабли¶
Черновик пилота, дополнен разделами о воспроизведении, загрузках и антипримерами из кода Домашнего ТВ 3.5.4 — ошибками плагина, а не прошивки. Сводка известных проблем, важных разработчику плагинов. Каждое фактическое предложение ссылается на claim id. Гипотезы и ослабленные верификатором утверждения — в
guide/unverified.mdи в разделах «Не проверено» глав. Основа — темаpitfallsиндекса базы. Пометка «r25,device» — наблюдение на одном устройстве tv188b с прошивкой261021_0117_r25(тестовые плагиныtest_plugin5*/test_plugin6*); на другие прошивки и устройства оно не переносится.
Установка и пакет¶
- Встроенные в прошивку плагины, по SDK, перезаписать нельзя (SDK)1; у
установщика прошивки r24 есть сообщение «replace hard-coded plugin '%s' not allowed»
(код r24)2. При двух копиях
dunemdb_supplier_youtubeзагрузчик r25 (device) пишет «prefer_new_builtin (41 vs 34)» и «dup …: replacing» (устройство r25)3; что делает загрузчик r24, не проверено (см.guide/plugin-packaging.md, «Расхождения»). - Установщик r24 сверяет
nameв манифесте с ожидаемым («declared plugin name is '%s', real is '%s'») (код r24)4. На r25 (device) плагин, у которогоnameне равен имени каталога, не регистрируется ни под одним именем (устройство r25)5. - На r25 (
device) точки входа безicon_urlв разделе «Приложения» не появились (устройство r25)6. - На Android пользовательские накопители монтируются с
noexec, что мешает механизмуdune_plugins(SDK)7. - Текст SDK про
.platform.*на Android буквально говорит, что.platform.androidудаляется, а.platform.87xxпереносится в корень (SDK)8. Установщик r25 (device) сделал наоборот (устройство r25)9. - Плагин, положенный
adb push, на r25 (device) не подхватывается перечитыванием по IP Control — только послеam force-stop com.dunehd.app(устройство r25)10.global_actionsinstallиupdateпри таком развёртывании не выполняются (устройство r25)11. - У неподписанного плагина на прошивке с
external_plugins_enabled = signedвro_config.propertiesотвергается точка входа, а у плагинов с автозапуском — ещё иgui_start/early_gui_start(устройство r25)12. На tv188b261101_0347_r25(device, один прогон) он остался вinstalled_plugins.xml(устройство r25)13, но запуск его точки входа дал «the required signer_id is missing», «marked as bad» и «action finished with status -1» (устройство r25)14; а уже при старте оболочки так же отвергнутыgui_startуDune_backup,VPN,widget_extиearly_gui_startуplay_in_apps, и в их каталогах появился.bad_signature(устройство r25)15. При умолчании этого параметра плагин с испорченной подписью работал (устройство r25)16. Подробно —guide/publishing.md§2.2. - Ссылки на ресурсы, которых нет в пакете, остаются незамеченными: Screenshoter ссылается на
plugin_file://icons/line.png, которого в пакете нет (код)17. - По сообщениям пользователей, на Dune HD TV-303D Screenshoter устанавливается, но его
веб-интерфейс
/cgi-bin/plugins/Screenshoter/indexне открывается (форум)18.
Веб-часть и CGI¶
- CGI-скрипт плагина в прошивке r24 запускается
run_plugin_cgiкак shell-скрипт (sh): PHP-обработчик плагин должен вызвать сам (код r24)19. - Вывод плагина при перенаправлении проверяется на наличие HTTP-заголовков: есть строка «Invalid plugin '%s' output: headers missing» (код r24)20.
- На r25 (
device) CGI плагина работает под root (uid 0,u:r:shell:s0) (устройство r25)21, аphp_serverтого же плагина — под uid 1000 (устройство r25)22. - На r25 (
device) «/» в конце URL ломает запрос: каталог плагина со «/» — 404, без «/» — 302 (устройство r25)23; «/» после имени файла — 404 (устройство r25)24. - На r25 (
device)httpdотдаёт.mkvизwwwсContent-type: text/html, а наHEAD— безContent-type(устройство r25)25. - На r25 (
device)/cgi-bin/do?cmd=<cmd>&plugin=<p>доwww/cgi-bin/run.phpплагина не дошёл: ответunknown_command(устройство r25)26,run.phpне запускался (устройство r25)27. - На r25 (
device)php-cgi, запущенный изadb shell, не стартует: нетlibiconv.so.2(устройство r25)28; из CGI-обёртки плагина он работает (устройство r25)29. - Обработчик
del_elScreenshoter удаляет файл по части POST-параметра без проверки пути (код)30 — пример того, как не надо писать CGI. - По сообщениям пользователей, веб-интерфейсу Screenshoter мешает VPN, поднятый на самом плеере (плагин показывает не тот IP) (форум)31, а VPN на роутере не мешает (форум)32.
Среда PHP¶
Среда выполнения PHP, php_server и php-cgi разобраны в php-environment.md.
- Глобальные переменные PHP обычно сохраняются между вызовами, но экземпляр движка может быть
пересоздан в любой момент — полагаться на них нельзя (SDK)33. На r25 (
device) статические переменные живут, пока живphp_server(устройство r25)34, и обнуляются при каждом его перезапуске (устройство r25)35. - PHP 5.3.6 (устройство r25)36: на r25 (
device) целые 32-битные,PHP_INT_MAX= 2147483647 (устройство r25)37.json_decode()целого вне 32 бит молча возвращает 2147483647 (или −2147483648), аjson_last_error()= 0 (устройство r25)38; литерал 3000000000 в коде тоже даёт 2147483647 (устройство r25)39. Большие id и метки времени в миллисекундах из JSON так теряются. - На r25 (
device) нетJSON_BIGINT_AS_STRING,JSON_UNESCAPED_UNICODE,JSON_UNESCAPED_SLASHES,JSON_PRETTY_PRINT(устройство r25)40. - Часовой пояс:
bootstrap.phpпрошивки r24 выставляетdate.timezoneизdate_default_timezone_get()как обход известной проблемы PHP с 5.3.0 (код r24)41; в библиотеках есть комментарии, что PHP на Dune требует явной таймзоны (код r24)42 (код)43. globaltv для этого ставитdate_default_timezone_set("UTC")и вычисляет смещение из выводаdate +%z(код)44. На r25 (device) вphp_serverdate.timezone= Europe/Moscow (устройство r25)45, а вphp-cgiCGI без своегоdate.timezone— пусто, иdate()пишет PHP Warning (устройство r25)46. - На r25 (
device)php_serverперезапускается при следующем вызове, только если сменился mtimemain.php(устройство r25)47; правка подключаемого файла безtouch main.phpне подхватывается (устройство r25)48. - На r25 (
device) Fatal error илиexit(0)вhandle_user_inputостанавливаютphp_server, а пользователь видит «Ошибка приложения» (устройство r25)49; следующий вызов запускает новый процесс (устройство r25)50. - На r25 (
device)handle_user_inputбезoperation_timeoutидёт с таймаутом 60 с (устройство r25)51; что пишет об умолчании SDK, — вguide/versions.md, «Не проверено». - Единицы
operation_timeoutразные: на r25 (device) в манифесте — секунды (устройство r25)52, в данных действияplugin_handle_user_input— миллисекунды, так чтоoperation_timeout: 3в действии даёт «timeout=0.0s» и отмену через 0,36 с (устройство r25)53. - На r25 (
device) по тайм-ауту оболочка убиваетphp_server: PHP-код вызова не дорабатывает (устройство r25)54, пользователь видит «Превышено время операции» (устройство r25)55, следующий вызов идёт в новом процессе (устройство r25)56, а статические переменные начинаются заново (устройство r25)35. Подробно —guide/plugin-operations.md. - На r25 (
device), пока идётhandle_user_input, команды IP Control (и для других плагинов) ждут его конца (устройство r25)57, аmain_screenоперацию не отменяет (устройство r25)58. - На r25 (
device)call_plugin, вернувшийnull, — это сбой:PHP_CALL_FAILED, остановкаphp_serverи «Ошибка приложения / Приложение будет закрыто» (устройство r25)59. - На r25 (
device)hd_debug/PLUGIN_OPEXEC.txtдействует, если создан до старта оболочки (устройство r25)60;PLUGIN_UPDATE.txtстроки «using» при старте не дал (устройство r25)61. - На r25 (
device) предупреждения PHP пишутся в/tmp/run/<плагин>.logдаже под@(устройство r25)62, а метки времени в этом логе и вshell.logна 3 часа меньше местного времени (устройство r25)63. - На r25 (
device)shell_execдобавляет$FS_PREFIXк/tmp/…,/firmware/…,/config/…,/flashdata/…и к пути в одинарных кавычках, но не к пути в двойных кавычках (устройство r25)64. Команда идёт через/system/bin/sh(устройство r25)65, хотя вphp_serverзаданPHP_PROC_OPEN_SH=$FS_PREFIX/bin/sh(ссылка наlibxxx_bash.so) (устройство r25)66; вphp-cgiэтой переменной нет (устройство r25)67. В APK r24 по коду путь не переписывается и после",=,|,:(код r24)68. Путь первым словом команды, которому нужен префикс, — отдельный случай: по коду r25 он получает спередиsh, а для$FS_PREFIXпроверяется байт перед началом строки (код r25)69; на r25 (device, один прогон)exec('/config/kbp11_x.sh first-word')вернулrc=127иNo such file or directory(устройство r25)70 (см.guide/php-environment.md, §3.2). - На r25 (
device, один прогон) в отчёте нет записи возвратаshell_exec("sleep 61 &")без перенаправления вывода, и операцию отменили по тайм-ауту 30 с с «Превышено время операции» (устройство r25)71;shell_exec('sleep 61 >/dev/null 2>&1 &')при проверке на устройстве вернулся за 0.01 с (устройство r25)72. - Антипример фонового демона — Dune_backup 2.9.2.
global_actionsgui_startиinstallс типомplugin_systemзапускаютbin/gui_start.sh &(код)73; скрипт не даёт запуститьdemon_as.shвторой раз проверкойps wиpidofи запускает его через/system/dunehd/dunehd_service do, если файл есть (код)74, а сам демон без аргумента не завершается (код)75. На tv188b r25 2026-10-23 от root с ppid 1 работали три копииdemon_as.sh(устройство r25)76, в прогоне 2026-11-03 — 75 копий (устройство r25)77, аgui_startв тот день запускался семь раз (устройство r25)78. Слабое место — проверка «уже работает» поps:/procв tv188b r22/r24/r25 перемонтирован сhidepid=2,gid=3009(код r22, r24, r25)79, действияplugin_systemидут как uid=1000(system) без группы 3009(readproc) (устройство r25)80, и на261101_0347_r25(device) такой процесс иexecизphp_serverвидели 31 каталог/proc/<pid>из 396 видимых root, аps w | grep demon_asпоказывал только свои процессы (устройство r25)81. Вторая дыра:test_demon()экрана плагина запускаетdemon_as.shчерезConfig::do_cmd, если не нашёл его путь в выводеps w, без проверкиgui_start.sh(код)82. Связь копий сhidepidна устройстве не воспроизведена: на261101_0347_r25демона не было, иgui_startего не оставил (устройство r25)83; гипотезы о связи — «Не проверено» (guide/unverified.md). - В APK r24 по коду открытие потока с поиском по
include_path(битUSE_PATH) идёт безFS_PREFIX, остальные открытия — с ним (код r24)84; что это значит дляfile_get_contents($f, true), — «Не проверено» (guide/unverified.md). - В APK r24 по коду чтение
/sys/class/net/eth0/addressподменяется на/tmp/run/dune_mac.txt(код r24)85: MAC берётся не из сетевого интерфейса. - Сравнения версий прошивки в
Expr(fwv_ge/gt/le/lt) строковые, черезstrcmp(код r24)86. HD::get_item($path, $dummy=null)в прошивке r24 — заглушка, всегда возвращаетfalse(код r24)87.- Антипример: ветка
tv_playвTvRowsScreenДомашнего ТВ 3.5.4 вызываетEpfsHandler::update_tv_epf, а такого метода в плагине нет — есть толькоupdate_tv_epfs,refresh_tv_epfsиupdate_all_epfs(код)88. Чем кончится вызов, — «Не проверено» вguide/plugin-recipes-structure.md; что Fatal error вhandle_user_inputделает сphp_serverна r25 (device), — выше (устройство r25)89. - Та же ошибка в
ensure_no_internet_epfs_created: неопределённая$plugin_cookies— в DUNE-HD.TV (код)90 и в Домашнем ТВ 3.5.4 (код)91.
Сеть¶
HD::http_get_documentв прошивке r24 по умолчанию отключает проверку TLS-сертификата (CURLOPT_SSL_VERIFYPEER=false) и следует редиректам (код r24)92.- Тот же метод бросает
DuneCurlExceptionпри любом HTTP-коде, кроме 200 (включая 301/302/304), и при ошибке curl создаёт флаг/tmp/run/network_monitor/force_check_on_error(код r24)93. - На r25 (
device)curl_multiна 4 хендла кhttpdсамого плеера падает послеcurl_multi_info_read: вphp-cgi— код 139 и «Segmentation fault» (устройство r25)94, вphp_server— «op 11 failed»,PHP_CALL_FAILED(устройство r25)95 и диалог «Ошибка приложения» (устройство r25)96. Причину лог не показывает. С четырьмя хендлами к компьютеру (один прогон) отчёт оборвался на метке передcurl_multi_getcontenth0 (устройство r25)97, а оболочка получила EOF от PHP-сервера иPHP_CALL_FAILED(устройство r25)98. - На r25 (
device) curl 7.67.0 с OpenSSL 1.0.1u (устройство r25)99, но константCURLOPT_ACCEPT_ENCODING,CURLOPT_RESOLVE,CURL_SSLVERSION_TLSv1_2и др. в PHP нет;CURLOPT_ENCODINGесть (устройство r25)100. - CA-бандл
/firmware/certs/ca-bundle.crtодинаков во всех разобранных сборках (код r22, r24, r25)101 и датирован данными Mozilla от 11 октября 2022 года (код r22, r24, r25)102; срок Entrust Root Certification Authority — 2026-11-27 (код r22, r24, r25)103. СчётчикуvalidTo_time_t < time()изopenssl_x509_parse()на r25 доверять нельзя: значения лежат между 1969-12-31 и 2038-01-19 (устройство r25)104, а PHP 32-битный (устройство r25)37. У всех сроков позже 2038-01-19 03:14:07 UTCvalidTo_time_t= −1 (устройство r25)105 (см.guide/compat-matrix.md, «Расхождения»). - На r25 (
device, 2026-11-02) изphp_serverс этим бандлом и включённой проверкой TLS 17 из 19 проверенных хостов получили errno 0 (устройство r25)106, те же 17 — и с бандлом без корня Entrust Root Certification Authority (устройство r25)107.www.ssl.comпадает уже сейчас с errno 60, его цепочка заканчивается SSL.com TLS RSA Root CA 2022 (устройство r25)108, а этого сертификата в бандле нет (код r25)109. Сайты вне этого списка и что будет после 2026-11-27 — см.guide/firmware-bugs.md, BUG-001. - На tv188b r25 (
device,php_server)HTTP_HOSTв CGI плагина зависит от того, как задан URLhttp://localhost/cgi-bin/plugins/…. Сcurl_init($url)запрос пришёл сHTTP_HOST=localhost(устройство r25)110, сcurl_setopt(CURLOPT_URL)при проверке на устройстве — сHTTP_HOST=127.0.0.1(устройство r25)111,file_get_contents— тоже с127.0.0.1(устройство r25)112. По коду r25 уcurl_init(url)иcurl_setoptразный маршрут URL (код r25)113; префиксыhttp://localhost/cgi-bin/plugins/иhttp://127.0.0.1/cgi-bin/plugins/без порта при заданнойHD_HTTP_LOCAL_PORTзаменяются наhttp://127.0.0.1:<HD_HTTP_LOCAL_PORT>/cgi-bin/plugins/(код r25)114; без этой переменной и дляhttp://-URL с другим хостом или путём адрес уходит в_php_apply_lcreg_to_http(код r25)115. Подробнее —guide/php-http.md, §3.6. - По комментарию в библиотеке,
change_tv_favorites()может вернуть NULL даже при успехе (код)116 (код)117. - Тот же
curlидёт с--silent --location -kпри экспортированномCURL_CA_BUNDLE(код)118, а на платформе, которой нет в выборе,CURLостаётся без пути: завершающегоelseв ветках нет (код)119.
Поставщик «Фильмов»¶
- Если
movie_suppliers_update.shупал, по коду r24 повторного запуска нет до сменыversion_indexили списка id (код r24)120; на r25 (device) при коде выхода 3paramsвсё равно записан (устройство r25)121. - На r25 (
device) потоковый поставщик получаетget_stream_urlдля каждого файла безurlсразу послеdo_file_search, без выбора пользователя (устройство r25)122. - На r25 (
device)media_checkвызывает/firmware/scripts/ffmpeg.sh, которого на устройстве нет (устройство r25)123. - На r25 (
device)urlфайла изdo_file_searchне используется уstream_special(устройство r25)124 и при запуске трейлеров (устройство r25)125: нуженget_stream_url. - На r25 (
device)bin«am start -p '<пакет>' -a MAIN -c LEANBACK_LAUNCHER» не открыл приложение (статус −1) (устройство r25)126, аam start -n <pkg>/<activity>открыл (устройство r25)127. - Без
wait_app_start_delayshell_extr25 передаётdelay−1 (код r25)128, а по коду r25 приdelay< 1 ожидание фокуса сразу кончается неудачей, если оболочка ещё в фокусе (код r25)129. На r25 (device) сdelay0 приложение открылось, и поверх него выполнилсяerror_action(устройство r25)130 (в серии из четырёх — один раз (устройство r25)131); с −1 и 10 ошибки не было (устройство r25)132. Ставьтеwait_app_start_delay> 0, как generic (10) (код r24)133. IntentBuilder(r25 и APK DMC) молча игнорирует всё после первого позиционного аргумента, в том числе опции (код r24, r25)134;-f <число>заменяет все флаги, набранные до него (код r24, r25)135; неизвестная опция, в том числе--user, даёт статус −1 (устройство r25, код r25)136.- В r25
cmdпопадает в веткуdunehd_service, только если строка начинается ровно с/system/dunehd/dunehd_service: ведущий пробел отправит её вapk_helper(код r25)137. Уdunehd_service do am startкод возврата не учитывается: ошибкой (999) считается только последняя строка вывода, начинающаяся сError(код r25)138. - В r25 по коду «Продолжить» и
sup_infoполучает только кнопка поставщика последней записи истории с прогрессом (код r25)139; uid со схемойxxx://относится к локальным файлам, а не к поставщику (код r25)140.
Онлайн-обновление¶
Подробно — guide/online-upgrade.md.
- На r25 (
device) срок следующей проверки — время проверки +next_check_update_timeoutизupdate_info, а неcheck_update/timeoutманифеста (устройство r25)141; «Напомнить позже» этот срок не сдвигает (устройство r25)142. - На r25 (
device)dont_ask_confirmations=yesу установленной версии ставит обновление молча (устройство r25)143, а сообщений о ходе установки на экране нет и при обычном обновлении (устройство r25)144. - На r25 (
device) при обновлении новая версия получаетupdate, аinstallне вызывается (устройство r25)145. - На r25 (
device) файлы изtgzставятся с правами из архива (-rw-r--r--) (устройство r25)146; про бит исполнения уbin/claims нет.
Хранение данных¶
data_dir_pathнедоступен на устройствах без System Storage и Flash Memory Storage — тогда ключ не задан (SDK)147. На r25 (device) у плагина изflashdataон равен$FS_PREFIX/flashdata/plugins_data/<p>(устройство r25)148.- После каждой записи в постоянное хранилище нужно сразу выполнять
sync(SDK)149. $FS_PREFIXприменяется непоследовательно: в widget_extboot.shпроверяет/flashdata/plugins_dataбез префикса, а остальные скрипты — с ним (код)150; PHP-часть вызывает/firmware/scripts/run_widget.shбез префикса, shell-скрипты — с ним (код)151.
Воспроизведение¶
Подробно — guide/playback.md.
- Следующая серия после автоперехода на r25 (
device) начинается с 0, а не сinitial_position_ms(устройство r25)152. playback_going_to_switchна r25 (device) приходит и в конце последней серии, когда перехода нет: послеstopped, прямо передplayback_stop(устройство r25)153; SDK говорит обратное (см.guide/playback.md, «Расхождения»).playback_stopприходит и между сериями — доget_vod_stream_urlследующей (устройство r25)154.- Для ленивой серии
get_vod_stream_infoна r25 (device) не вызывался ни разу, хотя тестовый плагин его реализует (устройство r25)155. - ExoPlayer по умолчанию шлёт
User-AgentизUtil.getUserAgent(context, "ExoPlayerDemo")(код r25)156; AndroidMediaPlayer(MediaPlayerImpl) вызываетsetDataSource(Context, Uri)без карты заголовков (код r25)157. - httpd плагина на r25 (
device) отдаёт.mkvсContent-type: text/html(устройство r25)25. - У встроенного VOD r25 (
MainVod) на не-Android параметрhls_ignore_chunk_errorsтеряется из-за ошибки в коде (код r25)158.
Rows-экраны, EPF и история просмотра¶
Два ответа плагина держат оболочку tv188b r25 в цикле запросов (device, по одному прогону)
(устройство r25)159. Задумано ли
это, — guide/firmware-bugs.md §7.
get_folder_rows: на пустой ответ при проверке на устройстве (261021_0117_r25) за ~45 с пришло 7977 вызовов (устройство r25)160; при проверке на устройстве (261101_0347_r25) ответ, где запрошенный ряд снова отдан loading-рядом (row_dupс data"ld"), дал 18602 вызова за ~41 с (устройство r25)161. Рядrow_regularс пустымitemsиrow_vgapс тем же id повторов не вызвали (устройство r25)162. Подробно —guide/plugin-operations.md§1.3.get_regular_folder_items: при проверке на устройстве (261101_0347_r25) приinitial_range4 из 4 иmore_items_available=true, когда на каждый запросfrom=4плагин снова отдавалtotal4, 2 пункта иmore_items_available=true, оболочка повторяла запрос без конца — 19227 запросов за ~70 с (устройство r25)163; при проверке на устройстве (261021_0117_r25) ответ былmore_items_available=false, и запрос был один (устройство r25)164.
Антипримеры из кода Домашнего ТВ 3.5.4 (code, платформа не установлена): ошибки плагина, которые легко повторить в
своём rows-экране. Приёмы этого плагина — guide/plugin-recipes-structure.md §4.7; следствия, выведенные из кода, — там
же, «Не проверено».
- Условие таймера: на
GUI_EVENT_TIMERTvRowsScreenпересобирает EPF, только когдаneed_update_epf_mapping_flagпуст, и тогда же присваивает емуfalse, а при установленном флаге возвращаетnull; свойство в классе не объявлено (код)165. МетодEpfsHandler::need_update_epf_mappingтоже никто не вызывает (код)166. switchбезbreak:remove_playback_point(«Удалить» в ряду истории) проваливается вclear_playback_points, аPlaybackPoints::clear()удаляет файл истории целиком; объявлено свойство$remove_playback_point, используется необъявленное$removed_playback_point(код)167.- Порядок присваиваний: в
update_curr_point$time_position = max($time − curr_point->time, 0)считается уже послеcurr_point->time = $timeи всегда равна 0 — запасной путь «прибавить прошедшее время» позицию не меняет (код)168. - Флаги теряются при пересылке: при
cenc_drm_support()веткаplugin_entryвозвращаетcheck_pf_activationс новым действиемpf_checked, в параметры которогоfirst_run_after_bootиrestore_from_sleepне копируются (код)169; от них зависитfirst_runвupdate_all_epfs(код)170.
Загрузки и TorrServer¶
Подробно — guide/downloads-torrserver.md.
- Голая magnet-ссылка в
launch_media_urlна r25 (device) отклоняетсяinvalid_parameters(устройство r25)171, а HTTPS-URL.torrentне запускает ни воспроизведения, ниdownloads(устройство r25)172. - На плеере с 8 ГБ лог
dl_managerr25 (device) — «dl_max_loads_at_once is 3», затем «is now 1»: загрузки идут по одной (устройство r25)173. apiHttpPostклиента TorrServer возвращает true даже после неудачногоfile_get_contents, аSettingsWriteвсегда возвращает true (код r25)174.- Ответа на команду
.inнет: GUI послеadd_dlждёт смены статуса до 50 опросов по 200 мс (код r25)175. - Путь, уже занятый другой группой,
dl_managerотклоняет вместе со всей командой («path already added») (код r25)176. force-stopприложения на r25 (device) не останавливаетdl_manager(устройство r25)177.
Платформы и версии¶
- В прошивках, отличных от
130906_b8+,section_indexиis_default_sectionдействуют только приparent_media_url = root://applications(SDK)178. - На SMP87xx есть фоновое воспроизведение; плагин должен учитывать навигацию по своим экранам во время своей сессии воспроизведения (SDK)179.
- Для ATV и Android 11+ AOSP SDK отсылает к отдельному разделу важных замечаний в
dune_devel_info.html(SDK)180; этот раздел в базе пока не разобран. - Код r24 читает из
/tmp/run/versions.txtключandroid_platform(код r24)181, а на r25 (device) его в файле нет (устройство r25)182. restart_guiвChangeSettingsActionна r25 (device) перезапускает приложение, а не приставку (устройство r25)183.- Копии
smbtree::get_bug_platform_kind()в Screenshoter считают «багованными» разные наборыplatform_kind: 8672, 8673 и 8758 (код)184 против только 8672 (код)185.
Документация¶
- Имя параметра
get_vod_stream_urlразличается внутри SDK:$media_urlв объявлении интерфейса и$playback_urlв обзоре (SDK)186. - Версия появления global plugin actions в SDK указана двояко:
130315_b6в заголовке (SDK)187 и130515_2104_b6в тексте (SDK)188.
-
doc-sdk-plugins.c018 · doc · any-documented; прошивка — · При установке плагина с тем же именем, что у уже установленного вручную, предлагается перезаписать или отменить; встроенные в прошивку плагины перезаписать нельзя ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит сообщения установщика плагинов о запретах: «install not allowed for plugin», «install not allowed for unsigned plugin», «replace hard-coded plugin '%s' not allowed», «replace not allowed for plugin '%s' because of signer_id mismatch», «unsigned plugins not allowed», «signer_id '%s' not allowed by firmware», «signature verification failed» ↩
-
fw-tv188b-261021-0117-r25.c224 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при загрузке плагинов shell.log содержит «plugin D: (dunemdb_supplier_youtube) prefer_new_builtin (41 vs 34)» и сразу за ним «[populate_plugins] dup dunemdb_supplier_youtube: replacing»; version_index копии в $FS_PREFIX/firmware_ext/plugins — 41, в $FS_PREFIX/flashdata/plugins — 34. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c041 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Установщик сверяет name в манифесте с ожидаемым: есть сообщение «declared plugin name is '%s', real is '%s'» и ключ plugin_installer_error_name_changed__1 ↩
-
fw-tv188b-261021-0117-r25.c210 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 плагин, у которого name в dune_plugin.xml (test_plugin5_other) не равен имени каталога (test_plugin5_badname), не регистрируется: строки «Plugin … is registered» для него нет, в /tmp/run/installed_plugins.xml и /tmp/www/plugins его нет ни под тем, ни под другим именем. ↩
-
fw-tv188b-261021-0117-r25.c213 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 точки входа плагина test_plugin5 (root://applications), заданные без icon_url, в разделе «Приложения» не появлялись. ↩
-
doc-sdk-plugins.c136 · doc · android; прошивка — · На Android пользовательские накопители монтируются с noexec, что мешает механизму dune_plugins ↩
-
doc-sdk-plugins.c137 · doc · android; прошивка — · Текст документа буквально говорит: при установке на Android содержимое .platform.android удаляется, а содержимое .platform.87xx переносится в корень ↩
-
- fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.
». - fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.
») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt.
- fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.
-
fw-tv188b-261021-0117-r25.c203 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги плагинов, положенные adb push в /data/data/com.dunehd.app/flashdata/plugins, не подхватились перечитыванием по IP Control (cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00; обе команды ответили command_status ok): в shell.log после них нет ни строк test_plugin5, ни «Loading plugins from», ни populate_plugins, а test_plugin5 нет в /tmp/run/installed_plugins.xml. test_plugin5 и test_plugin5_sup зарегистрировались после am force-stop com.dunehd.app. ↩
-
- fw-tv188b-261021-0117-r25.c082 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 global_action install не выполняется, если плагин положен в $FS_PREFIX/flashdata/plugins через adb push и приложение перезапущено: маркеров install от test_plugin5 и test_plugin6_sup нет, тогда как boot, boot_end и gui_start test_plugin5 выполнились.
- fw-tv188b-261021-0117-r25.c083 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 global_action update не выполняется, если version_index в dune_plugin.xml изменён на месте (1 → 2) и приложение перезапущено через am force-stop, хотя оболочка регистрирует плагин с version_index 2 и заново запускает movie_suppliers_update.sh.
-
- fw-tv188b-261021-0117-r25--plugin-loader.c111 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при external_plugins_enabled = signed запуск точки входа стороннего test_plugin14n (без signer_id, испорченная подпись) дал «the required signer_id is missing», «test_plugin14n marked as bad» и «action finished with status -1»; до php_server действие не дошло (вызовов dlg было 2, стало 2) — проверка ленивая, при запуске действия.
- fw-tv188b-261021-0117-r25--plugin-loader.c113 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при external_plugins_enabled = signed уже при старте оболочки, до запуска тестовых плагинов, плагины play_in_apps (early_gui_start), Dune_backup, VPN и widget_ext (gui_start) из flashdata/plugins получили «the required signer_id is missing» и «marked as bad», их действия завершились со статусом -1, а в их каталогах появился .bad_signature.
-
fw-tv188b-261021-0117-r25--plugin-loader.c110 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при external_plugins_enabled = signed в ro_config.properties после перезапуска оболочки сторонние test_plugin14, test_plugin14t и test_plugin14n остались в installed_plugins.xml, и при загрузке строк plugin_signer для test_plugin14n нет — подпись при загрузке не проверяется; test_plugin14v (strict_verify_needed) отсутствует, как и при умолчании. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c111 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при external_plugins_enabled = signed запуск точки входа стороннего test_plugin14n (без signer_id, испорченная подпись) дал «the required signer_id is missing», «test_plugin14n marked as bad» и «action finished with status -1»; до php_server действие не дошло (вызовов dlg было 2, стало 2) — проверка ленивая, при запуске действия. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c113 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при external_plugins_enabled = signed уже при старте оболочки, до запуска тестовых плагинов, плагины play_in_apps (early_gui_start), Dune_backup, VPN и widget_ext (gui_start) из flashdata/plugins получили «the required signer_id is missing» и «marked as bad», их действия завершились со статусом -1, а в их каталогах появился .bad_signature. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c109 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при умолчании external_plugins_enabled сторонний test_plugin14n без strict_verify_needed и signer_id, с испорченным dune_plugin.sign, зарегистрирован без строк plugin_signer, а его действие дошло до php_server (handle_user_input(dlg) в calls.txt). ↩
-
plg-dc-screenshoter.c050 · code · unknown; прошивка — · Smart_file_screen.php ссылается на plugin_file://icons/line.png, которого нет в пакете (в icons/ только default.png и logo.png) ↩
-
thr-hdtv-19055.c005 · forum · Dune HD TV-303D, unknown; прошивка — · На Dune HD TV-303D плагин Screenshoter (ZIP) устанавливается, но веб-интерфейс по адресу /cgi-bin/plugins/Screenshoter/index не открывается ↩
-
fw-tv188b-260827-0003-r24--http-api.c008 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI-скрипт плагина запускается run_plugin_cgi как shell-скрипт (sh), а не напрямую: PHP-обработчик плагин должен вызвать сам ↩
-
fw-tv188b-260827-0003-r24--http-api.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Вывод плагина при перенаправлении проверяется на наличие HTTP-заголовков: строка «Invalid plugin '%s' output: headers missing» ↩
-
fw-tv188b-261021-0117-r25.c152 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина, запущенный httpd через run_plugin_cgi, работает под uid=0(root) gid=0(root) с SELinux-контекстом u:r:shell:s0. ↩
-
fw-tv188b-261021-0117-r25.c240 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку) работает с posix_getuid() = 0, а php_server того же плагина — с uid 1000. ↩
-
fw-tv188b-261021-0117-r25.c160 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd на URL каталога плагина без «/» в конце (/plugins/
, /cgi-bin/plugins/
) отвечает 302 с Location на тот же путь со «/», а на URL со «/» (/plugins/
/, /cgi-bin/plugins/
/) — 404 Not Found. ↩
-
fw-tv188b-261021-0117-r25.c161 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 «/» после имени файла плагина даёт 404 Not Found и для CGI (/cgi-bin/plugins/
/ping.sh/), и для статики (/plugins/
/index.txt/), хотя без «/» оба отвечают 200. ↩
-
fw-tv188b-261021-0117-r25.c165 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd отдаёт файл .mkv из www плагина с заголовком Content-type: text/html (ответ 206 на GET с Range), а в ответе на HEAD для того же файла заголовка Content-type нет; .txt отдаётся с Content-type: text/plain. ↩↩
-
fw-tv188b-261021-0117-r25.c169 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 GET /cgi-bin/do?cmd=test_plugin5_ping&plugin=test_plugin5&kbp5=1 при загруженном плагине test_plugin5 с www/cgi-bin/run.php вернул command_status=failed, error_kind=unknown_command, error_description «command 'test_plugin5_ping' is not supported». ↩
-
fw-tv188b-261021-0117-r25.c170 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запрос /cgi-bin/do?cmd=test_plugin5_ping&plugin=test_plugin5 не запустил www/cgi-bin/run.php плагина: файл /tmp/test_plugin5/run_php.txt, который run.php пишет при каждом запуске, не появился, а в shell.log после запроса нет строк handle_extcmd, test_plugin5, run.php, php-cgi и «headers missing». ↩
-
fw-tv188b-261021-0117-r25.c241 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/firmware_ext/php/php-cgi, запущенный из adb shell (adbd root) с LD_LIBRARY_PATH=$FS_PREFIX/lib:$LD_LIBRARY_PATH, не стартует — «CANNOT LINK EXECUTABLE … library "libiconv.so.2" not found: needed by main executable», код 1 (и с -v, и с -q -f). ↩
-
fw-tv188b-261021-0117-r25.c238 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php-cgi, запущенный CGI-обёрткой плагина без изменения LD_LIBRARY_PATH, стартует и выполняет скрипт; в окружении php-cgi LD_LIBRARY_PATH=/data/data/com.dunehd.app/firmware/lib:/lib:/usr/lib. ↩
-
plg-dc-screenshoter.c079 · code · unknown; прошивка — · del_el удаляет файл install_dir/www + часть POST-параметра href после имени плагина, без проверки пути ↩
-
thr-hdtv-19055.c021 · forum · Dune HD Magic 4K Plus, unknown; прошивка — · На Magic 4K Plus по Wi-Fi с включённым на плеере VPN (профиль OpenVPN) плагин показывает не тот IP, и веб-интерфейс недоступен; после отключения VPN работает ↩
-
thr-hdtv-19055.c022 · forum · unknown; прошивка — · Доступу к веб-интерфейсу Screenshoter мешает только VPN, поднятый на самом плеере; VPN на роутере не мешает ↩
-
doc-sdk-plugins.c061 · doc · any-documented; прошивка — · Глобальные переменные PHP обычно сохраняются между вызовами, но экземпляр движка может быть пересоздан в любой момент между вызовами — плагин не должен на них полагаться ↩
-
fw-tv188b-261021-0117-r25.c307 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 статическая переменная класса плагина сохраняется между вызовами, пока жив php_server: счётчик KbProbe5Fw::$n, увеличиваемый в каждом call_plugin, рос 1→5 в пяти вызовах процесса 17362 (13:38:00–13:39:25). ↩
-
fw-tv188b-261021-0117-r25.c308 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после каждого перезапуска php_server (по touch main.php, после Fatal error, после exit(0)) статические переменные плагина начинаются заново: счётчик KbProbe5Fw::$n в первом вызове нового процесса снова равен 1 (pid 17676, 17849, 17924). ↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c002 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В тестовом плагине test_plugin5 на tv188b 261021_0117_r25 значение PHP_VERSION равно 5.3.6. ↩
-
fw-tv188b-261021-0117-r25.c242 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP 32-битный по целым: в php_server и в php-cgi CGI плагина PHP_INT_SIZE = 4, PHP_INT_MAX = 2147483647. ↩↩
-
fw-tv188b-261021-0117-r25.c244 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi json_decode() целых вне 32-битного диапазона (2147483648, 4294967296, 9007199254740993, 1793009215123, [3000000000]) возвращает integer 2147483647, а -2147483649 — integer -2147483648; json_last_error() при этом 0. ↩
-
fw-tv188b-261021-0117-r25.c243 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi целочисленный литерал 3000000000 в PHP-коде даёт integer 2147483647 (gettype integer, json_encode(3000000000) и json_encode(1793009215123) — 2147483647), тогда как PHP_INT_MAX + 1 даёт 2147483648, а time() * 1000 — 13-значное число без обрезки. ↩
-
fw-tv188b-261021-0117-r25.c246 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi константы JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES и JSON_PRETTY_PRINT не определены; JSON_NUMERIC_CHECK (32), JSON_HEX_TAG (1), JSON_FORCE_OBJECT (16), JSON_ERROR_UTF8 (5) определены. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c004 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · bootstrap.php устанавливает ini date.timezone из date_default_timezone_get(), с комментарием «Use timezone from the environment (TZ)» как обход известной проблемы PHP с 5.3.0 ↩
-
fw-tv188b-260827-0003-r24--php-framework.c075 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В HD::format_timestamp есть комментарий, что PHP на Dune требует явной таймзоны (нет встроенной информации о таймзонах?) ↩
-
plg-dc-globaltv.c071 · code · unknown; прошивка — · Комментарий в библиотеке: PHP на Dune требует явного указания часового пояса (встроенной информации о часовых поясах, видимо, нет). ↩
-
plg-dc-globaltv.c072 · code · unknown; прошивка — · Плагин вызывает date_default_timezone_set("UTC"), а смещение пояса вычисляет из вывода shell-команды date +%z. ↩
-
fw-tv188b-261021-0117-r25.c247 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server PHP-плагина ini date.timezone = Europe/Moscow и date_default_timezone_get() = Europe/Moscow при getenv('TZ') = false; date() даёт MSK +0300, getprop persist.sys.timezone — Europe/Moscow. ↩
-
fw-tv188b-261021-0117-r25.c248 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина с php.ini без date.timezone ini date.timezone пуст; date_default_timezone_get() возвращает Europe/Moscow, но date() и date_default_timezone_get() пишут PHP Warning «It is not safe to rely on the system's timezone settings… We selected 'Europe/Moscow' for 'MSK/3.0/no DST' instead». ↩
-
fw-tv188b-261021-0117-r25.c304 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после touch main.php плагина test_plugin5 следующий вызов handle_user_input сначала перезапускает php_server: в shell.log того же процесса оболочки «[test_plugin5] [php] start_call(): PHP-script modification detected (1793009215). Restarting PHP-server-process...», «shutting down...», «stopped.», «server started; pid: 17676.», и вызов исполняет уже новый процесс 17676. ↩
-
fw-tv188b-261021-0117-r25.c306 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 правка файла lib/kbp5_lib.php, подключаемого из main.php через require_once, без изменения main.php не перезапустила php_server test_plugin5: следующий вызов исполнил тот же процесс 17362 (n=5) со старой версией функции (lib=v1), в shell.log между «start» и «result action» сообщений о перезапуске нет. ↩
-
- fw-tv188b-261021-0117-r25.c320 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при сбое PHP-вызова (Fatal error или exit(0) в handle_user_input) оболочка пишет в shell.log «[<плагин>] [php] poll_calls() E: treating empty result as failure and stopping server», останавливает php_server («shutting down...», «stopped.»), затем «Error: operation returned PHP_CALL_FAILED.», «[handle_user_input] Failed.» и «[plugin] <плагин>: FATAL ERROR detected (msg = Ошибка приложения)».
- fw-tv188b-261021-0117-r25.c321 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 exit(0) в handle_user_input не завершил php_server сразу: процесс записал «[server] php-call failed.» (10:40:43.879079) и продолжал работу; оболочка сочла результат пустым и начала остановку (.879128–.879143), и лишь затем php_server получил EOF канала (.879167) и вышел с «[server] exiting (code: 0)...».
-
fw-tv188b-261021-0117-r25.c322 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после остановки php_server из-за сбоя вызова (Fatal error, exit(0)) следующий вызов плагина запускает новый php_server: в shell.log после «start (timeout=60.0s)» идёт «[test_plugin5] [php] server started; pid: 17849.» (после Fatal error) и «… pid: 17924.» (после exit). ↩
-
fw-tv188b-261021-0117-r25.c309 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 операция handle_user_input PHP-плагина без operation_timeout в манифесте (test_plugin5, test_plugin6; ENTER на точке входа с plugin_handle_user_input) стартует с тайм-аутом 60 с: в shell.log «…->handle_user_input(…): start (timeout=60.0s)». ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c035 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ключи манифеста operation_timeout/default и operation_timeout/<тип операции> задаются в секундах и работают:
5 дало handle_user_input «start (timeout=5.0s)» и отмену на 5 с,7 — «timeout=7.0s» и отмену на 7 с. ↩ -
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c034 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ключ operation_timeout в данных действия plugin_handle_user_input задаётся в миллисекундах: 3000 дало «start (timeout=3.0s)» и отмену через 3,3 с, 3 — «timeout=0.0s» и отмену через 0,36 с, 60000 — «timeout=60.0s»; значение из данных действия перекрывает operation_timeout/default манифеста (5). ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c032 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 по тайм-ауту handle_user_input оболочка останавливает php_server плагина и тем прерывает вызов: за «cancelling by timeout (N s)» следуют «FATAL ERROR detected (msg = operation timed out)», «[php] shutting down...», через ~0,25 с «killing PHP-server process...» и «stopped.», затем «canceling req N (fast: 1)», «PHP-FW was shut down. The operation fails.», «result status canceled» и «canceled in N s»; PHP-код вызова не доработал. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c033 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после отмены handle_user_input по тайм-ауту оболочка выполняет plugin_show_error, и на экране — диалог «Превышено время операции» с кнопкой OK (перевод plugin_operation_timed_out). ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c037 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 следующий вызов плагина после отмены по тайм-ауту не ждёт отменённого: php_server с отменённым вызовом уже убит, и вызов, пришедший через ~4,7 с, сразу выполняется в новом php_server («[php] creating...», новый pid); код отменённого вызова не продолжился. ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c098 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды IP Control ждут, пока идёт handle_user_input плагина: launch_media_url, отправленный через 4 с после начала 20-секундной операции, получил ответ только после её конца — и для точки входа того же плагина, и для другого плагина. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c037 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=main_screen и запуск по IP Control точки входа другого плагина, отправленные через 4 с после начала 20-секундного handle_user_input, эту операцию не отменяют: она дорабатывает до конца («end long», «result action null»), строк «q-removing … deactivate» и «canceled» нет. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c039 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25, если call_plugin PHP-плагина возвращает null, php_server ничего не пишет в ответ и завершает цикл по EOF канала, а оболочка печатает «poll_calls() E: treating empty result as failure and stopping server», «Error: operation returned PHP_CALL_FAILED.», «result status failed», выполняет plugin_show_error и «FATAL ERROR detected (msg = Ошибка приложения)»; на экране — «Ошибка приложения / Произошла ошибка. Приложение будет закрыто.». ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c043 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве файл $FS_PREFIX/config/hd_debug/PLUGIN_OPEXEC.txt существовал до перезапуска оболочки (am force-stop в 22:07:27, новый pid в 22:07:31), и после старта в shell.log появилось «hd_debug D: using PLUGIN_OPEXEC = 1». ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при старте оболочки с $FS_PREFIX/config/hd_debug/PLUGIN_UPDATE.txt = 1 строка «hd_debug D: using PLUGIN_UPDATE = …» в shell.log не выводится, тогда как созданный рядом PLUGIN_OPEXEC.txt = 1 даёт «hd_debug D: using PLUGIN_OPEXEC = 1». ↩
-
fw-tv188b-261021-0117-r25.c327 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 предупреждение PHP попадает в /tmp/run/<плагин>.log и для выражения с оператором подавления @: @mkdir(...) в main.php:11 тестового плагина при существующем каталоге дал строку «[…/main.php:11] [E_WARNING] mkdir() …: File exists» при каждом запуске php_server. ↩
-
fw-tv188b-261021-0117-r25.c330 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 метки времени в /tmp/run/<плагин>.log и shell.log на 3 часа меньше местного времени: вызов, который date() в php_server test_plugin5 записал как 13:38:00, в логе плагина помечен 10:38:00.049. ↩
-
fw-tv188b-261021-0117-r25.c253 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 встроенный PHP (php_server и php-cgi CGI) в команде shell_exec добавляет $FS_PREFIX (/data/data/com.dunehd.app) к словам /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в одинарных кавычках ('/tmp/h'), но не к /etc/…, не к x/tmp/f и не к пути в двойных кавычках ("/tmp/g"). ↩
-
fw-tv188b-261021-0117-r25.c256 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 shell_exec во встроенном PHP (php_server и php-cgi CGI) выполняет команду через /system/bin/sh: readlink /proc/$$/exe даёт /system/bin/sh, $0 — sh. ↩
-
fw-tv188b-261021-0117-r25.c257 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server PHP-плагинов (test_plugin6, shell_ext, dune-hd.tv, android_apps) PHP_PROC_OPEN_SH=/data/data/com.dunehd.app/bin/sh; $FS_PREFIX/bin/sh — ссылка на /data/data/com.dunehd.app/lib/libxxx_bash.so. ↩
-
fw-tv188b-261021-0117-r25.c258 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php-cgi CGI плагина переменной PHP_PROC_OPEN_SH нет (getenv = false), а FS_PREFIX = /data/data/com.dunehd.app есть. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c014 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_cmd ищет в команде символы '/' и проверяет путь, только если перед '/' стоит пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или обратная кавычка; после двойной кавычки, '=', '|', ':', табуляции и прочих символов путь не переписывается ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c085 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd, если команда начинается с '/' и путь требует префикса (_php_path_needs_prefix.part.0), но не начинается с /firmware/bin/ или /firmware_ext/php/, ставит в начало результата «sh ».
- fw-tv188b-261021-0117-r25--libphp5.c086 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_add_fs_prefix_to_cmd дописывает $FS_PREFIX к пути у '/', только если байт перед '/' — пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или '`'; для '/' в первом символе команды проверяется байт перед началом строки.
-
fw-tv188b-261021-0117-r25--libphp5.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве exec команды /config/kbp11_x.sh first-word из php_server вернул rc=127 и sh: /config/kbp11_x.sh: No such file or directory; file_get_contents того же пути с use_include_path=true прочитал 49 байт. ↩
-
- fw-tv188b-261021-0117-r25--libphp5.c082 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве чистый bg2 записал begin и метку перед shell_exec("sleep 61 &") из php_server 2929; в сохранённом отчёте нет записи возврата, а ожидание end bg2 показало 0 → 0 за 75 с.
- fw-tv188b-261021-0117-r25--libphp5.c083 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В чистом bg2 проверки на устройстве оболочка отменила handle_user_input по тайм-ауту 30.0 с, убила PHP-server и записала отмену операции через 30.333 с с сообщением «Превышено время операции».
-
fw-tv188b-261021-0117-r25--libphp5.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве shell_exec(sleep 61 >/dev/null 2>&1 &) вернулся за 0.01 с; процесс sleep 23847 с PPid=1 оставался после kill php_server 23841 и сохранял открытые pipe-дескрипторы 93/98. ↩
-
plg-dc-dune-backup.c007 · code · unknown; прошивка — · global_actions/gui_start и global_actions/install с типом plugin_system запускают bin/gui_start.sh &. ↩
-
plg-dc-dune-backup.c048 · code · unknown; прошивка — · bin/gui_start.sh запрещает повторный запуск demon_as.sh (проверка ps w и pidof), затем запускает демон через /system/dunehd/dunehd_service do, если этот файл есть, иначе напрямую. ↩
-
plg-dc-dune-backup.c153 · code · unknown; прошивка — · demon_as.sh без аргумента не завершается: после sleep 10 и ожидания интернета он входит в while true, спит 60 с и при наличии auto_start.sh и разрешении valid_auto_start.sh запускает его; с непустым $1 он только пишет значение в Dune_backup_autostart_sleep и выходит. ↩
-
plg-dc-dune-backup.c150 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На r25 2026-10-23 в ps три процесса sh /data/data/com.dunehd.app/flashdata/plugins/Dune_backup/bin/demon_as.sh работают от root с ppid 1; у процесса 3027 дочерний sleep 60. ↩
-
plg-dc-dune-backup.c151 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На r25 в прогоне 2026-11-03 lead зафиксировал 75 работающих копий demon_as.sh; в шапках hdr.sh того же прогона app_pid перечисляет десятки процессов с ppid 1. ↩
-
plg-dc-dune-backup.c152 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В прогоне r25 2026-11-03 действие gui_start Dune_backup запускалось семь раз — с 15:57:56 до 18:14:45. ↩
-
plg-dc-dune-backup.c147 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24, 261021_0117_r25 · В tv188b r22/r24/r25 init-скрипт init.amlogic.rc перемонтирует /proc с опциями hidepid=2,gid=3009. ↩
-
plg-dc-dune-backup.c149 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На r25 глобальные действия plugin_system (наблюдались install и uninstall тестового плагина) выполняются как uid=1000(system) gid=1000(system); в списке groups нет 3009(readproc), контекст u:r:system_app:s0. ↩
-
- plg-dc-dune-backup.c160 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · На tv188b 261101_0347_r25 (05:54) /proc смонтирован с опциями gid=3009,hidepid=2: от root видно 396 каталогов /proc/
. - plg-dc-dune-backup.c161 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · На tv188b 261101_0347_r25 plugin_system тестового плагина (шаг e_ps) и exec из php_server (шаг e_php) выполняются как uid=1000(system) без группы 3009(readproc) и видят 31 каталог /proc/
(root — 396); ps w | grep demon_as из них показывает только свои процессы, pidof demon_as.sh возвращает 1.
- plg-dc-dune-backup.c160 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · На tv188b 261101_0347_r25 (05:54) /proc смонтирован с опциями gid=3009,hidepid=2: от root видно 396 каталогов /proc/
-
plg-dc-dune-backup.c157 · code · unknown; прошивка — · main_menu_screen.php вызывает test_demon() при первом построении экрана (пока file_autostart пуст), при смене раздела (get_folder_views(true)) и в окне просмотра автостарта (если auto_start.sh существует); test_demon() при существующем auto_start.sh и отсутствии пути demon_as.sh в выводе ps_w() ставит флаг Dune_backup_Flag_fantom_boot и запускает demon_as.sh через Config::do_cmd без проверки gui_start.sh. ↩
-
- plg-dc-dune-backup.c162 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · На tv188b 261101_0347_r25 в прогоне (05:54, аптайм около 6 ч 53 мин после обновления прошивки) от root работающих копий demon_as.sh нет (0, pidof возвращает 1); Dune_backup 2.9.2 (version_index 292) установлен, plugins_data/Dune_backup/auto_start.sh нет.
- plg-dc-dune-backup.c163 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · На tv188b 261101_0347_r25 после одного перезапуска оболочки (am force-stop) shell.log показывает «Dune_backup: running gui_start action» и запуск sh …/Dune_backup/bin/gui_start.sh & со статусом 0, но через 40 с после перезапуска копий demon_as.sh от root по-прежнему 0 (было 0) — прироста +1, которого ждали c154/c155, нет.
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c040 · code · android-atv; прошивка 260724_0207_r24 · _php_stream_open_wrapper_ex(path, mode, options, …) при сброшенном бите 1 в options пропускает path через _php_add_fs_prefix до php_stream_locate_url_wrapper; при установленном бите 1 _php_add_fs_prefix не вызывает, а разрешает path через указатель zend_resolve_path ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c041 · code · android-atv; прошивка 260724_0207_r24 · Если mode начинается с 'r', path равен "/sys/class/net/eth0/address" и переменная HD_APK задана (php_is_apk() не 0), _php_stream_open_wrapper_ex при сброшенном бите 1 в options подменяет path на "/tmp/run/dune_mac.txt" и уже его пропускает через _php_add_fs_prefix ↩
-
fw-tv188b-260827-0003-r24--php-framework.c045 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Сравнения версий в Expr (fwv_ge/gt/le/lt) строковые: strcmp(firmware_version, аргумент) ↩
-
fw-tv188b-260827-0003-r24--php-framework.c078 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::get_item($path, $dummy=null) — заглушка, всегда возвращает false ↩
-
plg-mydune-home-tv--newui.c056 · code · unknown; прошивка — · Метода EpfsHandler::update_tv_epf в плагине нет: EpfsHandler и AbstractEpfsHandler определяют только update_tv_epfs, refresh_tv_epfs и update_all_epfs. ↩
-
fw-tv188b-261021-0117-r25.c320 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при сбое PHP-вызова (Fatal error или exit(0) в handle_user_input) оболочка пишет в shell.log «[<плагин>] [php] poll_calls() E: treating empty result as failure and stopping server», останавливает php_server («shutting down...», «stopped.»), затем «Error: operation returned PHP_CALL_FAILED.», «[handle_user_input] Failed.» и «[plugin] <плагин>: FATAL ERROR detected (msg = Ошибка приложения)». ↩
-
plg-ds-dune-hd-tv.c064 · code · unknown; прошивка — · В ensure_no_internet_epfs_created используется $plugin_cookies, не определённая в этой функции. ↩
-
plg-mydune-home-tv--newui.c029 · code · unknown; прошивка — · ensure_no_internet_epfs_created пишет
.no_internet.json из DummyEpfScreen::get_folder_view_for_epf(true, …) только при first_run и отсутствии файла; флаг no_internet_epfs_created ставится в любом случае, а переменная $plugin_cookies в этой функции не определена (та же ошибка, что в DUNE-HD.TV). ↩ -
fw-tv188b-260827-0003-r24--php-framework.c056 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::http_get_document по умолчанию отключает проверку TLS-сертификата (CURLOPT_SSL_VERIFYPEER=false), следует редиректам, ставит CURLOPT_ENCODING=1 и тайм-ауты из $DEFAULT_CURL_*; опции вызывающего применяются поверх ↩
-
fw-tv188b-260827-0003-r24--php-framework.c058 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD::http_get_document бросает DuneCurlException при ошибке curl и при любом HTTP-коде, кроме 200 (включая 301/302/304); при ошибке curl создаёт флаг /tmp/run/network_monitor/force_check_on_error ↩
-
fw-tv188b-261021-0117-r25.c234 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 PHP-скрипт CGI плагина (php-cgi через CGI-обёртку), выполнивший curl_multi на 4 хендла к httpd самого плеера (http://127.0.0.1/plugins/…, http://127.0.0.1:80/cgi-bin/plugins/…, http://localhost/cgi-bin/plugins/…), доходит до curl_multi_info_read и получает все 4 сообщения с msg=1 result=0, после чего php-cgi завершается с кодом 139 и в /tmp/dune_apk_cgi_err.log появляется «Segmentation fault»; повторный запуск дал то же самое. ↩
-
fw-tv188b-261021-0117-r25.c235 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тот же тестовый плагин curl_multi (4 хендла к httpd плеера) в php_server PHP-плагина (операция handle_user_input) доходит до curl_multi_info_read со всеми 4 сообщениями msg=1 result=0; результата операция не возвращает: через ~0,25 с после её начала оболочка пишет в shell.log «[test_plugin6] [php] E: op 11 failed (read status: 2).», «shutting down...», «stopped.» и «Error: operation returned PHP_CALL_FAILED.». ↩
-
fw-tv188b-261021-0117-r25.c236 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после сбоя операции handle_user_input php_server с «op 11 failed (read status: 2)» и PHP_CALL_FAILED оболочка пишет «FATAL ERROR detected (msg = Ошибка приложения)» и показывает диалог «Ошибка приложения / Произошла ошибка. Приложение будет закрыто.» с кнопкой OK; после закрытия плеер не завис. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c028 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве curl_getinfo(h0, CURLINFO_HTTP_CODE) записал возврат 200; последняя строка отчёта — «перед curl_multi_getcontent h0», без последующей метки этого вызова. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c029 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В multi проверки на устройстве оболочка получила EOF от PHP-сервера, записала PHP_CALL_FAILED и stopped; end multi за 25 с не появился, а при сборе php_server тестового плагина уже не найден. ↩
-
fw-tv188b-261021-0117-r25.c249 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi curl_version() сообщает version 7.67.0, ssl_version OpenSSL/1.0.1u, libz_version 1.2.11, host arm-unknown-linux-androideabi. ↩
-
fw-tv188b-261021-0117-r25.c250 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php_server и php-cgi не определены константы CURLOPT_ACCEPT_ENCODING, CURLOPT_RESOLVE, CURL_SSLVERSION_TLSv1_2, CURLOPT_SSL_VERIFYSTATUS, CURLOPT_TCP_KEEPALIVE, CURLMOPT_PIPELINING и CURLMOPT_MAXCONNECTS; CURLOPT_ENCODING (10102), CURLOPT_SSLVERSION, CURLOPT_CAINFO, CURLOPT_TIMEOUT_MS, CURLOPT_CONNECTTIMEOUT_MS, CURLOPT_NOSIGNAL и CURLOPT_IPRESOLVE определены. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c036 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · CA-бандлы всех пяти исследованных сборок совпадают по SHA-256 722be2869ed2c2a949e5edb75b030f1e737e869ca8e8f70bc8d876dd93227ead. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c037 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · Заголовки CA-бандлов пяти исследованных сборок датируют данные Mozilla 11 октября 2022 года. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c043 · code · android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24, 1.0.1-1000-260724_0207_r24 · В общем CA-бандле сертификат Entrust Root Certification Authority имеет notAfter 2026-11-27 20:53:42 UTC. ↩
-
fw-tv188b-261021-0117-r25.c252 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и php-cgi по сертификатам /firmware/certs/ca-bundle.crt (143 PEM-блока) даёт validTo_time_t < time() у 62; наименьшее значение — 1969-12-31 (AffirmTrust Premium), наибольшее — 2038-01-19; ближайший будущий срок — 2026-11-27 (Entrust Root Certification Authority). ↩
-
- fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c042 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и в php-cgi даёт validTo_time_t = -1 (gmdate — 1969-12-31 23:59:59) у всех сертификатов /firmware/certs/ca-bundle.crt со сроком позже 2038-01-19 03:14:07 UTC (57 из 143), а более ранние сроки переводит верно; 2147483647 (2038-01-19 03:14:07) — настоящий срок сертификата GlobalSign.
- fw-tv188b-261021-0117-r25.c331 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 openssl_x509_parse() в php_server и в php-cgi даёт validTo_time_t = -1 (gmdate — 1969-12-31 23:59:59) у всех сертификатов /firmware/certs/ca-bundle.crt со сроком позже 2038-01-19 03:14:07 UTC (57 из 143), а более ранние сроки переводит верно; 2147483647 (2038-01-19 03:14:07) — настоящий срок сертификата GlobalSign.
-
fw-tv188b-261021-0117-r25--libphp5.c046 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) при CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt и включённой проверке TLS 17 из 19 хостов hosts10.txt получили errno 0; исключения — www.ssl.com (errno 60) и kodikapi.com (errno 35). ↩
-
fw-tv188b-261021-0117-r25--libphp5.c047 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server (uid 1000) с бандлом без сертификата «Entrust Root Certification Authority» при включённой проверке TLS те же 17 из 19 хостов hosts10.txt получили errno 0; исключения те же — www.ssl.com (60) и kodikapi.com (35). ↩
-
fw-tv188b-261021-0117-r25--libphp5.c050 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · www.ssl.com на tv188b r25 из php_server (uid 1000) с полным бандлом, без корня Entrust и только с корнем Entrust при включённой проверке TLS даёт errno 60 «self signed certificate in certificate chain»; без проверки — HTTP 200, а цепочка заканчивается самоподписанным SSL.com TLS RSA Root CA 2022. ↩
-
fw-tv188b-261021-0117-r25--libphp5.c053 · code · android-dune-fw; прошивка 261021_0117_r25 · В ca-bundle.crt r25 есть четыре корня SSL.com —
SSL.com Root Certification Authority RSA,SSL.com Root Certification Authority ECC,SSL.com EV Root Certification Authority RSA R2иSSL.com EV Root Certification Authority ECC; сертификатаSSL.com TLS RSA Root CA 2022в бандле нет. ↩ -
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c024 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_init(http://localhost/cgi-bin/plugins/test_plugin11/host.sh) из php_server привёл к CGI HTTP_HOST=localhost и пустой curl_error.
- fw-tv188b-261021-0117-r25.c378 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве php_server плагина test_plugin6 (отчёт curl_multi ctx=php_server, 15:08:30), задавший URL через curl_init($u), обратился к http://localhost/cgi-bin/plugins/test_plugin6/ping.sh?via=localhost — CGI получил HTTP_HOST=localhost; запрос к http://127.0.0.1:80/cgi-bin/plugins/test_plugin6/ping.sh?via=127.0.0.1 пришёл с HTTP_HOST=127.0.0.1.
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c023 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве curl_setopt(CURLOPT_URL,http://localhost/cgi-bin/plugins/test_plugin11/host.sh) из php_server привёл к CGI HTTP_HOST=127.0.0.1 и пустой curl_error. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c041 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запрос из php_server функцией file_get_contents к http://localhost/cgi-bin/plugins/
/… приходит в httpd с HTTP_HOST=127.0.0.1, а curl к тому же URL — с HTTP_HOST=localhost: localhost заменяется на 127.0.0.1 в потоковой обёртке http, но не в curl. ↩
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c016 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 zif_curl_init при переданном URL вызывает php_curl_option_url.isra.7 напрямую; HTTP-подстановка перед этим вызовом есть в URL-ветви _php_curl_setopt, поэтому эти две точки входа имеют разный маршрут обработки URL. ↩
-
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c032 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет префикс URL http://localhost/cgi-bin/plugins/ на http://127.0.0.1:
/cgi-bin/plugins/, сохраняя хвост URL. - fw-tv188b-261021-0117-r25--libphp5--curl-http.c033 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет и префикс без порта http://127.0.0.1/cgi-bin/plugins/ на http://127.0.0.1:
/cgi-bin/plugins/ тем же кодом.
- fw-tv188b-261021-0117-r25--libphp5--curl-http.c032 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http при заданной HD_HTTP_LOCAL_PORT заменяет префикс URL http://localhost/cgi-bin/plugins/ на http://127.0.0.1:
-
fw-tv188b-261021-0117-r25--libphp5--curl-http.c034 · code · android-dune-fw; прошивка 261021_0117_r25 · В r25 _php_do_add_fs_prefix_to_http без HD_HTTP_LOCAL_PORT, а также для http://-URL с другим хостом или путём порт не подставляет и передаёт URL в _php_apply_lcreg_to_http; URL не на http:// возвращается без обработки. ↩
-
plg-dc-globaltv.c038 · code · unknown; прошивка — · Комментарий в библиотеке: change_tv_favorites() может вернуть NULL даже при успешном выполнении. ↩
-
plg-dc-widget-ext.c016 · code · unknown; прошивка — · Комментарий в библиотеке: change_tv_favorites() может вернуть NULL даже при успешном выполнении ↩
-
plg-mydune-home-tv--update-cgi.c012 · code · unknown; прошивка — · Общие опции curl — --silent --location -k, а CURL_CA_BUNDLE экспортируется в $FS_PREFIX/firmware/certs/ca-bundle.crt. ↩
-
plg-mydune-home-tv--update-cgi.c011 · code · unknown; прошивка — · В выборе curl нет завершающего else: путь к curl присваивается только для android/0/87xx/864x/867x/865x; при другом platform_kind переменная CURL не получает путь — в строке 36 к ней добавляются только флаги. ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c011 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Код возврата movie_suppliers_update.sh только логируется («E: command failed with status»); movie_suppliers_params.txt записывается и при ошибке, так что повторного запуска до смены версии или списка id нет ↩
-
fw-tv188b-261021-0117-r25.c127 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при коде выхода 3 у movie_suppliers_update.sh оболочка всё равно записала movie_suppliers_params.txt («1:kbp6_app_n-…»). ↩
-
fw-tv188b-261021-0117-r25.c188 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у поставщика kbp5_stream (playback_type stream) сразу после ответа do_file_search серии — в пределах 0,12 с, без выбора пользователя — оболочка по очереди вызвала get_stream_url для файлов без url: сначала f1, затем f2_err. ↩
-
fw-tv188b-261021-0117-r25.c190 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 shell_ext/bin/media_check вызывает /firmware/scripts/ffmpeg.sh, а такого файла на устройстве нет: «media_check: line 27: /firmware/scripts/ffmpeg.sh: No such file or directory», «ffmpeg finished with status 1». ↩
-
fw-tv188b-261021-0117-r25.c194 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 stream_special не использует url файла из ответа do_file_search: у s1 был url http://kbp5.invalid/not-used-s1, но оболочка запросила URL через get_stream_url и взяла его результат, а в url элемента stream_url пустой, file_id s1. ↩
-
fw-tv188b-261021-0117-r25.c196 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при запуске трейлера t1, у которого в ответе do_file_search есть url, оболочка вызывает get_stream_url {"fileId":"t1"} и берёт его результат — и у kbp5_stream (stream), и у kbp5_special (stream_special); в url элемента stream_url пустой. ↩
-
fw-tv188b-261021-0117-r25.c138 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строка bin «am start -p 'com.android.tv.settings' -a android.intent.action.MAIN -c android.intent.category.LEANBACK_LAUNCHER» не открыла приложение: в logcat записан START {act=MAIN cat=[LEANBACK_LAUNCHER] pkg=com.android.tv.settings}, но «activity launch status: -1». ↩
-
fw-tv188b-261021-0117-r25.c134 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строки bin ответа start_playback_app «am start -n
/ », «am start --activity-clear-task -n / » и «am start 'intent:#Intent;component= / ;end'» запустили указанную activity (com.android.tv.settings/.MainSettings): «activity launch status: 0», в logcat START и Displayed, на экране открылись настройки Android. ↩ -
fw-tv188b-261021-0117-r25--app-launch.c006 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Перед запуском shell_ext r25 пропускает bin поставщика через finalize_launch_cmd(cmd, package_name, src) и возвращает launch_ext_app с ensure_playback_stopped=true, delay=wait_app_start_delay (по умолчанию -1), package из ответа и error_action — показ errmsg_failed_to_start_playback. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c062 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Ожидание потери фокуса fcn.00560a58(delay, метка) в tv188b r25 — если оболочка уже без фокуса, «%s: shell app is already lost focus» и результат 1; если delay < 1 — сразу «%s: wait for shell app loosing focus timed-out» и 0; иначе каждые 100 мс (usleep(100000)) проверяет фокус до delay секунд — потеря фокуса даёт «%s: shell app lost focus in %.2fs» и ненулевой результат, истечение срока — «timed-out» и 0. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay 0 (am start настроек) дал «activity launch status: 0», через 4,968 мс — «general: wait for shell app loosing focus timed-out»; настройки открылись (Displayed +123ms), и поверх них выполнился error_action действия — диалог «KB7 error_action / delay=0». ↩
-
fw-tv188b-261021-0117-r25--app-launch.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве в серии из четырёх запусков launch_ext_app с delay 0 все дали «activity launch status: 0», но ровно один (n=5) — через 1,488 мс «wait for shell app loosing focus timed-out» и show_error KB9 error_action; в остальных трёх — «already lost focus». В n=5 настройки открылись (Displayed +129ms). ↩
-
- fw-tv188b-261021-0117-r25--app-launch.c079 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay −1 (am start настроек) дал activity launch status 0, через 3,419 мс — «general: shell app is already lost focus»; настройки открылись (resumed MainSettings), error_action не выполнялся.
- fw-tv188b-261021-0117-r25--app-launch.c080 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве launch_ext_app с delay 10 (am start настроек) дал activity launch status 0, через 5,243 мс — «general: shell app is already lost focus»; настройки открылись (Displayed +105ms), error_action не выполнялся.
-
fw-tv188b-260827-0003-r24--movie-suppliers.c061 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Нет пакета — generic отвечает error.missing_app (indirect true, urls http://online.dune-hd.com/apk/generic/
.txt); иначе {bin, package, wait_app_start_delay 10, title, indirect true, urls} ↩ -
fw-tv188b-261021-0117-r25--app-launch.c047 · code · tv188b, android-dune-fw, android-atv; прошивка 261021_0117_r25, 260724_0207_r24 · IntentBuilder (dune.apk tv188b r25 и APK DMC) читает опции, пока очередной аргумент начинается с «-»; «--» завершает опции; короткая опция длиннее двух символов делится — «-nX» значит «-n X»; первый аргумент не с «-» — позиционный, после него doMakeIntent аргументов больше не читает (опции и прочее после позиционного молча игнорируются, ошибки нет). ↩
-
fw-tv188b-261021-0117-r25--app-launch.c046 · code · tv188b, android-dune-fw, android-atv; прошивка 261021_0117_r25, 260724_0207_r24 · Флаги intent в IntentBuilder (dune.apk tv188b r25 и APK DMC) — addFlags: --grant-read-uri-permission 0x1, --grant-write-uri-permission 0x2, --debug-log-resolution 0x8, --exclude-stopped-packages 0x10, --include-stopped-packages 0x20, --activity-task-on-home 0x4000, --activity-clear-task 0x8000, --activity-no-animation 0x10000, --activity-reorder-to-front 0x20000, --activity-no-user-action 0x40000, --activity-clear-when-task-reset 0x80000, --activity-launched-from-history 0x100000, --activity-reset-task-if-needed 0x200000, --activity-brought-to-front 0x400000, --activity-exclude-from-recents 0x800000, --activity-previous-is-top 0x1000000, --activity-clear-top 0x4000000, --activity-multiple-task 0x8000000, --activity-single-top и --receiver-replace-pending 0x20000000, --activity-no-history и --receiver-registered-only 0x40000000; -f <число> (Integer.decode, т. е. и 0x…) — setFlags, то есть заменяет все флаги, набранные до него. ↩
-
- fw-tv188b-261021-0117-r25--app-launch.c073 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Разбор опций IntentBuilder.doMakeIntent (dune.apk tv188b r25 и APK DMC) устроен так: понимает опции -a, -d, -t, -c, -p, -e/--es, --esn, --ei, --eu, --eia, --el, --ela, --ez, -n, -f, --grant-read/write-uri-permission, --exclude/include-stopped-packages, --debug-log-resolution, 15 --activity-*, --receiver-registered-only, --receiver-replace-pending, --selector; -D, -W и -S пропускает, -P, --start-profiler и -R съедают следующий аргумент; любая другая опция (в т. ч. --user) — IllegalArgumentException «Error: Unknown option: <опция>»; makeIntent ловит исключение, пишет «Error making intent: %s» (тег ApkHelper) и возвращает null, а startActivityFromArgs пишет «Failed to create intent from args.» и возвращает false.
- fw-tv188b-261021-0117-r25--app-launch.c070 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_ext_app с cmd «am start --user 0 -n …» ушёл в apk_helper, тот вернул «Unknown option: --user» и activity launch status −1; выполнился error_action (диалог «KB9 error_action»).
-
fw-tv188b-261021-0117-r25--app-launch.c072 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В tv188b r25 нативный обработчик launch_ext_app (fcn.00560ee8 libduneshell.so), если ветка остановки воспроизведения не вернула управление раньше, для cmd, в которой есть непробельный символ, сравнивает начало cmd с «/system/dunehd/dunehd_service» (strncmp на 0x1d символов, ведущие пробелы не пропускаются): при совпадении печатает «gui_action D: run command '%s'» и передаёт cmd помощнику fcn.00560d20 (popen), иначе печатает «gui_action D: launch activity for command '%s'» и передаёт cmd разборщику apk_helper fcn.006f2b60; если помощник вернул −1, cmd дополнительно уходит в ветку launch activity. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c075 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В tv188b r25 fcn.00560d20 считает cmd «am start»-командой, если она начинается с «am start» (strncmp 8 символов) или содержит « am start» (strstr); при успешном popen для такой cmd статус pclose не учитывается: если последняя непустая строка вывода после разбора токенов и strip длиннее 4 символов и начинается с «Error», возвращается 999, иначе 0. При сбое popen возвращается 998; для cmd без этих условий при успешном popen возвращается статус pclose. ↩
-
- fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c060 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 диалог выбора воспроизведения строит для каждого поставщика (с дедупликацией по key_show_only_one) кнопку play_online с s, e, sup_id; только кнопке поставщика, чей id равен whi_sup_id последней записи истории, добавляется sup_info из get_wh_supplier_info.
- fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c062 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · make_base_button_defs (r25) берёт whi_sup_id записи по ключу all или
xтолько при наличии прогресса (with_progress); без прогресса ни одна кнопка поставщика не получает sup_info и подписи «Продолжить».
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c047 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · WatchHistory::whi_sup_id (r25) относит запись с uid-URL (схема по шаблону ^[a-z][a-z0-9_-]*://) к [local]; для прочих uid поставщик — часть до первого двоеточия, при отсутствии двоеточия или двоеточии в начале — null. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c080 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после удалённой проверки обновления на запуске (schema 2) /tmp/plugin_updater_
.txt содержит время проверки + next_check_update_timeout из update_info.xml (20), а не + check_update/timeout манифеста (3600): проверка в 1793207761 записала 1793207781, проверка в 1793207784 — 1793207804. ↩ -
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c085 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после «Напомнить позже» оболочка запускает исходную точку входа установленной старой версии, а срок следующей проверки остаётся прежним — время проверки + next_check_update_timeout (20 с): запуск через 38 с снова загрузил update info и снова показал диалог обновления. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25, если у установленной версии в check_update задано dont_ask_confirmations=yes, проверка на запуске всё равно вызывает confirm_update, но диалог обновления не показывается: «installing application» идёт сразу за «enabled by custom action», на экране ни диалога, ни сообщений. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 установка обновления после «Обновить» не показывает на экране сообщений о ходе и завершении: через ~2 и ~5 с после нажатия — сетка «Приложения» без окон, хотя в логе есть «dialog D: push progress.plugin_installer». ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c088 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после установки обновления новая версия плагина получает глобальное действие update (в новом php_server), затем запускается исходная точка входа, с которой началась проверка; глобальное действие install при обновлении не вызывается. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c089 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 файлы плагина, установленные онлайн-обновлением из tgz, — владелец system, -rw-r--r--, метка u:object_r:system_app_data_file:s0; в архиве у них тоже -rw-r--r--, а файлы v1, положенные adb push, были -rw-rw-rw-. ↩
-
doc-sdk-plugins.c066 · doc · any-documented; прошивка — · data_dir_path (постоянные данные) недоступен на устройствах без System Storage и Flash Memory Storage — тогда ключ не задан ↩
-
fw-tv188b-261021-0117-r25.c292 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 data_dir_path у test_plugin5 (плагин в flashdata) = '/data/data/com.dunehd.app/flashdata/plugins_data/test_plugin5'; is_dir() для него true. ↩
-
doc-sdk-plugins.c067 · doc · any-documented; прошивка — · После каждой записи в постоянное хранилище нужно сразу выполнять sync (команду или системный вызов) ↩
-
plg-dc-widget-ext.c086 · code · unknown; прошивка — · boot.sh проверяет каталог /flashdata/plugins_data без $FS_PREFIX, а остальные скрипты — $FS_PREFIX/flashdata/plugins_data ↩
-
plg-dc-widget-ext.c087 · code · unknown; прошивка — · PHP-часть вызывает /firmware/scripts/run_widget.sh без $FS_PREFIX, а shell-скрипты — $FS_PREFIX/firmware/scripts/run_widget.sh ↩
-
fw-tv188b-261021-0117-r25.c264 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 следующая серия VOD после автоперехода по окончании предыдущей начинается с позиции 0, а не с PluginVodInfo::initial_position_ms (8000). ↩
-
fw-tv188b-261021-0117-r25.c283 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие playback_going_to_switch приходит и в конце последней серии VOD, когда перехода на новый URL нет и плеер закрывается — после состояния stopped и непосредственно перед playback_stop с playback_end_of_stream=1. ↩
-
fw-tv188b-261021-0117-r25.c271 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 событие playback_stop приходит и при автопереходе к следующей серии VOD по окончании файла предыдущей — до вызова get_vod_stream_url для следующей серии. ↩
-
fw-tv188b-261021-0117-r25.c281 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 для ленивой серии VOD оболочка вызвала только get_vod_stream_url; get_vod_stream_info не вызывалась ни разу, хотя плагин-тестовый плагин реализует оба метода. ↩
-
fw-tv188b-261021-0117-r25--java-player.c011 · code · android-dune-fw; прошивка 261021_0117_r25 · ExoPlayerImpl.play начинает с userAgent, вычисленного Util.getUserAgent(context, "ExoPlayerDemo"). ↩
-
fw-tv188b-261021-0117-r25--java-player.c030 · code · android-dune-fw; прошивка 261021_0117_r25 · Базовый MediaPlayerImpl.doSetDataSourceAndPrepare вызывает Android MediaPlayer.setDataSource(Context, Uri) без аргумента карты HTTP-заголовков. ↩
-
fw-tv188b-261021-0117-r25--builtin-plugins-misc.c011 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В MainVod::do_get_vod_stream_info URL собирается с hls_ignore_chunk_errors:0, но при !HD::is_android() второй append_dune_param снова получает исходный $opts->stream_url, поэтому на не-Android остаётся только protocol:hls, а hls_ignore_chunk_errors:0 теряется; в MainEntryHandler::play_movie_stream второй append_dune_param получает уже дополненный $stream_url, поэтому там оба параметра сохраняются. ↩
-
- fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c038 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) на пустой ответ get_folder_rows оболочка повторяла запрос без паузы: за ~45 с случая пришло 7977 вызовов get_folder_rows (741 с ["r1","r2"], затем после кнопки вниз — 7234 с ["r1"]), повторы шли до уборки случая.
- fw-tv188b-261021-0117-r25--php-framework.c068 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при initial_range 4 из 4 и more_items_available=true, когда тестовый плагин на каждый get_regular_folder_items(from=4) снова отдавал total 4, 2 пункта и more_items_available=true, оболочка повторяла запрос from=4 без конца: 19227 запросов порций за случай (~70 с); на экране были 4 пункта «KB14 over 0…3».
-
fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c038 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) на пустой ответ get_folder_rows оболочка повторяла запрос без паузы: за ~45 с случая пришло 7977 вызовов get_folder_rows (741 с ["r1","r2"], затем после кнопки вниз — 7234 с ["r1"]), повторы шли до уборки случая. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c061 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) ответ get_folder_rows, где ряд r2 — снова row_dup с data "ld" (вариант ld, как loading-ряд), вызвал цикл повторов без паузы: 18602 вызова get_folder_rows за ~41 с (от ~190 до ~710 в секунду). ↩
-
- fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c059 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) ответ get_folder_rows, где ряд r2 — row_regular с пустым items (вариант zero), не вызвал повторов: за ~45 с случая было 2 вызова get_folder_rows (["r1","r2"] и ["r3"]).
- fw-tv188b-261021-0117-r25--plugin-loader--native-contracts-2.c060 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) ответ get_folder_rows, где вместо ряда r2 отдан row_vgap с тем же id (вариант vgap), не вызвал повторов: за ~45 с случая было 2 вызова get_folder_rows.
-
fw-tv188b-261021-0117-r25--php-framework.c068 · device · tv188b, android-dune-fw; прошивка 261101_0347_r25 · При проверке на устройстве (один прогон, 261101_0347_r25) при initial_range 4 из 4 и more_items_available=true, когда тестовый плагин на каждый get_regular_folder_items(from=4) снова отдавал total 4, 2 пункта и more_items_available=true, оболочка повторяла запрос from=4 без конца: 19227 запросов порций за случай (~70 с); на экране были 4 пункта «KB14 over 0…3». ↩
-
fw-tv188b-261021-0117-r25--php-framework.c067 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) при initial_range 4 из 4, но more_items_available=true, оболочка один раз запросила get_regular_folder_items from=4; тестовый плагин ответил total=4 и more_items_available=false, и в папке остались 4 пункта: шесть кнопок вниз довели фокус до «KB13 over 3» и дальше не сдвинули. ↩
-
plg-mydune-home-tv--newui.c053 · code · unknown; прошивка — · На GUI_EVENT_TIMER TvRowsScreen обновляет EPF и инвалидирует папки, только когда need_update_epf_mapping_flag пуст (empty), и тогда же присваивает ему false; при установленном флаге возвращает null. Свойство в классе не объявлено. ↩
-
plg-mydune-home-tv--newui.c033 · code · unknown; прошивка — · В AbstractEpfsHandler Домашнего ТВ объявлены, но нигде в плагине не вызываются get_ilang_path, get_epfs_ts_path, read_epfs_ts, write_data_ts, async_worker_warmed_up_path и get_epfs_changed_path; EpfsHandler::need_update_epf_mapping тоже никто не вызывает. ↩
-
plg-mydune-home-tv--newui.c066 · code · unknown; прошивка — · remove_playback_point запоминает id элемента в removed_playback_point и без break проваливается в clear_playback_points, где clear_playback_points = empty(removed_playback_point); затем refresh_tv_epfs и invalidate_folders(); при сборке ряда совпавший элемент пропускается, а PlaybackPoints::clear() удаляет файл истории целиком. Объявлено свойство $remove_playback_point, используется необъявленное $removed_playback_point. ↩
-
plg-mydune-home-tv--newui.c073 · code · unknown; прошивка — · В update_curr_point $time_position = max($time − curr_point->time, 0) вычисляется уже после curr_point->time = $time и поэтому всегда равна 0: запасной путь «прибавить прошедшее время» позицию не меняет. ↩
-
plg-mydune-home-tv--newui.c019 · code · unknown; прошивка — · При cenc_drm_support() ветка plugin_entry не проходит сразу в pf_checked, а возвращает check_pf_activation с новым действием pf_checked, в параметры которого копируются dialog_frame_style, action_id, mandratory_playback, initial_media_url и resume_*; first_run_after_boot и restore_from_sleep в этот набор не входят. ↩
-
plg-mydune-home-tv--newui.c018 · code · unknown; прошивка — · Аргумент first_run для update_all_epfs — isset($user_input->first_run_after_boot) || isset($user_input->restore_from_sleep): проверяется наличие полей, а не их значение (shell_ext r25 и DUNE-HD.TV берут значение через HD::get). ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c096 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_media_url с голой magnet-ссылкой (magnet:?xt=urn:btih:…) отклоняется: command_status=failed, error_kind=invalid_parameters, «'media_url' parameter value '…' is invalid: qualified url is expected»; в shell.log «[extcmd] launch_media_url failed: invalid media_url specified». ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_media_url с HTTPS-URL файла .torrent не запустил ни воспроизведение, ни плагин downloads: в shell.log только «[bp_dialog] root item #0 type URL caption '
'» без строки элемента «#1: …», каталог /tmp/run/dl_input не изменился. ↩ -
fw-tv188b-261021-0117-r25--downloads--manager-runtime.c049 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (MemTotal 8146624 kB, папка загрузок не задана) dl_manager при старте пишет в dl_manager.log «PID: …», «INITIALIZING», «D: MemTotal: 8146624 kB», «D: dl_max_loads_at_once is 3», «… is now 1», «0 groups loaded», «W: dl_folder_url not specified», «dl ipc I: warm-up», а /tmp/run/dl_state.txt — две строки «dl_folder_url = » и «dl_folder_path = » (35 байт). ↩
-
fw-tv188b-261021-0117-r25--downloads.c044 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При opts без ожидаемого JSON-ответа apiHttpPost возвращает true даже после false от file_get_contents; SettingsWrite дополнительно безусловно возвращает true. ↩
-
fw-tv188b-261021-0117-r25--downloads.c013 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · После add_dl и операций над загрузкой GUI ждёт смены статуса до 50 опросов с usleep(200000), а в result_action добавляет dl_status_changed=1 либо 0. ↩
-
fw-tv188b-261021-0117-r25--downloads--manager-runtime.c013 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Если путь файла из add уже есть в другой группе в статусе, отличном от 7, вся команда add отклоняется (add E: path already added). ↩
-
fw-tv188b-261021-0117-r25--downloads--manager-runtime.c048 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 am force-stop com.dunehd.app не останавливает dl_manager: демон pid 1981, запущенный при загрузке плеера 2026-10-27 19:43:14, пережил force-stop приложения в 20:14:56 и работал в 20:40. ↩
-
doc-sdk-plugins.c034 · doc · any-documented; прошивка — · В прошивках, отличных от 130906_b8+, section_index и is_default_section действуют только при parent_media_url = root://applications ↩
-
doc-sdk-plugins.c131 · doc · sigma-smp87xx; прошивка — · На SMP87xx есть фоновое воспроизведение (TOP MENU возвращает в меню при продолжении проигрывания); плагин должен учитывать навигацию по своим экранам во время своей сессии воспроизведения ↩
-
doc-sdk-plugins.c002 · doc · any-documented; прошивка — · Для новейших платформ ATV и Android 11+ AOSP документ отсылает к отдельному разделу важных замечаний в dune_devel_info.html ↩
-
fw-tv188b-260827-0003-r24--php-framework.c041 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · ConfigUtils::load_product_and_fw() читает /tmp/run/versions.txt (key=value: firmware_version, product, platform_kind, android_platform); для fw_apk android_platform берётся из /firmware/config/fw_apk_platform.txt ↩
-
fw-tv188b-261021-0117-r25.c122 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/run/versions.txt (145 байт, system:system) — шесть строк key=value: api_version=1.1.0, firmware_version=261021_0117_r25, product=tv188b, platform_kind=android, app_version=1.0.1-13-261021_0117_r25, app_version_code=13; ключа android_platform нет. ↩
-
fw-tv188b-261021-0117-r25.c072 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ChangeSettingsAction с restart_gui=true, reboot=false и пустыми settings перезапускает приложение Dune, а не приставку. Оболочка пишет «APK: trigger restart», pid com.dunehd.app меняется 17983 → 19586, а /proc/uptime растёт непрерывно (129033 → 129116 с). ↩
-
plg-dc-screenshoter.c082 · code · sigma-smp86xx, sigma-smp87xx; прошивка — · Копия smbtree::get_bug_platform_kind() в www/cgi-bin/do_config.php считает «багованными» platform_kind 8672, 8673 и 8758 (из /tmp/run/versions.txt) ↩
-
plg-dc-screenshoter.c086 · code · sigma-smp86xx; прошивка — · Копия smbtree::get_bug_platform_kind() в Smart_file_screen.php проверяет только platform_kind 8672 (условие продублировано); для «багованной» платформы каталоги /tmp/mnt/smb/ проверяются через shell test -d вместо is_dir() ↩
-
doc-sdk-plugins.c078 · doc · any-documented; прошивка — · Имя параметра get_vod_stream_url различается внутри документа: в объявлении интерфейса — $media_url, в обзоре возможностей — $playback_url ↩
-
doc-sdk-plugins.c120 · doc · any-documented; прошивка — · Заголовок раздела «Global plugin actions» указывает доступность с прошивки 130315_b6 ↩
-
doc-sdk-plugins.c121 · doc · any-documented; прошивка — · Текст того же раздела указывает доступность global plugin actions с прошивки 130515_2104_b6 ↩