Матрица совместимости возможностей плагина¶
Файл сгенерирован из
guide/compat-matrix.yamlкомандойuv run tools/compat_matrix.py. Править нужно YAML, а не этот файл.Черновик (2026-10-26), дополнен строками о воспроизведении и загрузках; наблюдения на устройстве tv188b r25 (PHP-рантайм,
FS_PREFIXв PHP, история, запуск приложений, операции и IP Control) и код запуска приложений r25 и APK DMC,FS_PREFIXв APK, онлайн-обновления. Строки — возможности, на которые опираются плагины; столбцы — прошивки и классы устройств, по которым в базе есть разобранный код. Каждый факт в ячейке — со ссылкой на claim и его уровнем (code,device,doc). Выводы уровняinferenceи утверждения со статусомdisputedв ячейки не попадают: они собраны в разделе «Не проверено».
Как читать¶
- есть — механизм в прошивке найден; иначе — устроено по-другому, чем на tv188b r24; нет — источник прямо показывает отсутствие.
- нет данных — в базе нет утверждения для этой ячейки. Это не значит, что возможности нет: см. список пустых ячеек в конце.
codeзначит «так написано в коде прошивки», а не «так работает на устройстве». Уровеньdevice— у многих ячеек tv188b r25 (одно устройство «Pro 8K Plus» (устройство r25)1, тестовые плагиныtest_plugin5*/test_plugin6*) и у нескольких ячеек tv188b r24; на другие прошивки он не переносится.- «= tv188b r24 по sha256» — файлы те же байт в байт, поэтому код из столбца tv188b r24 применим и здесь. Поведение оболочки, которая этот код вызывает, при этом не сравнивалось.
Столбцы¶
| Столбец | Прошивка | Класс | Чем подтверждено |
|---|---|---|---|
| tv188b r24 | 260827_0003_r24 |
android-dune-fw: init выставляет HD_APK=1, HD_FW_APK=1 |
(код r24)2 code |
| tv188b r25 | 261021_0117_r25 |
та же база Android 11, что r24 | (код r25)3 code |
| tv175u r24 | 260724_0207_r24 |
старый Android: Android 9 (SDK 28), 32-битное ARM | (код r24)4 code, (код r24)5 code |
| APK r24 | 260724_0207_r24 |
android-atv: product_id — dune_apk, в firmware_features есть apk, нет fw_apk |
(код r24)6 code, (код r24)7 code |
| r22 | tv188b 250815_1012_r22, tv175u 240619_0210_r22 |
сравнения с r24, отдельного разбора r22 нет | (код r24)8 code, (код r22, r24)9 code |
Окружение плагина¶
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
1. Признаки класса: HD_APK, HD_FW_APK |
есть: init экспортирует HD_APK=1, HD_FW_APK=1 (код r24)2 code; HD читает их через getenv, is_limited_apk = apk и не fw_apk (код r24)10 code |
есть: у network_manager и httpd в окружении HD_APK=1, HD_FW_APK=1 (устройство r25)11 device, (устройство r25)12 device; в firmware_features есть apk и fw_apk (устройство r25)13 device |
иначе: init не выставляет ни HD_APK, ни HD_FW_APK (код r24)14 code; в firmware_features нет ни apk, ни fw_apk (код r24)7 code |
иначе: демонам задаётся HD_APK=1, HD_FW_APK среди строк нет (код r24)15 code; в firmware_features apk без fw_apk (код r24)7 code |
нет данных |
2. /tmp/run/versions.txt |
есть: ConfigUtils::load_product_and_fw() читает firmware_version, product, platform_kind, android_platform (код r24)16 code |
иначе: шесть строк — api_version, firmware_version, product, platform_kind=android, app_version, app_version_code; ключа android_platform нет (устройство r25)17 device; в fw_apk_platform.txt — s928x_android11 (устройство r25)18 device |
есть: init пишет product, firmware_version, platform_kind=android, android_platform (код r24)19 code |
есть: в strings оболочки — /tmp/run/versions.txt, platform_kind=android, app_version=%s (код r24)20 code |
tv175u: init пишет platform_kind=android (код r22, r24)9 code; tv188b — нет данных |
3. FS_PREFIX и корни /tmp, /config, /flashdata |
есть: FS_PREFIX=/data/data/com.dunehd.app в init (код r24)2 code и в dunehd_service.env (код r24)21 code; /tmp — tmpfs (код r24)2 code; без переменной HD::get_fs_prefix даёт пустую строку (код r24)10 code; libphp5.so — тот же файл, что в APK (код r22, r24, r25)22 code |
есть: FS_PREFIX=/data/data/com.dunehd.app у демонов (устройство r25)11 device; встроенный PHP в shell_exec добавляет $FS_PREFIX к /tmp/…, /firmware/…, /config/…, /flashdata/… и к пути в '…', но не в "…" (устройство r25)23 device; в PHP realpath('/config') = $FS_PREFIX/config (устройство r25)24 device, /flashdata существует (устройство r25)25 device; libphp5.so другой, чем в r24 (код r22, r24, r25)22 code |
иначе: init не выставляет FS_PREFIX (код r24)14 code; /firmware, /firmware_ext, /flashdata, /config — bind-монтирования из /system/dunehd и /data/dunehd (код r24)26 code |
иначе: префикс — "/data/data/" + <имя пакета> (код r24)27 code; демонам задаются FS_PREFIX, HOME, PWD = префикс (код r24)28 code; Java-слой дописывает префикс к путям /tmp, /config, /fconfig, /flashdata, /firmware, /firmware_ext (код r24)29 code; libphp5.so в путях файловых функций ставит FS_PREFIX перед путём под корнями (код r24)30 code, корни — /tmp, /firmware, /config, /flashdata, /fconfig (код r24)31 code; virtual_file_ex склеивает префиксы с абсолютным путём до tsrm_realpath_r (код r24)32 code; открытие потока ставит префикс до выбора обёртки, но не при поиске по include_path (код r24)33 code; чтение /sys/class/net/eth0/address подменяется на /tmp/run/dune_mac.txt (код r24)34 code, в командах — только после пробела, !, &, ', (, ), ;, <, >, ` (код r24)35 code; проверка корня не учитывает границу каталога: str_starts_with(path, s) — это strncmp(path, s, strlen(s)) == 0, поэтому проверку проходят и /firmware_ext/…, /tmpX, /config2/…, /flashdata_old/… (код r24)36 code |
tv188b: init запускает файлы из $FS_PREFIX/config/boot (код r22)37 code; значение — нет данных |
4. data_dir_path, tmp_dir_path |
есть: install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url — элементы DuneSystem::$properties (код r24)38 code; в оболочке шаблоны /config/plugins_data/%s, /tmp/plugins/%s (код r24)39 code |
есть: у плагина из flashdata install_dir_path = $FS_PREFIX/flashdata/plugins/<p> (устройство r25)40 device, tmp_dir_path = $FS_PREFIX/tmp/plugins/<p> (устройство r25)41 device, data_dir_path = $FS_PREFIX/flashdata/plugins_data/<p> (устройство r25)42 device; встроенный downloads пишет в tmp_dir_path (код r25)43 code |
init создаёт /flashdata/plugins/, /flashdata/plugins_data/, /tmp/plugins/ (код r24)44 code |
Java-слой создаёт config, fconfig, flashdata/plugins, flashdata/plugins_data, flashdata/plugins_archive, flashdata/plugins_epfs (код r24)45 code и tmp/plugins (код r24)46 code |
нет данных |
5. Автозапуск из /config/boot |
есть: binit.sh по очереди, без фона, запускает исполняемые файлы $FS_PREFIX/config/boot (код r24)47 code |
есть: /system/xbin/dunehd/init ждёт $FS_PREFIX (до ~40 с) и запускает binit.sh, а тот выполняет каждый исполняемый файл из $FS_PREFIX/config/boot (код r25)48 code |
иначе: в фоне из binit.sh или init (код r22, r24)49 code |
нет данных | tv188b: цикл записан прямо в init (код r22)37 code; tv175u: в фоне (код r22, r24)49 code |
Поставщик каталога «Фильмы»¶
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
6. Регистрация через bin/movie_suppliers_update.sh |
есть: shell_ext запускает sh <плагин>/bin/movie_suppliers_update.sh с парами <id> <caption>, только если строка version_index:id1-id2… изменилась (код r24)50 code; код возврата только логируется, повтора до смены версии нет (код r24)51 code; описатель копируется в /tmp/movie_suppliers/<id> (код r24)52 code; на устройстве movie_suppliers есть в installed_plugins.xml сторонних плагинов (устройство r24)53 device |
есть: скрипт запущен с парами <id> <id> (устройство r25)54 device, повторно — после смены version_index (устройство r25)55 device, без смены — нет (устройство r25)56 device; при коде выхода 3 params записан (устройство r25)57 device и поставщики зарегистрированы (устройство r25)58 device; список поставщиков перечитывается и при смене mtime /tmp/movie_suppliers (код r25)59 code |
нет данных | нет данных | иначе (tv188b): youtube регистрировался сам — bin/register_supplier.sh писал описатель прямо в $FS_PREFIX/tmp/movie_suppliers/YouTube (код r22)60 code |
7. playback_type (stream, stream_special, app) и play_action |
есть: допустимы stream, stream_special, app (код r24)61 code; непустой play_action важнее playback_type (код r24)62 code; stream_special не открывает экран выбора файлов (код r24)63 code; для stream_special URL берётся из get_stream_url, а не из url ответа do_file_search: поставщик должен реализовать get_stream_url (код r24)64 code |
есть: описателя из пяти ключей хватило для регистрации stream и stream_special (устройство r25)65 device; stream_special сразу запросил URL первого по order файла (устройство r25)66 device; generic по-прежнему app (код r25)67 code; новый ключ dl_capable (код r25)68 code, впервые читается fixed_trailer_files (код r25)69 code; url из do_file_search у stream_special не использован (устройство r25)70 device |
нет данных | нет данных | tv188b: тот же контракт потоковых команд, что в r24 (код r22)71 code |
8. Запуск приложения из bin поставщика |
есть: успешный ответ start_playback_app — bin, package, wait_app_start_delay, title, запуск через launch_ext_app (код r24)72 code; error.missing_app превращается в установку приложения (код r24)73 code; dune.apk с sharedUserId=android.uid.system (код r24, r25)74 code; нативный обработчик r24: ветка dunehd_service → popen, остальное → apk_helper (код r24)75 code, apk_helper требует am start, снимает кавычки, отбрасывает >/2> и зовёт JNI startActivityFromArgs (код r24)76 code; ожидание фокуса и command_status — (код r24)77 code |
есть: am start -n …, --activity-clear-task -n … и 'intent:#Intent;component=…;end' открыли activity (устройство r25)78 device; -p '<пакет>' -a MAIN -c LEANBACK_LAUNCHER — статус −1 (устройство r25)79 device; строку разбирает само приложение, без am и sh (устройство r25)80 device; пакета нет — «Не удалось запустить воспроизведение» (устройство r25)81 device; generic строит am start с -p только при известном пакете (код r25)82 code, выбирает HBOMax/Max по стране (код r25)83 code; do_cmd обрезает хвостовые пробелы stdout (код r25)84 code; cmd с /system/dunehd/dunehd_service в начале идёт в popen, иначе — в apk_helper (код r25)85 code, на r25 ветки видны в shell.log (устройство r25)86 device, у dunehd_service do am start код возврата не учитывается: 999 — только последняя непустая строка вывода, начинающаяся с Error (код r25)87 code; неизвестная опция am start, в т. ч. --user, — статус −1 (код r25)88 code, (устройство r25)89 device; при delay < 1 ожидание фокуса сразу кончается неудачей (код r25)90 code: с delay 0 после успешного запуска выполнился error_action при проверке на устройстве (устройство r25)91 device, в серии проверки на устройстве — один раз из четырёх (устройство r25)92 device, с −1 и 10 — нет (устройство r25)93 device, в серии с −1 — ни разу (устройство r25)94 device |
нет данных | иначе: shell_ext/android_apps/model.php = tv188b r24 (код r24)95 code, но у dune.apk нет sharedUserId (код r24)96 code и в обработчике нет строк ветки «run command» (код r24)97 code; любая cmd идёт в apk_helper, popen нет (код r24)98 code; apk_helper требует am start, снимает кавычки, отбрасывает >…/2>… (код r24)99 code |
нет данных |
9. История и «Продолжить»: wh_* |
есть: play_recent требует sup_id и movie_id и переносит все wh_* в sup_info (код r24)100 code; кнопки поставщиков sup_info не получают (код r24)101 code |
есть, шире: кнопка поставщика последней записи истории с прогрессом получает sup_info с wh_* (код r25)102 code, (код r25)103 code; downloads вызывает play_recent с wh_uid (код r25)104 code; plugin VOD с recent_uid даёт запись на каждый запуск, без recent_uid — ни одной (устройство r25)105 device, (устройство r25)106 device; после ручного STOP запись появляется через ~1 с и переживает перезапуск (устройство r25)107 device; initial_position_ms=-1 с тем же recent_uid предлагает продолжить с сохранённой позиции (устройство r25)108 device |
нет данных | нет данных | нет данных |
Веб и PHP¶
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
10. CGI плагина: run_plugin_cgi, PLUGIN_* |
есть: run_plugin_cgi экспортирует PLUGIN_CGI_DIR, PLUGIN_NAME, SCRIPT_FILENAME и запускает скрипт через sh (код r24)109 code; stderr — в $FS_PREFIX/tmp/dune_apk_cgi_err.log (код r24)110 code; на каждый файл www/cgi-bin — одноимённая ссылка на run_plugin_cgi в /tmp/www/cgi-bin/plugins/<p>/ (устройство r24)111 device |
есть: CGI получает PLUGIN_NAME=<p>, а PLUGIN_CGI_DIR и SCRIPT_FILENAME — реальные пути под $FS_PREFIX/flashdata/plugins/<p>/www/cgi-bin (устройство r25)112 device; $0 — абсолютный путь, cwd — PLUGIN_CGI_DIR (устройство r25)113 device; сервер — busybox httpd/1.35.0 (устройство r25)114 device; «/» в конце URL — 404 (устройство r25)115 device |
иначе: init запускает /bin/httpd с корнем /tmp/www (код r24)116 code и ставит /tmp/www/cgi-bin/do (код r24)117 code; run_plugin_cgi и PLUGIN_* — нет данных |
есть: run_plugin_cgi совпадает по sha256 с tv188b r24 (код r24)118 code, выставляет PLUGIN_CGI_DIR, PLUGIN_NAME, SCRIPT_FILENAME (код r24)119 code |
tv188b: у встроенного youtube есть CGI www/cgi-bin/play.php (код r22)120 code; окружение — нет данных |
| 11. Локальный HTTP-порт | есть: HD_HTTP_LOCAL_PORT=80 (код r24)121 code; plugin_www_url, plugin_cgi_url — шаблоны http://127.0.0.1:%d/… (код r24)122 code |
есть: HD_HTTP_LOCAL_PORT=80, порт 80 слушает httpd (устройство r25)12 device, (устройство r25)123 device; plugin_www_url = http://127.0.0.1:80/plugins/<p>/ (устройство r25)124 device |
нет данных | иначе: HD_HTTP_LOCAL_PORT=11080 (код r24)125 code; libphp5.so при заданной HD_HTTP_LOCAL_PORT дописывает порт к http://127.0.0.1/cgi-bin/plugins/… (код r24)126 code, в curl — только для одной опции (0x2712) (код r24)127 code |
нет данных |
12. uid процессов CGI и php_server |
php_server — дочерние процессы com.dunehd.app (устройство r24)128 device; uid 1000 (system) (устройство r24)129 device |
CGI — uid 0 (root), u:r:shell:s0 (устройство r25)130 device; php_server — uid 1000 (устройство r25)131 device, (устройство r25)132 device; bin поставщика и global_actions — uid 1000 (устройство r25)133 device, (устройство r25)134 device |
нет данных | нет данных | нет данных |
13. php_server — процесс PHP плагина |
есть: по процессу php_server на плагин (устройство r24)128 device |
есть: запускается при первом вызове плагина, а не при регистрации (устройство r25)135 device; перезапускается при смене mtime main.php (устройство r25)136 device, но не подключаемых файлов (устройство r25)137 device; статические переменные живут, пока жив процесс (устройство r25)138 device; php_server сам пишет /tmp/run/%s.pid, в r24 этой строки нет (код r25)139 code; по тайм-ауту операции оболочка убивает php_server (устройство r25)140 device, следующий вызов — в новом процессе (устройство r25)141 device; внешний kill -9 замечается при следующем вызове (устройство r25)142 device; null из call_plugin — PHP_CALL_FAILED и «Ошибка приложения» (устройство r25)143 device |
есть: та же строка использования php_server (код r24)144 code |
есть: firmware/bin/php_server → libxxx_php_server.so (код r24)145 code; оболочка запускает /firmware/bin/php_server (код r24)146 code |
нет данных |
| 14. PHP: версия и расширения | в strings libphp5.so — PHP/5.3.6 (код r22, r24, r25)147 code, OpenSSL 1.0.1u (код r22, r24, r25)148 code; php-cgi связан с libphp5.so (код r24)149 code |
PHP 5.3.6: в php_server SAPI hd (устройство r25)150 device, (устройство r25)151 device, в php-cgi CGI — cgi-fcgi (устройство r25)152 device; целые 32-битные: PHP_INT_SIZE 4 (устройство r25)153 device; JSON_BIGINT_AS_STRING, JSON_UNESCAPED_UNICODE, JSON_UNESCAPED_SLASHES, JSON_PRETTY_PRINT не определены (устройство r25)154 device; libphp5.so — другой файл, чем в r24 (код r22, r24, r25)22 code |
в strings — PHP/5.3.6 (код r22, r24, r25)147 code; libphp5.so и php-cgi совпадают по sha256 с APK (код r24)155 code |
в strings — PHP/5.3.6 (код r22, r24, r25)147 code; libphp5.so и php-cgi совпадают по sha256 с tv175u (код r24)155 code |
tv188b r22: в strings — PHP/5.3.6 (код r22, r24, r25)147 code |
15. curl, curl_multi_* |
media_check берёт /firmware/bin/curl (код r24)156 code; в shell_ext/bin лежит curl 7.19.5 под mipsel (код r24)157 code; libcurl/7.67.0 (код r22, r24, r25)158 code; имена curl_multi_* в libphp5.so есть (код r22, r24, r25)159 code |
curl_version() — 7.67.0, OpenSSL/1.0.1u (устройство r25)160 device; нет CURLOPT_ACCEPT_ENCODING, CURLOPT_RESOLVE, CURL_SSLVERSION_TLSv1_2 и др. (устройство r25)161 device; curl_multi на 4 хендла к httpd плеера: php-cgi падает с кодом 139 (устройство r25)162 device, php_server — «op 11 failed», PHP_CALL_FAILED (устройство r25)163 device; на 4 хендла к внешнему серверу (проверка на устройстве) php_server обрывается после curl_getinfo h0 = 200, перед возвратом curl_multi_getcontent h0 (устройство r25)164 device, оболочка — EOF и PHP_CALL_FAILED (устройство r25)165 device (BUG-002) |
libcurl/7.67.0 (код r22, r24, r25)158 code; имена curl_multi_* есть (код r22, r24, r25)159 code |
имена curl_multi_* есть (код r22, r24, r25)159 code; работа — нет данных |
tv188b r22: libcurl/7.67.0 (код r22, r24, r25)158 code |
| 16. CA-бандл | есть: HD::http_get_document при CURLOPT_SSL_VERIFYPEER=true ставит CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt (код r24)166 code; media_check — --cacert тот же файл (код r24)156 code; 143 сертификата (код r24)167 code |
тот же бандл: 143 сертификата, SHA-256 как в остальных сборках (код r22, r24, r25)168 code; из PHP файл доступен как /firmware/certs/ca-bundle.crt (устройство r25)169 device; HD::http_get_document изменён (сообщения лога) (код r25)170 code |
тот же бандл (код r22, r24, r25)168 code; PHP-фреймворк = tv188b r24 по sha256 (код r24)171 code |
тот же бандл (код r22, r24, r25)168 code; = tv188b r24 по sha256 (код r24)172 code |
tv188b r22: тот же бандл (код r22, r24, r25)168 code; dunelib/utils.php в r22 нет (код r22, r24)173 code |
Интерфейс и плеер¶
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
| 17. GComps | есть: вид view_gcomps (код r24)174 code, виды компонентов GComponentKind (код r24)175 code; встроенные ext_epg и ktv_start объявляют разрешение gcomps (код r24)176 code |
есть: gcomp_list.php побайтно как в r24 (код r25)177 code; новая опция GCOMP_OPT_STUB (код r25)178 code; в shell_ext/lib get_timer($media_url) потерял &$plugin_cookies в GCompsScreen и RowsScreen (код r25)179 code |
dune_api.php = tv188b r24 по sha256 (код r24)171 code; отрисовка — нет данных |
dune_api.php = tv188b r24 по sha256 (код r24)172 code; отрисовка — нет данных |
нет данных |
18. view_rows |
есть: вид view_rows (код r24)174 code; PluginRowsFolderView — pane, sel_state, actions, timer (код r24)180 code |
есть, шире: операция get_folder_rows для ленивой подгрузки строк (код r25)181 code, (код r25)182 code; тип row_dup и опция PLUGIN_ROW_OPT_LOADING (код r25)178 code |
dune_api.php = tv188b r24 (код r24)171 code; отрисовка — нет данных |
dune_api.php = tv188b r24 (код r24)172 code; отрисовка — нет данных |
нет данных |
19. Маркеры StreamMarker |
объявлены: StreamMarker — type, from, to, duration (код r24)183 code; типы intro, recap, closing_credits (код r24)184 code; PluginStreamInfo — url, markers (код r24)185 code; показ плеером — нет данных |
оболочка читает markers серии: «2 markers added» (устройство r25)186 device, duration необязателен (устройство r25)187 device; get_vod_stream_info при feature vod_get_stream_info вызывается (устройство r25)188 device; маркер intro из markers серии и из ответа get_vod_stream_info показывает кнопку «Пропустить заставку» (устройство r25)189 device, (устройство r25)190 device; маркер recap (один прогон) — та же кнопка «Пропустить заставку» (устройство r25)191 device, recap` с обратной кавычкой — «Пропустить вступление» (устройство r25)192 device; нативный конвертер возвращает 1 (recap) для строки с кавычкой, а не для 'recap' (код r25)193 code (BUG-037); closing_credits — нет данных |
объявлены: dune_api.php = tv188b r24 (код r24)171 code; показ — нет данных |
объявлены: dune_api.php = tv188b r24 (код r24)172 code; показ — нет данных |
нет (tv188b): StreamMarker, PluginStreamInfo, STREAM_MARKER_* в dune_api.php отсутствуют (код r22, r24)194 code; get_vod_stream_info не обрабатывается (код r22, r24)195 code |
Установка и обновление¶
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
20. check_update |
есть: встроенные generic и widget — schema 2, timeout 86400, auto yes (код r24)196 code; при неподдерживаемой schema проверка отключается (код r24)197 code |
есть: проверка при запуске точки входа, в т. ч. по IP Control (устройство r25)198 device; срок следующей — время проверки + next_check_update_timeout из update_info (устройство r25)199 device; диалог «Обновить» / «Напомнить позже» (устройство r25)200 device, без него при dont_ask_confirmations=yes (устройство r25)201 device; cookies и data_dir_path сохраняются (устройство r25)202 device; подробно — guide/online-upgrade.md |
есть: у встроенного radiotime блок check_update со schema 2 (код r24)203 code |
иначе: у того же radiotime блока check_update нет (код r24)203 code; оболочка: timeout по умолчанию 86400 с (код r24)204 code, срок проверки — + next_check_update_timeout, иначе + timeout (код r24)205 code, автопроверка не чаще раза в 86400 с (код r24)206 code |
нет данных |
| 21. Подпись плагина | есть: в оболочке dune_plugin.sign, dune_plugin_signer_id.txt, com.dune-hd, plugin_key.pem, DSA (код r24)207 code; установщик умеет отказывать неподписанным и при несовпадении signer_id (код r24)208 code; подписаны 6 из 13 встроенных (код r24)209 code |
есть: dune_plugin.sign у 10 встроенных плагинов (устройство r25)210 device; в shell.log «DSA verification for signer_id com.dune-hd: OK» для dune-hd.tv (устройство r25)211 device и shell_ext (устройство r25)212 device; ZIP без dune_plugin.sign и dune_plugin_signer_id.txt установлен штатно (устройство r25)213 device; в libduneutil.so есть имена external_plugins_enabled, signed, allowed_plugin_signer_ids (код r25)214 code; установка ZIP из файлового браузера (проверка на устройстве) сразу показывает диалог «Установка приложения» с «… установлено успешно.» и кнопками «Запустить»/«Закрыть», без вопроса перед установкой (устройство r25)215 device, (устройство r25)216 device; после plugin_installer:// и plugin_uninstaller:// по IP Control диалога нет (устройство r25)217 device, (устройство r25)218 device; plugin_signer вызывается только при истинном strict_verify_needed в свойствах плагина (код r25)219 code; при отказе «… but required» плагин не регистрируется (код r25)220 code, .bad_signature — пропуск в ветке со вторым аргументом 0 (код r25)221 code, «not permitted» — фильтр, в одной ветви с удалением каталога (код r25)222 code; signer_id читается из dune_plugin_signer_id.txt (код r25)223 code, список — из ro_config+0x1f0 или com.dune-hd[,customer_id] (код r25)224 code; dune_plugin.sign — до 256 байт (код r25)225 code; дайджест — по обычным файлам каталога рекурсивно, без dune_plugin.sign (у shell_ext ещё без icons) (код r25)226 code; ключ com.dune-hd встроен (код r25)227 code, для customer id — /config/plugin_key.pem или /firmware/config/plugin_key.pem (код r25)228 code; у dune-hd.tv в <params> есть <strict_verify_needed>yes (код)229 code; проверка на устройстве, по одному прогону: сторонний плагин со strict_verify_needed и без dune_plugin_signer_id.txt не зарегистрирован (устройство r25)230 device, без флага с испорченным dune_plugin.sign — зарегистрирован и работает (устройство r25)231 device, а встроенный shell_ext без флага DSA-проверку прошёл (устройство r25)232 device |
android_apps, ext_epg, kartina_tv_launcher, radiotime подписаны (код r24)233 code |
иначе: те же 4 плагина без подписи (код r24)233 code; у 5 подписанных другой dune_plugin.sign при том же dune_plugin_signer_id.txt (код r24)234 code |
нет данных |
Операции плагина и IP Control¶
Подробно — guide/plugin-operations.md и guide/ip-control.md.
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
| 22. Одна операция на плагин, тайм-аут | есть: у плагина активна одна операция, остальные ждут («postponed») (код r24)235 code; тайм-аут — в мкс (код r24)236 code; по истечении — отмена с fast = 1 и ошибка plugin_operation_timed_out (код r24)237 code, (код r24)238 code; отмена у PHP-плагина только ставит флаг (код r24)239 code |
второй вызов ждёт конца первого (устройство r25)240 device; operation_timeout в манифесте — с (устройство r25)241 device, в данных действия — мс (устройство r25)242 device; без него — 60 с (устройство r25)243 device; по тайм-ауту php_server убит, диалог «Превышено время операции» (устройство r25)140 device, (устройство r25)244 device |
нет данных | нет данных | нет данных |
| 23. IP Control: протокол и запуск плагина | cmd=status отвечает protocol_version=6 (устройство r24)245 device и недокументированными полями (устройство r24)246 device; строки 13 недокументированных команд (код r24)247 code |
plugin_launcher://{name}{ep_media_url} запускает точку входа, open_path root://applications/… — нет (устройство r25)248 device; {action_id} запускает действие без точки входа (устройство r25)249 device; голый magnet: отклоняется (устройство r25)250 device; команды ждут конца handle_user_input (устройство r25)251 device; M3U с plugin_launcher вызывает действие, пара {from=…} доходит до user_input (устройство r25)252 device; set_playback_state в VOD плагина — пауза, продолжение, перемотка (устройство r25)253 device, (устройство r25)254 device, (устройство r25)255 device, плагину — только playback_state_changed (устройство r25)256 device; ключи cmd=status во время VOD (устройство r25)257 device |
CGI do: те же строки timeout и формата ответа (код r24)258 code |
нет данных | нет данных |
Воспроизведение и загрузки¶
Подробно — guide/playback.md и guide/downloads-torrserver.md. Маркеры и get_vod_stream_info — строка 19.
| Возможность | tv188b r24 | tv188b r25 | tv175u r24 | APK r24 | r22 |
|---|---|---|---|---|---|
24. Плеер: libvlc.so, subtitles.php, buffering_ms |
libvlc.so, libxxx_dune_mediainfo.so в priv-app/dune/lib/arm/ (код r24)259 code, SHA256 отличается от r25 (код r24, r25)260 code; subtitles.php тот же, что в r25 (код r24, r25)261 code; поставщики ставят buffering_ms 3000 (код r24)262 code |
libvlc.so в priv-app/dune/lib/arm/ (код r25)263 code; buffering_ms VOD применяется (устройство r25)264 device; HTTP MP4 — VLC (устройство r25)265 device, HLS — ExoPlayer (устройство r25)266 device; http_headers на VLC не уходят (устройство r25)267 device, (устройство r25)268 device |
libvlc.so в dunehd_shell/lib/arm/ (код r24)269 code |
ExoPlayer и libVLC в dex (код r24)270 code |
нет данных |
| 25. TorrServer и загрузки | libxxx_ts.so, firmware/bin/ts есть (код r24)271 code, (код r24)272 code; плагина downloads нет (код r25)273 code, dl_manager нет (код r24)274 code |
firmware/bin/ts есть (код r25)275 code; downloads есть (код r25)276 code, dl_manager есть (код r25)277 code; загрузки идут по одной (устройство r25)278 device; голая magnet в launch_media_url отклоняется (устройство r25)250 device; встроенный TS слушает *:8095, /echo отвечает из LAN (устройство r25)279 device, процесс пережил force-stop приложения (устройство r25)280 device; торрент с одним воспроизводимым файлом играет сразу потоком (устройство r25)281 device |
нет данных | libxxx_ts.so — TorrServer MatriX.134 (код r24)282 code; downloads нет среди встроенных (код r24)283 code; dl_manager — нет данных |
нет данных |
Что SDK говорит без привязки к прошивке¶
DuneSystem::$propertiesсодержитplugin_name,install_dir_path,tmp_dir_path,data_dir_path,plugin_www_url,plugin_cgi_url(SDK)284.data_dir_pathне задан на устройствах без System Storage и Flash Memory Storage (SDK)285.- Фоновая автопроверка обновлений
check_update/autoесть с прошивки150430_r10(SDK)286. - Подписанный плагин с неверной подписью или недопустимым signer ID система не использует (SDK)287.
Расхождения¶
fixed_trailer_files. Прежнее расхождение снято: claim r25 исправлен — ключ был в описателе rutube r24 (код r24)288, новым в r25 стало его чтение оболочкой (код r25)69.versions.txt. Код r24 читает из негоandroid_platform(код r24)16, а на r25 (device) такого ключа в файле нет (устройство r25)17. Это разные версии, а не противоречие; читает ли код r25android_platformизfw_apk_platform.txt, как r24 дляfw_apk, claims r25 не говорят.- CA-бандл.
openssl_x509_parse()на r25 даётvalidTo_time_t < time()у 62 из 143 сертификатов, а значения лежат между 1969-12-31 и 2038-01-19 (устройство r25)289; PHP там 32-битный (устройство r25)153. Сроки, декодированныеopenssl x509из того же файла, — отдельные claims (например, Entrust — 2026-11-27 (код r22, r24, r25)290, GlobalSign Root CA — 2028-01-28 (код r22, r24, r25)291). Число 62 — это результат сравненияvalidTo_time_tв 32-битном PHP, а не подсчёт просроченных корней по самому файлу. Проверка на устройстве показал, откуда 1969-12-31: у всех сертификатов со сроком позже 2038-01-19 03:14:07 UTC (57 из 143)validTo_time_t= −1, более ранние сроки переводятся верно, а 2038-01-19 03:14:07 — настоящий срок GlobalSign (устройство r25)292. Связиconflicts_withнет. - Тайм-аут операций по умолчанию. SDK: 10 с (SDK)293; r25 (
device):handle_user_inputбезoperation_timeout— 60 с (устройство r25)243. Стороны связаныconflicts_with. - Проверка подписи при загрузке (строка 21). SDK: подписанный плагин с неверной подписью или недопустимым signer ID
система не использует (SDK)287; код r25: в
populate_pluginsplugin_signerвызывается только приstrict_verify_needed(код r25)219, и сторонний плагин без флага с испорченнымdune_plugin.signна r25 (device, один прогон) зарегистрирован без строкplugin_signer(устройство r25)231. SDK и код r25 связаныconflicts_with(код r25, SDK)294. - Незаданный
allowed_plugin_signer_ids(строка 21). SDK: разрешены все signer ID (SDK)295; код r25: при пустом списке допускаются толькоcom.dune-hdилиcom.dune-hd,<customer_id>(код r25)224, а поле списка заполняется изallowed_plugin_signer_ids(код r25)296. Стороны связаныconflicts_with; на устройстве не испытано.
Не проверено¶
Выводы inference и disputed — гипотезы, а не поведение. Кандидаты на проверку на устройстве. В последнем
столбце — что показал r25 (device), если показал; на r24 и другие прошивки это не переносится.
| Строка | Гипотеза | Claim | r25 (device) |
|---|---|---|---|
| 1 | В APK для PHP-плагина HD::is_limited_apk() истинно, HD::with_network_manager() ложно |
(вывод r24)297 | — |
| 1 | tv175u не подходит под android-dune-fw и образует отдельный подкласс собственной Android-прошивки |
(вывод r24)298 | — |
| 3 | FS-префикс APK — /data/data/com.dunehd.app |
(вывод r24)299 | — |
| 3 | В APK <FS-префикс>/tmp — отдельный каталог приложения, а не системный /tmp |
(вывод r24)300 | — |
| 3 | Встроенный PHP сам дописывает $FS_PREFIX к путям /firmware, /config, /flashdata |
(вывод r24)301 | в shell_exec — да (устройство r25)23 |
| 3 | В APK файловые функции PHP с путями /tmp/…, /config/…, /flashdata/… работают с $FS_PREFIX/… |
(вывод r24)302 | realpath('/config') = $FS_PREFIX/config (устройство r25)24 |
| 3 | Программа по абсолютному пути вне /firmware/bin/ и /firmware_ext/php/ запускается как sh <путь>: ELF так не запустится |
(вывод r24)303 | — |
| 3 | Путь первым словом команды получает FS_PREFIX непредсказуемо |
(вывод r24)304 | — |
| 3 | cwd в proc_open не переписывается; $env заменяет всё окружение |
(вывод r24)305 | — |
| 3 | tv188b r24: подстановка в PHP работает как в APK; tv175u r24: не работает (нет FS_PREFIX) |
(вывод r24)306 | — |
| 3 | Пути /config, /firmware, /flashdata в скриптах tv188b — короткие имена для $FS_PREFIX/… (disputed) |
(вывод r24)307 | — |
| 4 | data_dir_path — <хранилище>/plugins_data/<name>, для flashdata — с $FS_PREFIX (disputed) |
(вывод r24, r25)308 | $FS_PREFIX/flashdata/plugins_data/<p> (устройство r25)42 |
| 4 | tmp_dir_path — $FS_PREFIX/tmp/plugins/<name> для плагина из flashdata (disputed) |
(вывод r24, r25)309 | $FS_PREFIX/tmp/plugins/<p> (устройство r25)41 |
| 6 | На r24 global_actions generic не выполняются из-за флага movie_suppliers_update (disputed) |
(вывод r24)310 | — |
| 7 | По умолчанию playback_type = stream и другие умолчания описателя (disputed: часть условна) |
(код r24)311 | — |
| 8 | generic: am start '<deeplink>' или am start -p '<пакет>' (disputed: -p только при непустом пакете) |
(код r24)312 | — |
| 8 | Скрипты из data.zip в APK без бита исполнения — вызывать их через sh <путь> |
(вывод r24)313 | — |
| 8 | cmd «/system/dunehd/dunehd_service do am start …» уходит в системный am от root, где есть --user и нет ограничения exported |
(вывод r24, r25)314 | — |
| 8 | Неэкспортированная activity на tv188b запускается, на ATV с APK DMC — нет | (вывод r24, r25)315 | — |
| 8 | delay ≤ 0 даёт error_action после успешного запуска, если оболочка ещё держит фокус |
(вывод r24, r25)316 | 0 — да при проверке на устройстве (устройство r25)91, в серии проверки на устройстве — один раз из четырёх (устройство r25)92; −1 — нет (устройство r25)317, в серии — ни разу (устройство r25)94 |
| 9 | «Продолжить» у кнопки поставщика требует в истории plugin VOD uid вида <sup_id>:…, movie_id, len > 0 и pos ≥ 0 |
(вывод r25)318 | запись получает uid из recent_uid, action_plugin из recent_plugin (устройство r25)319 |
| 10 | В tv175u HTTP обслуживает busybox httpd | (вывод r24)320 | — |
| 10 | В tv188b r24 HTTP на порту 80 тоже обслуживает busybox httpd | (вывод r24)321 | httpd — ссылка на libxxx_busybox.so (устройство r25)322 |
| 11 | r24: потоковая HTTP-обёртка PHP (file_get_contents/fopen) подменяет 127.0.0.1/localhost /cgi-bin/plugins/… на адрес с $HD_HTTP_LOCAL_PORT |
(вывод r24)323 | URL в curl_init(url) к localhost пришёл с HTTP_HOST=localhost (устройство r25)324, через curl_setopt(CURLOPT_URL) — с 127.0.0.1 (устройство r25)325, file_get_contents — с 127.0.0.1 (устройство r25)326; HD_HTTP_LOCAL_PORT=80 (устройство r25)327; код r25: подстановка 127.0.0.1:<HD_HTTP_LOCAL_PORT> вместо префикса localhost есть в ветви curl_setopt, а curl_init(url) её не проходит (код r25)328 |
| 11 | В APK запросы к 127.0.0.1/localhost /cgi-bin/plugins/… через CURLOPT_URL и потоки получают порт HD_HTTP_LOCAL_PORT |
(вывод r24)329 | — |
| 3 | В APK fopen($f, $mode, true) и file_get_contents($f, true) не получают FS_PREFIX |
(вывод r24)330 | — |
| 3 | В APK realpath(), include/require и tempnam разрешают пути с FS_PREFIX |
(вывод r24)331 | realpath('/config') = $FS_PREFIX/config (устройство r25)24 |
| 3 | В APK чтение /sys/class/net/eth0/address отдаёт $FS_PREFIX/tmp/run/dune_mac.txt |
(вывод r24)332 | — |
| 12 | Через dunehd_service do процессы без root выполняют команду от root |
(вывод r24)333 | из php_server dunehd_service do id дал uid 0 (устройство r25)334 |
| 13 | php_server живёт между вызовами, статические переменные PHP переживают вызов |
(вывод r24)335 | да, пока жив процесс (устройство r25)138 |
| 22 | r24: тайм-аут не прерывает PHP-вызов, поздний результат отбрасывается (disputed) |
(вывод r24)336 | php_server убит (устройство r25)140 |
| 23 | Пары {ключ=значение} в plugin_launcher://…{action_id=…} доходят до данных действия |
(вывод r25)337 | через M3U — да (устройство r25)252 |
| 17 | Разрешение gcomps даёт доступ к графическим компонентам оболочки |
(вывод r24)338 | — |
| 20 | У rutube и youtube check_update без url только выбирает встроенную копию (disputed) |
(вывод r24)339 | — |
| 21 | Что делает загрузчик r24 с неверной подписью без флага strict_verify_needed, не установлено |
(вывод r24)340 | сторонний без флага с испорченным dune_plugin.sign зарегистрирован, его точка входа вызвала handle_user_input (устройство r25)231 |
Пустые ячейки: вопросы и задачи¶
Номер — строка матрицы. В столбце «Задача» — какая работа нужна для ответа; «новая» — работа ещё не заведена.
| Строки | Столбец | Вопрос | Задача |
|---|---|---|---|
| 6–9 | tv188b r24 | Подтвердить на r24 то, что r25 показал на устройстве (регистрация, stream_special, am start) |
новая (device r24) |
| 8 | tv188b r25 | Неэкспортированная activity; ветка dunehd_service do am start на устройстве |
новая (проверка на устройстве) |
| 20 | tv188b r24 | Совпадает ли разбор check_update в tv188b с кодом APK r24 |
новая (листинги tv188b) |
| 22, 23 | tv175u r24, APK r24 | Очередь операций, тайм-аут и IP Control вне tv188b | новая (device) |
| 9 | tv188b r25 | Запись истории plugin VOD наблюдалась (устройство r25)341; условия «Продолжить» у кнопки поставщика — не проверены | новая (тестовый плагин с recent_uid <sup_id>:…) |
| 15 | tv188b r24, r25 | Почему падает curl_multi (гипотеза о поле handle+0x16c — guide/firmware-bugs.md §7) и падает ли на r24; diff ext/curl по листингам |
новая: разбор zif_curl_multi_getcontent r25 по листингу (единица fw-tv188b-261021-0117-r25--libphp5--curl-http) |
| 16 | все | Какой путь CA использует PHP cURL без явного CURLOPT_CAINFO |
новая |
| 19 | tv188b r24, r25 | Показывает ли плеер кнопки маркеров StreamMarker? На r25 показаны intro, recap и recap` (один прогон); closing_credits и нажатие кнопки не проверены; r24 не проверялся |
новая (проверка на устройстве) |
| 21 | tv188b r25 | Изменилась ли проверка подписи в оболочке r25? Проверяются ли плагины, кроме dune-hd.tv и shell_ext; что делает plugin_config.xml |
новая |
| 12 | tv175u r24, APK r24 | Какой uid у CGI плагина и у php_server? |
новая |
| 14, 15 | tv175u r24, APK r24 | Список расширений и работа curl_multi_* на устройстве |
новая (device) |
| 6, 7, 8, 9 | tv175u r24, APK r24 | Есть ли механизм поставщиков (movie_suppliers_update.sh, playback_type, start_playback_app, play_recent) в shell_ext старого Android и APK и чем он отличается от tv188b r24? |
новая: сравнить shell_ext/movies tv175u и APK с tv188b r24 (в data.zip APK 18 файлов отличаются от tv188b r24 (код r24)342) |
| 10, 11 | tv175u r24 | Есть ли в tv175u run_plugin_cgi и PLUGIN_*, какой порт у httpd? |
новая |
| 3 | APK r24 | Листинги str_starts_with, php_is_apk и вызывающих expand_filepath_ex/tsrm_realpath (подстановка в realpath, include) |
новая (листинги APK r24) |
| 5 | APK r24 | Запускает ли APK файлы из /config/boot? |
новая |
| 17, 18 | tv175u r24, APK r24 | Отрисовывает ли оболочка старого Android и APK виды GComps и view_rows? |
новая (strings libduneshell.so tv175u и APK) |
| 2–21 | r22 | Отдельного разбора r22 нет: есть только сравнения с r24 | новая: карта tv188b 250815_1012_r22 и tv175u 240619_0210_r22 по строкам матрицы |
Список пустых ячеек (авто)¶
Всего пустых ячеек: 30 из 125.
| Строка | Пустые столбцы |
|---|---|
1. Признаки класса: HD_APK, HD_FW_APK |
r22 |
4. data_dir_path, tmp_dir_path |
r22 |
5. Автозапуск из /config/boot |
APK r24 |
6. Регистрация через bin/movie_suppliers_update.sh |
tv175u r24, APK r24 |
7. playback_type (stream, stream_special, app) и play_action |
tv175u r24, APK r24 |
8. Запуск приложения из bin поставщика |
tv175u r24, r22 |
9. История и «Продолжить»: wh_* |
tv175u r24, APK r24, r22 |
| 11. Локальный HTTP-порт | tv175u r24, r22 |
12. uid процессов CGI и php_server |
tv175u r24, APK r24, r22 |
13. php_server — процесс PHP плагина |
r22 |
| 17. GComps | r22 |
18. view_rows |
r22 |
20. check_update |
r22 |
| 21. Подпись плагина | r22 |
| 22. Одна операция на плагин, тайм-аут | tv175u r24, APK r24, r22 |
| 23. IP Control: протокол и запуск плагина | APK r24, r22 |
24. Плеер: libvlc.so, subtitles.php, buffering_ms |
r22 |
| 25. TorrServer и загрузки | tv175u r24, r22 |
-
fw-tv188b-261021-0117-r25.c098 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /fconfig/mname.txt содержит «Pro 8K Plus». ↩
-
fw-tv188b-260827-0003-r24.c021 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Скрипт /system/xbin/dunehd/init монтирует tmpfs в /tmp, запускает dunehd_service и выставляет FS_PREFIX=/data/data/com.dunehd.app, HD_APK=1, HD_FW_APK=1, HD_HTTP_LOCAL_PORT=80 ↩↩↩↩
-
fw-tv188b-261021-0117-r25.c004 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Система r25 — та же база Android 11 (RD2A.211001.002), userdebug/test-keys, плата tyson; сборка от 2026-10-20 ↩
-
fw-tv175u-260724-0207-r24.c010 · code · tv175u, android; прошивка 260724_0207_r24 · Система — Android 9 (SDK 28), сборка user с release-keys, патч безопасности 2019-09-05 ↩
-
fw-tv175u-260724-0207-r24.c013 · code · tv175u, android; прошивка 260724_0207_r24 · Пользовательское пространство 32-битное ARM: ro.product.cpu.abilist=armeabi-v7a,armeabi, abilist64 пуст ↩
-
fw-apk-260724-0207-r24.c026 · code · android-atv; прошивка 260724_0207_r24 · В APK product_id.txt и upgrade_product_id_prefix.txt содержат dune_apk (в tv175u той же сборки — tv175u) ↩
-
fw-apk-260724-0207-r24.c029 · code · android-atv; прошивка 260724_0207_r24 · firmware_features.txt в APK содержит флаг apk и не содержит fw_apk (18 флагов; в tv188b r24 есть оба, в tv175u r24 нет ни одного) ↩↩↩
-
fw-tv188b-260827-0003-r24.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · По сравнению с 250815_1012_r22 в firmware_features.txt r24 добавлены флаги dunemdb_supplier_plugin_api_v7, sup_api_v8, movie_suppliers_order, lcfg_v2, light_stop ↩
-
fw-tv175u-260724-0207-r24.c032 · code · tv175u, android; прошивка 240619_0210_r22, 260724_0207_r24 · В tv175u 240619_0210_r22 та же схема: /system/dunehd/init пишет platform_kind=android, оболочка — /system/priv-app/dunehd_shell/dunehd_shell.apk (21637409 байт против 30661088 в r24) ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c071 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · HD читает переменные окружения: is_apk — HD_APK, is_fw_apk — HD_FW_APK, get_apk_package_name — APK_PACKAGE_NAME, get_fs_prefix — FS_PREFIX (пустая строка, если не задана); is_limited_apk = apk и не fw_apk; with_network_manager = не limited_apk ↩↩
-
fw-tv188b-261021-0117-r25.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса network_manager ($FS_PREFIX/firmware/bin/network_manager, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib). ↩↩
-
fw-tv188b-261021-0117-r25.c092 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у процесса httpd ($FS_PREFIX/bin/httpd, PPID 1) в окружении HD_HTTP_LOCAL_PORT=80, HD_FW_APK=1, HD_APK=1, FS_PREFIX=/data/data/com.dunehd.app, LOG_DIR=/tmp/run, DUNEHD_SERVICE_DONT_FORK=1, PATH начинается с $FS_PREFIX/firmware/bin:$FS_PREFIX/bin:/bin, а LD_LIBRARY_PATH=$FS_PREFIX/firmware/lib:/lib:/usr/lib (без /system/xbin/dunehd/firmware/lib). ↩↩
-
fw-tv188b-261021-0117-r25.c101 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/firmware_features.txt — по флагу в строке: tmpfs, dunemdb_supplier_plugin_api_v2…v7, sup_api_v8, tv_config, newgui2021, app_root_url_type, movie_suppliers_update, movie_suppliers_order, url_sdcard, lcfg_v2, light_stop, apk, fw_apk, drm_apps, downloads. ↩
-
fw-tv175u-260724-0207-r24.c023 · code · tv175u, android; прошивка 260724_0207_r24 · Скрипт /system/dunehd/init не выставляет HD_APK, HD_FW_APK и FS_PREFIX: перед запуском dunehd_service он экспортирует только PATH, LD_LIBRARY_PATH=/firmware/lib:/lib:/usr/lib и LOG_DIR=/tmp/run ↩↩
-
fw-apk-260724-0207-r24--data-deploy.c034 · code · android-atv; прошивка 260724_0207_r24 · runDaemonProcess задаёт HD_APK=1; переменной HD_FW_APK среди его строк нет (const-string метода: LOG_DIR, HD_APK, HD_HTTP_LOCAL_PORT, FS_PREFIX, PATH, LD_LIBRARY_PATH, HOME, PWD, /tmp/run и пути) ↩
-
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.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/firmware/config/fw_apk_platform.txt содержит s928x_android11. ↩
-
fw-tv175u-260724-0207-r24.c022 · code · tv175u, android; прошивка 260724_0207_r24 · Скрипт /system/dunehd/init пишет /tmp/run/versions.txt: product (из product_id.txt), firmware_version, platform_kind=android и android_platform (из android_platform.txt) ↩
-
fw-apk-260724-0207-r24.c033 · code · android-atv; прошивка 260724_0207_r24 · В strings libduneshell.so APK после пути модуля player/src/common/versioning.c идут строки /tmp/run/versions.txt, platform_kind=android, app_version=%s и app_version_code=%d ↩
-
fw-tv188b-260827-0003-r24--init-runtime.c035 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dunehd_service.env экспортирует FS_PREFIX=/data/data/com.dunehd.app, HD_APK=1, HD_FW_APK=1 и HD_HTTP_LOCAL_PORT=80 — те же значения, что init ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c028 · code · android-atv, android-dune-fw; прошивка 260724_0207_r24, 260827_0003_r24, 240619_0210_r22, 250815_1012_r22, 261021_0117_r25 · libphp5.so APK 260724_0207_r24 совпадает по sha256 (e28ffc74…) с libphp5.so прошивок tv175u 260724_0207_r24 и tv188b 260827_0003_r24; в tv175u 240619_0210_r22 и tv188b 250815_1012_r22 файл другой (e7d22b70…), в tv188b 261021_0117_r25 — тоже (4a31ef48…) ↩↩↩
-
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.c254 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в файловых функциях встроенного PHP (php_server и php-cgi) realpath('/config') = /data/data/com.dunehd.app/config, realpath('/firmware') = /system/dunehd/firmware, realpath('/firmware_ext/php') = /system/dunehd/firmware_ext/php, хотя в корне ФС (adb shell) /firmware и /firmware_ext нет, а /config — другой каталог. ↩↩↩
-
fw-tv188b-261021-0117-r25.c255 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 во встроенном PHP (php_server и php-cgi CGI плагина) путь /flashdata существует: is_dir('/flashdata') = true, realpath — /data/data/com.dunehd.app/flashdata, хотя в корне ФС (adb shell) /flashdata нет. ↩
-
fw-tv175u-260724-0207-r24.c024 · code · tv175u, android; прошивка 260724_0207_r24 · Скрипт /system/dunehd/init монтирует bind'ом /system/dunehd/firmware → /firmware, /system/dunehd/firmware_ext → /firmware_ext, /data/dunehd/flashdata → /flashdata и /data/dunehd/config → /config ↩
-
fw-apk-260724-0207-r24--data-deploy.c025 · code · android-atv; прошивка 260724_0207_r24 · FS.init задаёт префикс (rootDir) один раз как "/data/data/" + RoConfig.getPackageName(); FS.getPrefix() возвращает его ↩
-
fw-apk-260724-0207-r24--data-deploy.c032 · code · android-atv; прошивка 260724_0207_r24 · runDaemonProcess кладёт в окружение процесса FS_PREFIX = FS-префикс, а HOME и PWD — тоже FS-префикс ↩
-
fw-apk-260724-0207-r24--data-deploy.c027 · code · android-atv; прошивка 260724_0207_r24 · FS.makePath (через него строится файл FSFile) добавляет FS-префикс к абсолютному пути, если его первый компонент — /tmp, /config, /fconfig, /flashdata, /firmware или /firmware_ext; остальные пути не меняет ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c004 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix(path, &out): если path начинается с '/', _php_path_needs_prefix.part.0(path) не 0 и FS_PREFIX задана, строит в новой памяти (_emalloc) строку FS_PREFIX + строка _php_get_fs_prefix2(path) (если не NULL) + path, кладёт её в *out и возвращает ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c007 · code · android-atv; прошивка 260724_0207_r24 · _php_path_needs_prefix.part.0(path) возвращает 1, если str_starts_with(path, s) не 0 для одной из строк "/tmp", "/firmware", "/config", "/flashdata", "/fconfig" или strcmp(path, s) равен 0 для "/system/dunehd/init" и "/D"; иначе возвращает 1 или 0 по результату str_starts_with(path, <строка по адресу 0x353448>) — того же второго образца, что в _php_get_fs_prefix2 ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c025 · code · android-atv; прошивка 260724_0207_r24 · virtual_file_ex(state, path, …) для path, начинающегося с '/', собирает во внутреннем буфере строку _php_get_fs_prefix(path) + _php_get_fs_prefix2(path) + path (префиксы — если не NULL; _php_get_fs_prefix2 вызывается, только если первый не NULL) и передаёт этот буфер в tsrm_realpath_r; относительный path дописывается через '/' к пути из state без префиксов ↩
-
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-apk-260724-0207-r24--data-deploy--php-fs-prefix.c014 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_cmd ищет в команде символы '/' и проверяет путь, только если перед '/' стоит пробел, '!', '&', апостроф, '(', ')', ';', '<', '>' или обратная кавычка; после двойной кавычки, '=', '|', ':', табуляции и прочих символов путь не переписывается ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c032 · code · android-atv; прошивка 260724_0207_r24 · Корни в _php_path_needs_prefix.part.0 сравниваются как префикс без проверки границы каталога: str_starts_with(path, s) возвращает результат strncmp(path, s, strlen(s)) == 0, поэтому проверку проходят и /firmware_ext/…, /tmpX, /config2/…, /flashdata_old/… ↩
-
fw-tv188b-260827-0003-r24--init-runtime.c033 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22 · В tv188b r22 цикл запуска $FS_PREFIX/config/boot записан прямо в init (отдельного вызова binit.sh нет) ↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c079 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · PHP-коду плагина пути и URL install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url доступны как элементы массива DuneSystem::$properties ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c030 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит пути-шаблоны плагинов /config/plugins_data/%s, /tmp/plugins/%s, /tmp/mnt/D/dune_plugin_logs и /config/%s_plugin_cookies.properties ↩
-
fw-tv188b-261021-0117-r25.c290 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 install_dir_path у test_plugin5 = '/data/data/com.dunehd.app/flashdata/plugins/test_plugin5' (is_dir() = true) — тот же путь, что
плагина в /tmp/run/installed_plugins.xml. ↩ -
fw-tv188b-261021-0117-r25.c291 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 tmp_dir_path у test_plugin5 = '/data/data/com.dunehd.app/tmp/plugins/test_plugin5' — путь /tmp/plugins/test_plugin5 с префиксом FS_PREFIX=/data/data/com.dunehd.app; is_dir() для него true. ↩↩
-
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. ↩↩
-
fw-tv188b-261021-0117-r25--downloads.c003 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · open_magnet требует непустой magnet_url и строит цепочку ensure_ts → open_dl с требованием файлов и результатом в tmp_dir_path/open_magnet.json. ↩
-
fw-tv175u-260724-0207-r24.c025 · code · tv175u, android; прошивка 260724_0207_r24 · Скрипт /system/dunehd/init создаёт каталоги /flashdata/plugins/, /flashdata/plugins_data/ и /tmp/plugins/ ↩
-
fw-apk-260724-0207-r24--data-deploy.c018 · code · android-atv; прошивка 260724_0207_r24 · apkInitConfigAndFlashdata создаёт (mkdir с режимом 493 = 0755) в FS-префиксе каталоги config, fconfig, flashdata, flashdata/plugins, flashdata/plugins_data, flashdata/plugins_archive и flashdata/plugins_epfs ↩
-
fw-apk-260724-0207-r24--data-deploy.c021 · code · android-atv; прошивка 260724_0207_r24 · apkInitTmp удаляет все файлы и симлинки внутри
/tmp (каталоги остаются) и создаёт tmp, tmp/run, tmp/run/network_monitor, tmp/www, tmp/www/cgi-bin, tmp/mnt, tmp/mnt/storage, tmp/mnt/network, tmp/mnt/smb вызовом Os.mkdir с mode 511 (0777), tmp/plugins — 493 (0755), var, var/samba, var/core, var/cache, var/locks — 504 (0770); итоговый режим зависит от umask, а при EEXIST существующий каталог остаётся с прежним режимом ↩ -
fw-tv188b-260827-0003-r24--init-runtime.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · binit.sh находит файлы в $FS_PREFIX/config/boot (find … -type f) и по очереди, без фонового запуска, выполняет исполняемые (-x), записывая в лог код возврата каждого ↩
-
fw-tv188b-261021-0117-r25--network-services.c002 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · /system/xbin/dunehd/init выставляет FS_PREFIX=/data/data/com.dunehd.app, HD_APK=1, HD_FW_APK=1 и HD_HTTP_LOCAL_PORT=80, при наличии запускает pinit.sh и sinit.sh, ждёт появления $FS_PREFIX (до ~40 с) и при наличии запускает binit.sh; binit выполняет каждый исполняемый файл из $FS_PREFIX/config/boot. ↩
-
plg-dc-widget-ext.c104 · code · android-dune-fw, android; прошивка 260827_0003_r24, 260724_0207_r24, 240619_0210_r22 · Прошивки при загрузке запускают исполняемые (-x) файлы из /config/boot ($FS_PREFIX/config/boot): tv188b — по очереди из binit.sh, tv175u — в фоне из binit.sh или init ↩↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c010 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · do_movie_suppliers_update запускает «sh
/bin/movie_suppliers_update.sh» с парами аргументов (через escape_shell_arg) — только если строка «version_index:id1-id2…» отличается от сохранённой в /flashdata/plugins_data/<плагин>/movie_suppliers_params.txt; после запуска строка записывается туда ↩ -
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-260827-0003-r24--movie-suppliers.c012 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · После скрипта do_movie_suppliers_update копирует /flashdata/plugins_data/<плагин>/movie_suppliers/
в /tmp/movie_suppliers/ , если содержимое отличается; пустой или отсутствующий файл — предупреждение и пропуск ↩ -
fw-tv188b-260827-0003-r24--movie-suppliers.c007 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На устройстве (tv188b, 260827_0003_r24) в /tmp/run/installed_plugins.xml элемент movie_suppliers есть у сторонних плагинов: melange — aio, dunemdb_supplier_online_movies — online_movies-online_movies_manual, play_in_apps — 11 id через «-» ↩
-
fw-tv188b-261021-0117-r25.c125 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 movie_suppliers_update.sh плагина-поставщика test_plugin6_sup запущен с парами аргументов «
» (подпись равна id) для всех восьми id в порядке их перечисления в params/movie_suppliers манифеста. ↩ -
fw-tv188b-261021-0117-r25.c126 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после замены version_index 1→2 прямо в dune_plugin.xml установленного плагина test_plugin6_sup и перезапуска приложения (am force-stop com.dunehd.app) movie_suppliers_update.sh запущен снова с теми же парами аргументов, а movie_suppliers_params.txt стал «2:
- -…». ↩ -
fw-tv188b-261021-0117-r25.c174 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при трёх следующих запусках оболочки (события gui_start 13:35:32, 13:40:55 и 13:45:18) movie_suppliers_update.sh плагина test_plugin5_sup повторно не вызывался: в /tmp/test_plugin5/sup_update.txt одна запись — 13:24:29; version_index и список 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.c128 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при коде выхода 3 у movie_suppliers_update.sh описатели поставщиков всё равно скопированы в /tmp/movie_suppliers, и поставщики зарегистрированы (в shell_ext.log «sups I: (reg) … kbp6_…»). ↩
-
fw-tv188b-261021-0117-r25.c052 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Suppliers::reload_if_changed (в r24 — reload_suppliers_if_changed) перечитывает поставщиков не только при наличии флага-файла, но и при смене mtime каталога /tmp/movie_suppliers ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c077 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22 · В 250815_1012_r22 youtube регистрировался сам: global_actions boot_end/install/update с условием not(firmware_feature(movie_suppliers_update)) запускали bin/register_supplier.sh, писавший описатель прямо в $FS_PREFIX/tmp/movie_suppliers/YouTube ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c024 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Допустимые значения: playback_type — stream, stream_special, app; location_handling — ignore, skip_unmatched_publications (константы Suppliers) ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c059 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Если у поставщика непустой play_action (ключ описателя: JSON-строка, объект или массив GUI-действия), онлайн-воспроизведение идёт не по playback_type: оболочка запускает встроенное действие pf_check с plugin_name = плагин поставщика, а play_action передаёт ему как следующее действие ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c047 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Для playback_type stream_special экран выбора файлов не открывается: movie_screen (фильм и эпизод) и season_screen вызывают Suppliers::process_special_stream_playback_type, которое сразу запускает воспроизведение ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c051 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Для stream_special process_special_stream_playback_type при пустом списке файлов возвращает ошибку, иначе берёт файл с минимальным count(path) (строгое <, при равенстве — первый) и вызывает get_play_movie_action с online=true и cur_stream_url=''; get_play_file_online_action передаёт cur_stream_url в get_vod_info, тот кладёт stream_url='' в playback url (для single/ass_type!=0 — напрямую cur_stream_url, для серии — при is_current=1), get_stream_url пропускает preloaded только при is_current!=0 && stream_url!='', поэтому идёт в get_stream_url_by_file_id. url из ответа do_file_search для запускаемого stream_special-файла не используется; поставщик должен реализовать get_stream_url ↩
-
fw-tv188b-261021-0117-r25.c176 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 описателя /tmp/movie_suppliers/
из пяти ключей — plugin, caption, supported_video_types, bin, playback_type — достаточно для регистрации: kbp5_special (stream_special) и kbp5_stream (stream) есть в строке «sups I: (reg)» shell_ext.log, и их bin вызывается. ↩ -
fw-tv188b-261021-0117-r25.c193 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 поставщик kbp5_special (playback_type stream_special) вернул в do_file_search серии два файла — s1 (order 1, подпись «KBP5 special first long caption (s1)») и s2 (order 2, подпись «S2»); через 0,3 с без выбора пользователя оболочка вызвала get_stream_url с fileId s1 — первым по order, хотя его подпись длиннее. ↩
-
fw-tv188b-261021-0117-r25--movie-suppliers.c018 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Описатель generic r25 по-прежнему объявляет supported_video_types=video, playback_type=app, server_managed=true и location_handling=skip_unmatched_publications. ↩
-
fw-tv188b-261021-0117-r25.c053 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Новый ключ описателя поставщика dl_capable (r25): первый поставщик с dl_capable становится dl-поставщиком (кнопка «Загрузки», Suppliers::get_dl_sup), только если в firmware_features есть флаг downloads ↩
-
fw-tv188b-261021-0117-r25.c054 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 suppliers.php впервые читает ключ описателя поставщика fixed_trailer_files (сам ключ был и в r24 — в описателе rutube): для трейлеров (ass_type 1) Suppliers берёт этот массив вместо запроса поиска файлов; не массив — пустой список ↩↩
-
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-260827-0003-r24--movie-suppliers--stream-protocol.c062 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22 · В 250815_1012_r22 Suppliers (shell_ext/movies/suppliers.php) задаёт тот же контракт потоковых команд, что и r24: те же ограничения seasons/episodes в get_episodes, те же ключи playback_url (movie_id, s, e, ass_type, sup_id, is_current, file_id, stream_url), та же проверка url ответа get_stream_url ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c046 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Успешный ответ start_playback_app: bin (команда запуска), package, wait_app_start_delay, title; приложение ищется по package, не найдено — ошибка; запуск через ActionFactory::launch_ext_app ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c045 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Ответ start_playback_app с error.missing_app (title, package, непустой urls; необязательно indirect, intro_dialog_urls) и !$repeat превращается в действие «скачать и установить приложение»; иначе показывается error.message, а если его нет — errmsg_failed_to_start_playback ↩
-
fw-tv188b-261021-0117-r25--app-launch.c018 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25, 260827_0003_r24 · dune.apk tv188b (r24 и r25) — пакет com.dunehd.app с android:sharedUserId="android.uid.system". ↩
-
fw-tv188b-261021-0117-r25--app-launch--native.c002 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На этапе обработки cmd в tv188b r24 обработчик launch_ext_app fcn.0054a368 при наличии непробельного символа в cmd сравнивает первые 0x1d байт исходной cmd с «/system/dunehd/dunehd_service»: совпадение направляет cmd в fcn.0054a1a0, иначе — в apk_helper fcn.006d4c9c; ведущие пробелы перед путём при этом сравнении не пропускаются. ↩
-
- fw-tv188b-261021-0117-r25--app-launch--native.c007 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c пропускает ведущие пробельные байты помощником fcn.006d4784 с isspace и требует префикс «am start » (strncmp на 9 байт); при несовпадении пишет «unsupported command (1)» и возвращает -1.
- fw-tv188b-261021-0117-r25--app-launch--native.c008 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c ищет разделитель некавыченных аргументов после «am start » как байт 0x20 и снимает парные одинарные либо двойные кавычки; внутри двойных кавычек обратная косая увеличивает шаг сканирования до 2, но сохраняется в передаваемом сегменте; при незакрытой кавычке берётся остаток строки.
- fw-tv188b-261021-0117-r25--app-launch--native.c009 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c не добавляет в список пустые и пробельные сегменты, а также сегменты, начинающиеся с «>» или «2>»; при пустом итоговом списке пишет «unsupported command (2)» и возвращает -1.
- fw-tv188b-261021-0117-r25--app-launch--native.c010 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 apk_helper fcn.006d4c9c при непустом списке аргументов вызывает JNI-помощник fcn.00091b04, обращающийся к startActivityFromArgs с сигнатурой ([Ljava/lang/String;)Z; false даёт сообщение «jni returned error status» и статус -1, true — статус 0.
-
- fw-tv188b-261021-0117-r25--app-launch--native.c011 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 ожидание потери фокуса fcn.00549ed8 сначала проверяет, потерян ли фокус уже (тогда результат 1), затем delay < 1 (тогда timed-out и 0); при положительном delay опрашивает фокус с usleep(100000) до истечения delay секунд, возвращая ненулевой результат при потере фокуса и 0 при тайм-ауте.
- fw-tv188b-261021-0117-r25--app-launch--native.c012 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 обработчик fcn.0054a368 при ненулевом статусе запуска записывает в выход следующего действия результат вызова помощника с полем +0x1c данных действия; если результат не NULL, задаёт ему свойство command_status, равное статусу запуска.
- fw-tv188b-261021-0117-r25--app-launch--native.c013 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 обработчик fcn.0054a368 при нулевом статусе запуска либо пустой/пробельной cmd вызывает ожидание фокуса fcn.00549ed8 с полем +8 (delay): при результате 0 следующим действием становится результат помощника с полем +0x1c; при ненулевом результате вызывается помощник с полями +0xc/+0x10 и, если поле +0x14 не NULL, показывается тост.
-
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.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.c136 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 строку «am start …» действия launch_ext_app приложение разбирает само, без запуска am или sh: apk_helper делит её на список аргументов (одинарные кавычки снимаются: «-p 'com.android.tv.settings' -a … -c …» → args(6) «-p, com.android.tv.settings, -a, …»), и activity стартует AndroidJavaUtils в процессе приложения com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c133 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ответ start_playback_app с package несуществующего приложения (kb.probe6.nonexistent) дал в shell_ext.log «sup E: app not found for package: …», после чего оболочка выполнила plugin_show_error с «Не удалось запустить воспроизведение» и показала это сообщение; launch_ext_app не выполнялось. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c008 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · generic r25 строит bin так же, как r24 — для deeplink с intent:…#Intent «am start '
'», иначе «am start», затем « -p '<пакет>'» (если пакет известен) и « -d ' '» (FS_PREFIX пуст и ссылка http…) либо позиционный « ' '». ↩ -
fw-tv188b-261021-0117-r25.c055 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · dunemdb_supplier_generic r25 (bin/run.php) для HBOMax/Max выбирает пакет com.wbd.hbomax с запасным com.wbd.stream (для страны US — наоборот), страну берёт из country_code_2 в /tmp/location_info.properties или /config/location_info.properties ↩
-
fw-tv188b-261021-0117-r25--movie-suppliers.c016 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 do_cmd обрезает завершающие пробельные символы stdout через rtrim до измерения длины, debug-печати и json_decode. ↩
-
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.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве в launch_ext_app выбор ветки виден в shell.log: cmd, начинающаяся с «/system/dunehd/dunehd_service do am start …», идёт в ветку «run command» (pclose 0, command status 0), а cmd «am start --user 0 …» — в ветку «launch activity for command» и apk_helper (activity launch status −1, error_action). ↩
-
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--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.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-261021-0117-r25--app-launch.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при проверке на устройстве все четыре запуска launch_ext_app с delay −1 в серии дали activity launch status 0 и «general: shell app is already lost focus», строк show_error не было; у n=2 интервал от статуса до сообщения — 6,953 мс, поэтому исторические 3–5 мс из req7 не являются постоянной границей. ↩↩
-
fw-tv188b-261021-0117-r25--app-launch.c017 · code · tv188b, android-atv; прошивка 260724_0207_r24 · В APK DMC 260724_0207_r24 shell_ext/android_apps/model.php совпадает с tv188b r24 байт в байт (diff пуст), включая finalize_launch_cmd и plain_launch_app. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c019 · code · tv188b, android-atv; прошивка 260724_0207_r24 · APK DMC 260724_0207_r24 — тот же пакет com.dunehd.app, но в атрибутах
нет android:sharedUserId. ↩ -
fw-tv188b-261021-0117-r25--app-launch.c027 · code · tv188b, android-atv; прошивка 260724_0207_r24 · В strings libduneshell.so APK DMC сообщения «launch activity for command» и «activity launch status» есть, а «gui_action D: run command '%s'» и «gui_action D: command status: %d» между ними и «[gui_action] cmd '%s', ensure_playback_stopped…» нет. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c030 · code · android-atv; прошивка 260724_0207_r24 · В APK DMC обработчик launch_ext_app (fcn.0055bc50, печатает «[gui_action] cmd '%s', ensure_playback_stopped %d, delay: %d») при непустой cmd с непробельным символом печатает «gui_action D: launch activity for command '%s'» и передаёт cmd целиком разборщику apk_helper (fcn.006e5630); ветки «run command», вызова popen или system в функции нет — shell-команды через launch_ext_app в DMC не выполняются. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c031 · code · android-atv; прошивка 260724_0207_r24 · Разборщик apk_helper в APK DMC (fcn.006e5630) пропускает пробельные символы в начале cmd, требует префикс «am start » (strncmp на 9 символов, иначе «[apk_helper] unsupported command (1): %s» и -1), делит остаток по пробелам, снимает кавычки '…' и "…" (внутри "…" обратная косая только пропускает следующий символ и остаётся в аргументе; незакрытая кавычка берёт остаток строки), выбрасывает пустые аргументы и аргументы, начинающиеся с «>» или «2>» (поэтому хвост « 2>&1» безвреден); пустой список даёт «[apk_helper] unsupported command (2): %s» и -1. ↩
-
fw-tv188b-260827-0003-r24--shell-ext--entry-handler.c106 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · play_recent требует sup_id и movie_id; передаёт все входные поля wh_* в JSON sup_info для play_online; autoplay добавляет действие enter после открытия карточки. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c074 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 диалог выбора воспроизведения давал кнопкам play_online поставщиков только s, e и sup_id, без sup_info; wh_* доходили до поставщика лишь через entry/play_recent. ↩
-
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.c063 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · MovieHelper::get_wh_supplier_info (r25) копирует action_params записи (или пустой объект), добавляет wh_uid, wh_s, wh_e (по умолчанию -1), wh_pos (-1), wh_len (0), wh_tags (JSON, если есть tags) и wh_file_index (если есть index) и возвращает JSON с sup_data и всеми wh_*-полями. ↩
-
fw-tv188b-261021-0117-r25--downloads.c009 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · get_play_action возвращает null без любого из params sup_id, movie_id, uid, id, torrent_name; иначе строит вызов shell_ext entry/play_recent с wh_uid из sup_id:movie_id:md5(file_path):uid. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c090 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В прогоне collect8 каждый из 7 VOD-запусков test_plugin8 с recent_uid в series[].recent_uid (a6lazy, a6ser, a5ctrl, a5keys, a4first, a4resume, d2fs) дал запись истории: #15–#21 в 000034.json; kbp8:a4 записан дважды — за a4first и a4resume. ↩
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c091 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В прогоне collect8 12 VOD-запусков блоков A1–A3 и A7 без recent_uid (в case.json поля uid нет, например a1plain) не дали записей в истории: в 000034.json было 15 записей, стало 24, и все 9 новых — это 7 запусков с recent_uid (#15–#21), B1 (#22) и торрент (#23). ↩
-
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c089 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В прогоне collect8 (2026-10-30, tv188b 261021_0117_r25) после ручного STOP (ir_code STOP) plugin VOD test_plugin8 с recent_uid kbp8:d2fs запись появилась в $P/config/watch_history/000034.json через ~1 с (mtime 13:02:00.888) — до
am force-stop com.dunehd.app(13:02:01); после перезапуска приложения (pid 9349, 13:02:36) при проверке в 13:02:57 запись осталась в шардах (1 вхождение). ↩ -
fw-tv188b-261021-0117-r25--media-player.c064 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 повторный VOD с initial_position_ms=-1 и тем же recent_uid предлагает продолжение с сохранённых 33 с; выбор «Продолжить» запускает с 33 с. ↩
-
fw-tv188b-260827-0003-r24--http-api.c007 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · run_plugin_cgi экспортирует для CGI-скрипта плагина переменные PLUGIN_CGI_DIR, PLUGIN_NAME и SCRIPT_FILENAME, переходит в каталог cgi-bin плагина и запускает скрипт через sh ↩
-
fw-tv188b-260827-0003-r24--http-api.c005 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · run_plugin_cgi направляет stderr CGI-скриптов плагинов в $FS_PREFIX/tmp/dune_apk_cgi_err.log; при размере больше 10000 байт лог переименовывается в .old ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c037 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Для каждого файла в
/www/cgi-bin загрузчик создаёт в /tmp/www/cgi-bin/plugins/ / одноимённую символическую ссылку на run_plugin_cgi, а /tmp/www/plugins/ — ссылку на каталог www плагина. ↩ -
fw-tv188b-261021-0117-r25.c149 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-скрипт плагина, вызванный через http://
/cgi-bin/plugins/ /<файл>, получает PLUGIN_NAME=
, а PLUGIN_CGI_DIR и SCRIPT_FILENAME — реальные пути $FS_PREFIX/flashdata/plugins/
/www/cgi-bin и …/www/cgi-bin/<файл>, а не /tmp/www/plugins/
/… ↩
-
fw-tv188b-261021-0117-r25.c150 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-скрипт плагина запускается с $0, равным абсолютному SCRIPT_FILENAME ($FS_PREFIX/flashdata/plugins/
/www/cgi-bin/<файл>), и текущим каталогом PLUGIN_CGI_DIR ($FS_PREFIX/flashdata/plugins/
/www/cgi-bin). ↩
-
fw-tv188b-261021-0117-r25.c153 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении CGI плагина SERVER_SOFTWARE=busybox httpd/1.35.0 и GATEWAY_INTERFACE=CGI/1.1. ↩
-
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-260827-0003-r24--http-api.c064 · code · tv175u, unknown; прошивка 260724_0207_r24 · В tv175u r24 init запускает /bin/httpd с корнем /tmp/www, если /bin/httpd исполняемый ↩
-
fw-tv188b-260827-0003-r24--http-api.c065 · code · tv175u, unknown; прошивка 260724_0207_r24 · В tv175u r24 init создаёт симлинк /tmp/www/cgi-bin/do → /firmware/ext_command/cgi-bin/do, если тот исполняемый ↩
-
fw-apk-260724-0207-r24.c056 · code · android-atv; прошивка 260724_0207_r24 · libxxx_run_plugin_cgi.so APK совпадает по sha256 с /system/bin/libxxx_run_plugin_cgi.so прошивки tv188b r24 ↩
-
fw-apk-260724-0207-r24.c055 · code · android-atv; прошивка 260724_0207_r24 · libxxx_run_plugin_cgi.so — shell-скрипт (1281 байт): берёт имя плагина из текущего каталога, выставляет PLUGIN_CGI_DIR, PLUGIN_NAME, SCRIPT_FILENAME и запускает sh $FS_PREFIX/tmp/www/plugins/<плагин>/cgi-bin/<скрипт>; stderr — в $FS_PREFIX/tmp/dune_apk_cgi_err.log ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c072 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22 · youtube r22 содержит CGI www/cgi-bin/play.php: по ?id= отвечает «Location:
» (качество hd720, mp4:// убирается) или 404; обёртка www/cgi-bin/play кэширует вывод по QUERY_STRING в /tmp/youtube_cache на 3600 с ↩ -
fw-tv188b-260827-0003-r24--http-api.c011 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Переменная окружения HD_HTTP_LOCAL_PORT=80 экспортируется и в init прошивки, и в dunehd_service.env ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · php_plugin.c: в libduneshell.so рядом стоят имена install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url с шаблоном http://127.0.0.1:%d/plugins/%s/ и plugin_cgi_url с шаблоном http://127.0.0.1:%d/cgi-bin/plugins/%s/, а также вызов DunePluginFw::$instance->call_plugin ↩
-
fw-tv188b-261021-0117-r25.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 TCP-порт 80 (*:80) слушает процесс httpd. ↩
-
fw-tv188b-261021-0117-r25.c289 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у test_plugin5 plugin_www_url = 'http://127.0.0.1:80/plugins/test_plugin5/', plugin_cgi_url = 'http://127.0.0.1:80/cgi-bin/plugins/test_plugin5/' — с явным портом 80. ↩
-
fw-apk-260724-0207-r24--data-deploy.c033 · code · android-atv; прошивка 260724_0207_r24 · runDaemonProcess задаёт HD_HTTP_LOCAL_PORT=11080 (константа HDConfig.HD_HTTP_LOCAL_PORT, подставлена в байткод как const/16 11080) ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c027 · code · android-atv; прошивка 260724_0207_r24 · _php_add_fs_prefix_to_http(url, &out): если задана HD_HTTP_LOCAL_PORT, url начинается с "http://" и следующие 26 символов (strncmp 0x1a) равны "127.0.0.1/cgi-bin/plugins/" или "localhost/cgi-bin/plugins/", кладёт в *out новую строку (_emalloc): "http://127.0.0.1:" + значение HD_HTTP_LOCAL_PORT + "/cgi-bin/plugins/" + остаток url со смещения 0x21; в остальных случаях *out не меняет ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c037 · code · android-atv; прошивка 260724_0207_r24 · _php_add_http_port вызывает только _php_curl_setopt — когда код опции равен 0x2712; результат (строка с портом или исходная) передаётся в php_curl_option_url ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c030 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 одновременно работают три процесса php_server — по одному на плагин (shell_ext, dune-hd.tv, android_apps), все — дочерние com.dunehd.app, с аргументами <плагин> <скрипт> /tmp/run /tmp/plugins/<плагин>/system_properties.txt
↩↩ -
fw-tv188b-260827-0003-r24.c054 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 три процесса php_server (shell_ext, dune-hd.tv, android_apps) работают от пользователя system с SELinux-меткой u:r:system_app:s0; их родитель — com.dunehd.app (PPID 25631), а UID пакета приложения — 1000 (sharedUser android.uid.system/1000). ↩
-
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.c298 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На снимках tv188b r25 (collect4 и начало collect6, до установки тестовых плагинов) работают три php_server — shell_ext, dune-hd.tv (программа /flashdata/plugins/dune-hd.tv/i24h.php) и android_apps; все — дочерние процессы com.dunehd.app с Uid 1000. ↩
-
fw-tv188b-261021-0117-r25.c179 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды поставщика из стороннего плагина (bin без cd) выполняются с uid 1000 и текущим каталогом /. ↩
-
fw-tv188b-261021-0117-r25.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 скрипт global_action plugin_system (boot, boot_end, gui_start) работает под uid 1000(system) с SELinux-контекстом u:r:system_app:s0, текущим каталогом / и переменной окружения FS_PREFIX=/data/data/com.dunehd.app; $0 — абсолютный путь скрипта. ↩
-
fw-tv188b-261021-0117-r25.c297 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 php_server нового PHP-плагина из flashdata запускается при первом вызове плагина, а не при его регистрации: после регистрации test_plugin6 процесса php_server test_plugin6 нет, а при первом handle_user_input в shell.log идут «start (timeout=60.0s)», «[test_plugin6] [php] creating...», «server started; pid: 31928.», «ready.» (так же у test_plugin5, pid 17362). ↩
-
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.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-260827-0003-r24--plugin-loader--php-runtime.c036 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 php_server содержит путь /tmp/run/%s.pid и импорт FS_writestring, которых нет в strings php_server r24 ↩
-
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.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--plugin-loader--php-runtime.c038 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 смерть php_server от внешнего kill -9 оболочка замечает только при следующем вызове плагина: «plugin W: (
) child exited, signal 9», затем «shutting down... stopped.», новый php_server («server started; pid: …») и успешный вызов. ↩ -
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--http-api.c060 · code · tv175u, unknown; прошивка 260724_0207_r24 · В tv175u r24 strings php_server содержат строку использования «Usage: php_server
» и сообщение «[server] pipes closed» ↩ -
fw-apk-260724-0207-r24--data-deploy.c016 · code · android-atv; прошивка 260724_0207_r24 · По apk_bin_map.txt PHP и CGI плагинов получают ссылки firmware/bin/php_server → libxxx_php_server.so, firmware/bin/run_plugin_cgi → libxxx_run_plugin_cgi.so, firmware/ext_command/cgi-bin/do → libxxx_do.so, firmware_ext/php/php-cgi → libxxx_php-cgi.so и firmware_ext/php/libphp5.so → libphp5.so ↩
-
fw-apk-260724-0207-r24--data-deploy.c045 · code · android-atv; прошивка 260724_0207_r24 · В strings libduneshell.so APK есть сообщения запуска PHP-сервера («[%s] [php] starting PHP-server process...»), путь /firmware/bin/php_server и «execv (%s) failed: %s» ↩
-
fw-tv188b-261021-0117-r25--libphp5.c001 · 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 · В strings libphp5.so пяти исследованных сборок присутствует строка PHP/5.3.6. ↩↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c006 · 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 · В strings libphp5.so пяти исследованных сборок присутствует версия OpenSSL 1.0.1u от 22 Sep 2016. ↩
-
fw-tv188b-260827-0003-r24--http-api.c114 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libxxx_php-cgi.so (php-cgi) динамически связан с libphp5.so и содержит лишь CGI-обвязку (php_module_startup, php_execute_script, страница «CGI security») ↩
-
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--libphp5.c003 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В тестовом плагине test_plugin5 на tv188b 261021_0117_r25 php_sapi_name возвращает hd. ↩
-
fw-tv188b-261021-0117-r25.c239 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в php-cgi CGI плагина PHP_VERSION = 5.3.6, php_sapi_name() = cgi-fcgi. ↩
-
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.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-apk-260724-0207-r24.c040 · code · android-atv; прошивка 260724_0207_r24 · lib/armeabi-v7a/libxxx_php-cgi.so и libphp5.so APK совпадают по sha256 с firmware_ext/php/php-cgi и firmware_ext/php/libphp5.so прошивки tv175u той же сборки; копия php-cgi лежит и в data.zip/firmware_ext/plugins/shell_ext/bin/ ↩↩
-
fw-tv188b-260827-0003-r24--shell-ext.c034 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · media_check проверяет URL: ffmpeg через /firmware/scripts/ffmpeg.sh (таймаут 5 с) и скорость чтения curl (первые 1000000 байт, таймаут 5 с, connect 4 с, --cacert /firmware/certs/ca-bundle.crt); curl берётся из /firmware/bin/curl, а если его нет — из каталога скрипта ↩↩
-
fw-tv188b-260827-0003-r24--shell-ext.c037 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · shell_ext/bin/curl содержит строки версии «curl 7.19.5 (mipsel-unknown-linux-gnu)» и интерпретатор /lib/ld.so.1; его sha256 и размер (85377) отличаются от system/bin/libxxx_curl.so (181924) ↩
-
fw-tv188b-261021-0117-r25--libphp5.c026 · code · android-dune-fw; прошивка 261021_0117_r25, 260827_0003_r24, 250815_1012_r22, 260724_0207_r24 · В strings библиотек libcurl сборок tv188b r22, r24, r25 и tv175u r24 присутствует libcurl/7.67.0. ↩↩↩
-
fw-tv188b-261021-0117-r25--libphp5.c011 · 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 · В strings libphp5.so пяти исследованных сборок присутствуют имена PHP cURL multi: curl_multi_init, curl_multi_add_handle, curl_multi_remove_handle, curl_multi_select, curl_multi_exec, curl_multi_getcontent, curl_multi_info_read, curl_multi_close. ↩↩↩
-
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.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--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-260827-0003-r24--php-framework.c057 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Если вызывающий передал CURLOPT_SSL_VERIFYPEER=true для https-URL, HD::http_get_document подставляет CURLOPT_CAINFO=/firmware/certs/ca-bundle.crt ↩
-
fw-tv188b-261021-0117-r25--libphp5.c032 · code · android-dune-fw; прошивка 260827_0003_r24 · CA-бандл сборки fw-tv188b-260827-0003-r24 содержит 143 PEM-сертификата. ↩
-
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.c251 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server и php-cgi файл /firmware/certs/ca-bundle.crt доступен (is_file true; размер 227282, md5 e9dc50a63d76d3c88baa24a4374c4542), как и $FS_PREFIX/firmware/certs/ca-bundle.crt; в нём 143 PEM-блока сертификатов. ↩
-
fw-tv188b-261021-0117-r25.c023 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · HD::http_get_document в r25 пишет в лог « http <метод>:
» (метод — CURLOPT_CUSTOMREQUEST, иначе POST при CURLOPT_POSTFIELDS, иначе GET) и « http DATA: …» вместо «HTTP fetching»/«HTTP POST fields»; сообщения об ошибках — в нижнем регистре («http request failed (код)») ↩ -
fw-tv188b-260827-0003-r24--php-framework.c081 · code · tv188b, tv175u, android-dune-fw; прошивка 260724_0207_r24, 260827_0003_r24 · Все 10 PHP-файлов фреймворка в tv175u 260724_0207_r24 совпадают по sha256 с tv188b 260827_0003_r24 ↩↩↩↩
-
fw-apk-260724-0207-r24.c043 · code · android-atv; прошивка 260724_0207_r24 · Все 10 текстовых файлов PHP-фреймворка data.zip/firmware_ext/php/ (bootstrap.php, dune_api.php, dune_plugin.php, dunelib/*…) совпадают по sha256 с firmware_ext/php/ прошивок tv175u r24 и tv188b r24; в прошивках там же лежат ещё php-cgi и libphp5.so ↩↩↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c082 · code · tv188b, tv175u, android-dune-fw; прошивка 240619_0210_r22, 250815_1012_r22, 260724_0207_r24, 260827_0003_r24 · bootstrap.php, dune_config.php, dune_plugin.php и dunelib/dune_countries.php одинаковы (sha256) в tv175u 240619_0210_r22, tv188b 250815_1012_r22 и r24-прошивках; dunelib/config_utils, dune_languages, expr, utils в r22-прошивках отсутствуют ↩
-
fw-tv188b-260827-0003-r24--php-framework.c108 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление PluginFolderViewKind строковыми константами: PLUGIN_FOLDER_VIEW_REGULAR='view_regular', PLUGIN_FOLDER_VIEW_CONTROLS='view_controls', PLUGIN_FOLDER_VIEW_MOVIE='view_movie', PLUGIN_FOLDER_VIEW_GCOMPS='view_gcomps', PLUGIN_FOLDER_VIEW_ROWS='view_rows' ↩↩
-
fw-tv188b-260827-0003-r24--php-framework.c102 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление GComponentKind строковыми константами: GCOMPONENT_LABEL='label', GCOMPONENT_TTF_LABEL='ttf_label', GCOMPONENT_RECT='rect', GCOMPONENT_IMAGE='image', GCOMPONENT_CUT_IMAGE='cut_image', GCOMPONENT_SANDWICH='sandwich', GCOMPONENT_BUTTON='button', GCOMPONENT_TEXT_FIELD='text_field', GCOMPONENT_PANEL='panel', GCOMPONENT_SCROLL_PANE='scroll_pane', GCOMPONENT_PREPAINT_PANE='prepaint_pane', GCOMPONENT_SCROLLBAR='scrollbar' ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c032 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Встроенные ext_epg и ktv_start объявляют
; элемента resources нет ни в одном из 13 встроенных манифестов r24 ↩ -
fw-tv188b-260827-0003-r24--shell-ext--ui-lib--gcomp-list.c046 · code · android-dune-fw; прошивка 261021_0117_r25 · Извлечённый gcomp_list.php в tv188b 261021_0117_r25 побайтно совпадает с разобранной копией 260827_0003_r24 (550 строк). ↩
-
fw-tv188b-261021-0117-r25.c011 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · dune_api.php r25 описывает строки с ленивой подгрузкой: тип строки PLUGIN_ROW_TYPE_DUP='row_dup', опции PLUGIN_ROW_OPT_LOADING=0x4 и PLUGIN_ROW_OPT_OPTIMIZE_INVISIBLE=0x8, поле PluginRowsPane::row_dup_map, PluginFolderView::type_mask и GCOMP_OPT_STUB=0x400000 ↩↩
-
fw-tv188b-261021-0117-r25.c044 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В shell_ext/lib r25 сигнатура get_timer стала get_timer($media_url) (без &$plugin_cookies) в интерфейсах GCompsScreen и RowsScreen; RegularScreen тоже объявляет get_timer($media_url), а AbstractRegularScreen по умолчанию возвращает null и кладёт таймер в PluginRegularFolderView::timer ↩
-
fw-tv188b-260827-0003-r24--php-framework.c227 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginRowsFolderView с ключами (4): pane, sel_state, actions, timer ↩
-
fw-tv188b-261021-0117-r25.c009 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · dune_api.php r25 вводит операцию плагина PLUGIN_OP_GET_FOLDER_ROWS='get_folder_rows' с выходным типом PLUGIN_OUT_DATA_PLUGIN_FOLDER_ROWS='plugin_folder_rows' и классы PluginFolderRowsInputData {media_url, row_ids} и PluginFolderRows {rows} ↩
-
fw-tv188b-261021-0117-r25.c010 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · DunePluginFw::invoke_operation в r25 обрабатывает get_folder_rows: вызывает $plugin->get_folder_rows(media_url, row_ids), а если метода нет — бросает Exception «Method not found: get_folder_rows»; get_out_type_code сопоставляет операции тип plugin_folder_rows ↩
-
fw-tv188b-260827-0003-r24--php-framework.c274 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс StreamMarker с ключами (4): type, from, to, duration ↩
-
fw-tv188b-260827-0003-r24--php-framework.c113 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php задаёт перечисление StreamMarkerType строковыми константами: STREAM_MARKER_INTRO='intro', STREAM_MARKER_RECAP='recap', STREAM_MARKER_CLOSING_CREDITS='closing_credits' ↩
-
fw-tv188b-260827-0003-r24--php-framework.c232 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · dune_api.php определяет класс PluginStreamInfo с ключами (2): url, markers ↩
-
fw-tv188b-261021-0117-r25.c275 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 оболочка при старте VOD читает PluginVodSeriesInfo::markers начальной серии (playback_url_is_stream_url=true): для двух StreamMarker (intro from 2 to 12, closing_credits from 25 to 35) в shell.log «markers I: 2 markers added: 2..12,25..35». ↩
-
fw-tv188b-261021-0117-r25.c276 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 StreamMarker без поля duration (только type, from, to) оболочка принимает: оба маркера серии добавлены («2 markers added»). ↩
-
fw-tv188b-261021-0117-r25--media-player.c061 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ленивая серия при feature vod_get_stream_info вызывает get_vod_stream_info с playback_url kbp8lazy://a6lazy. ↩
-
fw-tv188b-261021-0117-r25--media-player.c063 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 intro-маркер 3–20 с из PluginVodSeriesInfo::markers показывает на OSD кнопку «Пропустить заставку» на снимке через 6 с после запуска VOD. ↩
-
fw-tv188b-261021-0117-r25--media-player.c062 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 intro-маркер 3–20 с из ответа get_vod_stream_info показывает на OSD кнопку «Пропустить заставку» на снимке через 6 с после запуска VOD. ↩
-
fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c049 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=recap (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить заставку», та же, что у intro. ↩
-
fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c050 · device · android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 для маркера type=recap` с обратной кавычкой (from=3, to=15) на OSD через 5 с после запуска была кнопка «Пропустить вступление». ↩
-
fw-tv188b-261021-0117-r25--java-player--native-vod-bridge.c012 · code · android-dune-fw; прошивка 261021_0117_r25 · Нативный конвертер StreamMarkerType r25 (0x001a6e1c) возвращает 0 для 'intro', 1 для 'recap`' с завершающей обратной кавычкой, 2 для 'closing_credits', -1 для остальных строк и NULL. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c080 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В dune_api.php 250815_1012_r22 (tv188b) нет классов ChangeMovieDataActionData, ChooseFileActionData, CreateNetworkFolderActionData, CustomIgnoreUpdateActionData, EditMovieDataActionData, FileChooserFilter, FileChooserUiParams, PluginExitFoldersActionData, PluginStreamInfo, PluginTvChannelChange, PluginUpdateTvInfoActionData, PluginVodGetStreamInfoInputData, StreamMarker, SyncMyCollectionActionData, WakeNetworkFolderActionData и соответствующих ACTION_ID, STREAM_MARKER, PLUGIN_OP_GET_VOD_STREAM_INFO, GUI_EVENT_CONFIRM_UPDATE, GUI_EVENT_KEY_FAVORITES, GUI_EVENT_NETWORK_CHANGE, GUI_EVENT_TOPMENU_REFRESH; в 260827_0003_r24 они есть ↩
-
fw-tv188b-260827-0003-r24--php-framework.c079 · code · tv188b, android-dune-fw; прошивка 250815_1012_r22, 260827_0003_r24 · В 250815_1012_r22 (tv188b) DunePluginFw::invoke_operation не обрабатывает get_vod_stream_info, а в get_out_type_code нет PLUGIN_OP_GET_VOD_STREAM_INFO; в 260827_0003_r24 они есть ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c044 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Встроенные dunemdb_supplier_generic и widget задают check_update со schema 2, url, timeout 86400, required no, auto yes; у dunemdb_supplier_generic ещё dont_ask_confirmations yes и prefer_builtin_if_url_differ yes; у dunemdb_supplier_rutube и dunemdb_supplier_youtube check_update содержит только prefer_builtin_if_url_differ yes ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c043 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит сообщения парсера о проверке обновлений: «[plugin_manifest] update schema %d not supported; update checks disabled for plugin %s» и «[plugin_manifest] invalid or missing 'check_update/check_update_url' => update checks disabled» ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запуск точки входа плагина по IP Control (launch_media_url plugin_launcher://{name=…}{ep_media_url=…}) вызывает проверку обновления check_update schema 2: оболочка грузит update info из check_update/url с тайм-аутом 1 («loading update info with timeout 1»), тогда как фоновая автопроверка — с тайм-аутом 5. ↩
-
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.c084 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при новой некритической версии проверка на запуске показывает диалог «Обновление приложения» с текстом «Приложение:
. Текущая версия: . Новая версия: . Обновить приложение?» и кнопками «Обновить» (в фокусе по умолчанию) и «Напомнить позже». ↩ -
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.c090 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 онлайн-обновление сохраняет cookies плагина и его data_dir_path: v2 и v3 получили в plugin_cookies значение kbp7u_mark, записанное v1, файл kbp7u_mark.txt v1 в flashdata/plugins_data/
остался с прежним mtime. ↩ -
fw-apk-260724-0207-r24.c048 · code · android-atv; прошивка 260724_0207_r24 · В dune_plugin.xml плагина radiotime из data.zip нет блока
(schema 2, url http://online.dune-hd.com/dune_store/v1/plugins/radiotime/update_info.xml), который есть в tv175u той же сборки ↩↩ -
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c044 · code · tv188b, android-atv; прошивка 260724_0207_r24 · В APK r24 разбор манифеста читает check_update/schema (по умолчанию 0); schema больше 3 отключает проверку обновлений; check_update/timeout по умолчанию 0x15180 = 86400 с, отрицательный заменяется на 86400 ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c062 · code · android-atv; прошивка 260724_0207_r24 · В APK r24 после удалённой проверки без принуждения диспетчер (fcn.002c757c) пишет в /tmp/plugin_updater_
.txt time() + next_check_update_timeout из update info, если тот ≥ 0, иначе + check_update/timeout манифеста; next_check_update_timeout берётся из ключа update.txt (schema 1) или из дочернего элемента корня dune_plugin_update_info (schema 2); если разбор вернул 0 (ошибка в update info) или schema не поддержана — пишется просто time() ↩ -
fw-tv188b-260827-0003-r24--plugin-loader--online-upgrade.c068 · code · android-atv; прошивка 260724_0207_r24 · В APK r24 фоновая автопроверка (fcn.0029a474) стартует, только если с прошлого старта прошло больше 86400 с по CLOCK_MONOTONIC (clock_gettime(1)); время прошлого старта хранится в /tmp/plugin_online_upgrade_last_autocheck_time («%ld», секунды монотонных часов) и при старте перезаписывается; затем «start async check» и двойной fork ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c050 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит строки [plugin_signer]: файлы dune_plugin.sign и dune_plugin_signer_id.txt, signer_id com.dune-hd, ключ /firmware/config/plugin_key.pem или /config/plugin_key.pem, DSA-проверку ↩
-
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-260827-0003-r24--plugin-loader.c052 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Во встроенных плагинах прошивки 6 из 13 (android_apps, dunemdb_supplier_generic, dunestore, ktv_start, shell_ext, widget) имеют dune_plugin.sign и dune_plugin_signer_id.txt ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c034 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 поиск dune_plugin.sign в $P/flashdata/plugins и $P/firmware_ext/plugins нашёл ровно 10 файлов: dune-hd.tv, dunemdb_supplier_youtube, smotreshka.tv, dunemdb_supplier_online_movies, dunestore, dunemdb_supplier_generic, android_apps, ktv_start, widget, shell_ext. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c035 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В shell.log r25 при загрузке плагинов из /flashdata/plugins для dune-hd.tv записаны num_files=224, num_bytes=2701081, digest A8235D91EA8D8DB2E60845D3B2826327CFB300FB и «[plugin_signer] DSA verification for signer_id com.dune-hd: OK». ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c036 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В shell.log r25 при загрузке плагинов из /firmware_ext/plugins для shell_ext записаны num_files=292, num_bytes=3942977, digest 39A76B386D5C62C25A753DE2E92F5EE4363C2966 и «[plugin_signer] DSA verification for signer_id com.dune-hd: OK». ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c037 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ZIP dune_plugin_test_plugin5_plat.zip без dune_plugin.sign и dune_plugin_signer_id.txt установлен штатно в /flashdata/plugins/test_plugin5_plat (в логе; фактически /data/data/com.dunehd.app/flashdata/plugins/test_plugin5_plat) и зарегистрирован как Plugin 'test_plugin5_plat' of type 'plain'. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c038 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В strings libduneutil.so r25 присутствуют имена external_plugins_enabled, signed и allowed_plugin_signer_ids. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c060 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 после ENTER на dune_plugin_test_plugin5.zip в файловом браузере установщик сразу показал диалог «Установка приложения» с текстом «KB probe 5: установлено успешно.» и кнопками «Запустить» и «Закрыть»; вопроса перед установкой не было. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c061 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 после ENTER на dune_plugin_test_plugin11z.zip в файловом браузере установщик сразу показал диалог «Установка приложения» с текстом «KB probe 11z: установлено успешно.» и кнопками «Запустить»/«Закрыть»; вопроса перед установкой не было, нажата «Закрыть». ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c062 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 при проверке экрана после завершения установки plugin_installer:// по IP Control диалога не было: остался раздел «Приложения», ничего не спрашивалось, кнопки не нажимались. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c063 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на tv188b r25 при проверке экрана после завершения удаления plugin_uninstaller://test_plugin11z по IP Control диалога не было: ничего не спрашивалось, кнопки не нажимались. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c066 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В populate_plugins (0x00215450) r25 после разбора манифеста plugin_signer (0x002aa204) вызывается только если properties_get_bool(<свойства плагина>, "strict_verify_needed", 0) истинно; при ложном значении плагин регистрируется без вызова plugin_signer. ↩↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c067 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Если при strict_verify_needed plugin_signer вернул 0, populate_plugins r25 пишет «[populate_plugins] ERROR: signature verification failed for '%s', but required» и не регистрирует плагин (переход к освобождению описателя, минуя регистрацию). ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c068 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В ветке populate_plugins r25 со вторым аргументом 0 плагин пропускается без загрузки, если в его каталоге есть обычный файл .bad_signature (лог «[populate_plugins] %s: bad_signature flag is set»); в ветке с ненулевым вторым аргументом этот файл не проверяется. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c069 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В populate_plugins r25 «plugin %s is not permitted» пишется, когда глобальный указатель на функцию-фильтр (DAT_00ee9e68) не нулевой и вернул ненулевое значение для имени плагина; в ветке со вторым аргументом 0 каталог плагина затем удаляется FS_remove_recursively_if_exists, в другой ветке — только пропуск. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c114 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · plugin_signer (0x002aa204) r25 читает signer_id из файла dune_plugin_signer_id.txt в каталоге плагина (FUN_002aa164); если файла нет, пишет «[plugin_signer] %s: the required signer_id is missing» и возвращает 0. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c071 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · plugin_signer r25 проверяет signer_id по списку через запятую (FUN_002a9f64); список берётся из поля ro_config по смещению 0x1f0, а если оно пусто — «com.dune-hd» или «com.dune-hd,
»; signer_id не из списка — «[plugin_signer] %s: signer_id '%s' not allowed» и 0. ↩↩ -
fw-tv188b-261021-0117-r25--plugin-loader.c073 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · plugin_signer r25 открывает <каталог>/dune_plugin.sign; нет файла — «the required signature not found for plugin '%s'» и 0; файл читается до 256 байт, и если его размер (ftell после fseek в конец) не равен прочитанному — «invalid signature file for plugin '%s'» и 0. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c074 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Дайджест подписи в plugin_signer r25 (FUN_002a9ab4) — SHA по содержимому всех обычных файлов каталога плагина рекурсивно, имена в каждом каталоге сортируются qsort; на верхнем уровне пропускаются dune_plugin.sign и, у плагина shell_ext, каталог icons; не-обычные файлы пропускаются с WARNING. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c116 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · plugin_signer r25, если signer_id «com.dune-hd» прошёл FUN_002a9f64 и файл dune_plugin.sign прочитан целиком, проверяет подпись встроенным в libduneshell.so ключом (dsa_sign_verify_dsa_signature с константами DAT_00e8e8c8…) и пишет итог «DSA verification for signer_id %s: OK|failed». ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c117 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Другой signer_id plugin_signer r25, если он прошёл FUN_002a9f64 и файл dune_plugin.sign прочитан целиком, проверяет подпись, только если он равен get_customer_id(); тогда ключ берётся из /config/plugin_key.pem, а без него — из /firmware/config/plugin_key.pem. Если signer_id не равен get_customer_id(), пишет «unsupported signer_id»; если равен, но нет ни одного из этих файлов — «plugin_key.pem not found»; в обоих случаях возвращает 0. На устройстве эти ветки не проверялись. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c076 · code · unknown; прошивка — · Манифест dune_plugin.xml плагина dune-hd.tv (версия 240718_1541) содержит в
строку yes . ↩ -
fw-tv188b-261021-0117-r25--plugin-loader.c086 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) сторонний test_plugin13v с
yes в params и испорченным dune_plugin.sign не зарегистрирован: plugin_signer остановился на «the required signer_id is missing», populate_plugins — «signature verification failed for 'test_plugin13v', but required»; в installed_plugins.xml его нет. ↩ -
fw-tv188b-261021-0117-r25--plugin-loader.c087 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · При проверке на устройстве (один прогон) сторонний test_plugin13n с тем же испорченным dune_plugin.sign, но без strict_verify_needed, зарегистрирован без строк plugin_signer, есть в installed_plugins.xml, и его точка входа KB13N dlg вызвала handle_user_input(dlg). ↩↩↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (один прогон) DSA-проверку подписи в shell.log прошли dune-hd.tv (в его dune_plugin.xml есть strict_verify_needed=yes) и shell_ext (строки strict_verify_needed в его dune_plugin.xml нет), а сторонний test_plugin13n без флага зарегистрирован без строк plugin_signer. ↩
-
fw-apk-260724-0207-r24.c046 · code · android-atv; прошивка 260724_0207_r24 · У плагинов android_apps, ext_epg, kartina_tv_launcher и radiotime в data.zip нет dune_plugin.sign и dune_plugin_signer_id.txt, а в tv175u той же сборки они есть ↩↩
-
fw-apk-260724-0207-r24.c047 · code · android-atv; прошивка 260724_0207_r24 · У пяти подписанных плагинов data.zip (dunemdb_supplier_generic, dunestore, ktv_start, shell_ext, widget) dune_plugin.sign отличается по sha256 от tv175u той же сборки, а dune_plugin_signer_id.txt и dune_plugin.xml совпадают ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c042 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Очередь операций устроена так, что у плагина одновременно работает не больше одной операции: plugin_opexec_try_activate_requests пропускает плагины, уже попавшие в набор занятых, а при постановке запроса, если у плагина уже есть активная запись, активация не вызывается, а при PLUGIN_OPEXEC = 1 печатается «plugin_opexec I: postponed since %s currently active». ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c008 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Тайм-аут операции приходит в nav_plugin_perform_operation_blocked в микросекундах: функция проверяет assert «timeout_us >= 0», сравнивает его с часами CLOCK_MONOTONIC в микросекундах и в сообщении «start (timeout=%.1fs)» делит на 1000000. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c012 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · По истечении тайм-аута nav_plugin_perform_operation_blocked печатает «plugin W: %s->%s(%s): cancelling by timeout (%.1fs)» и отменяет свой запрос вызовом отмены по id с флагом fast = 1, но продолжает ждать результата в том же цикле. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c013 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Если операция была отменена по тайм-ауту и действие-результат не задано, оболочка подставляет в результат ошибку с текстом перевода plugin_operation_timed_out, печатает «plugin W: %s->%s(%s): canceled in %.3fs» и возвращает статус 2. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c017 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Отмена операции PHP-плагина (php_plugin.c, fcn.00272050) находит дескриптор операции по id, печатает «Cancelling... Output-data: %p.» и ставит в дескрипторе байт-флаг отмены — и больше ничего: ни php_server, ни PHP-коду отмена не передаётся. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime--opexec.c036 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запуск по IP Control точки входа плагина, пока у того же плагина идёт 20-секундный handle_user_input, исполняется только после конца первого вызова (через ~0,04 с после его результата) и в том же php_server; строк «postponed since … currently active» и «canceling active cancelable» нет — второй запрос попадает в исполнитель операций уже после конца первого. ↩
-
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-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.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--http-api--ext-command-params.c061 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На tv188b r24 cmd=status отвечает XML command_result с protocol_version=6 — на единицу больше последней версии, описанной в документе IP Control (5) ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c063 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Ответ cmd=status на tv188b r24 содержит параметры, которых нет в документе IP Control 1–5: phv_md5, android_app_active, android_md5, md5, playback_volume_index, playback_volume_index_max, app_version ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c060 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 есть строки команд, которых нет в документе IP Control 1–5: set_next_url, light_stop, bt_command, key_action, voice_action, overall_state, ui_action_scroll, photo_viewer_action, generic_action, get_config, set_config, reset_settings, а в libxxx_do.so ещё reboot ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c093 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 cmd=open_path&url=root://applications/<подпись пункта> отвечает command_status=ok, но точку входа плагина не запускает (вызовов 0 → 0), а launch_media_url с plugin_launcher://{name=<плагин>} {ep_media_url=
} её запускает (0 → 1). ↩ -
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 launch_media_url с plugin_launcher://{name=downloads}{action_id=open_magnet}{magnet_url=
} запускает публичное действие плагина без точки входа: «[plugin_launcher] launching plugin 'downloads' (ep (null), action open_magnet)» и handle_user_input(entry.open_magnet) с тайм-аутом 300 с. ↩ -
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.c098 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды IP Control ждут, пока идёт handle_user_input плагина: launch_media_url, отправленный через 4 с после начала 20-секундной операции, получил ответ только после её конца — и для точки входа того же плагина, и для другого плагина. ↩
-
fw-tv188b-261021-0117-r25--media-player.c068 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control launch_media_url с одноэлементным M3U по HTTP (компьютер либо www плагина), содержащим plugin_launcher, вызывает действие b3 и передаёт from в user_input. ↩↩
-
fw-tv188b-261021-0117-r25--media-player.c055 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control set_playback_state speed=0 ставит plugin VOD на паузу. ↩
-
fw-tv188b-261021-0117-r25--media-player.c056 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control set_playback_state speed=256 возобновляет plugin VOD после паузы. ↩
-
fw-tv188b-261021-0117-r25--media-player.c057 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 IP Control set_playback_state position=30 перематывает plugin VOD к 30-й секунде. ↩
-
fw-tv188b-261021-0117-r25--media-player.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 команды set_playback_state speed=0, speed=256 и position=30 вызывают у VOD-плагина playback_state_changed без playback_user_action для этих команд. ↩
-
fw-tv188b-261021-0117-r25--media-player.c071 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 ответ cmd=status во время VOD содержит playback_speed, playback_duration, playback_position_version, playback_is_buffering, playback_volume, playback_mute, is_video, pause_is_available, teletext_available, scrambling_detected, audio_track.0.*, playback_caption, playback_extra_caption и playback_picture. ↩
-
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c091 · code · tv175u, unknown; прошивка 260724_0207_r24 · CGI do tv175u 260724_0207_r24 содержит те же строки разбора timeout и формата ответа: «invalid timeout '%s' ignored», «syntax '%s'», «json syntax required», EXTCMD_SYNTAX_XML/EXTCMD_SYNTAX_TEXT ↩
-
fw-tv188b-260827-0003-r24.c017 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Нативные библиотеки dune.apk лежат в /system/priv-app/dune/lib/arm/, среди них libduneshell.so (~15 МБ), libphp5.so, libvlc.so, libcvm.so, libmicrowindowsawt.so ↩
-
fw-tv188b-261021-0117-r25--media-player.c039 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · libxxx_dune_mediainfo.so и libvlc.so в tv188b r25 отличаются по SHA256 от одноимённых ELF r24. ↩
-
fw-tv188b-261021-0117-r25--media-player.c038 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · subtitles.php в tv188b r24 и r25 имеет одинаковые размер 25911 байт и SHA256 b476a7eab854827cf514a5b02a644c7bc4ae5d4f8efd55629fc846fae32c249e. ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers--stream-protocol.c039 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Серии VOD-описания поставщика добавляются с playback_url_is_stream_url = false; VOD-описание задаёт buffering_ms = 3000 и keep_playing_on_reenter = true ↩
-
fw-tv188b-261021-0117-r25--media-player.c037 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · tree.tsv r25 содержит ELF system/system/priv-app/dune/lib/arm/libvlc.so размером 36300964 байта и firmware/lib/libvlc.so как ссылку на /data/data/com.dunehd.app/lib/libvlc.so. ↩
-
fw-tv188b-261021-0117-r25.c287 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при старте VOD тестового плагина test_plugin6 с PluginVodInfo::buffering_ms=3000 оболочка пишет в shell.log «[player] setting buffering to 3000ms» и «[player] DEBUG: using special buffering 3000ms». ↩
-
fw-tv188b-261021-0117-r25--java-player.c051 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тестовый MP4 по HTTP без engine запускается через VLC с contentType=2 (HTTP_FILE). ↩
-
fw-tv188b-261021-0117-r25--java-player.c054 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тестовый HLS с TS-сегментами запускается через ExoPlayer с contentType=4. ↩
-
fw-tv188b-261021-0117-r25--java-player.c057 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 http_headers с User-Agent (URL-кодированный либо сырой вид) у HTTP MP4 на VLC не заменяет User-Agent: сервер видит VLC/3.0.15 LibVLC/3.0.15. ↩
-
fw-tv188b-261021-0117-r25--java-player.c058 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 http_headers:X-KB8-Test%3A%20one у HTTP MP4 на VLC не передаёт X-KB8-Test серверу. ↩
-
fw-tv175u-260724-0207-r24.c016 · code · tv175u, android; прошивка 260724_0207_r24 · Оболочка Dune — привилегированный APK /system/priv-app/dunehd_shell/dunehd_shell.apk (30661088 байт); его нативные библиотеки (libduneshell.so, libvlc.so и др.) лежат в /system/priv-app/dunehd_shell/lib/arm/ ↩
-
fw-apk-260724-0207-r24.c037 · code · android-atv; прошивка 260724_0207_r24 · Из 8526 классов dex 1001 — в пакетах com.dunehd.* (shell, shell.bg, shell.internalplayer, platform, stbapi и др.); остальное — библиотеки: Guava, ExoPlayer, cz.msebera httpclient, Jackson, androidx, libVLC (org.videolan.libvlc), JSON-RPC-клиент Kodi (org.tinymediamanager.jsonrpc — 538 из 722 классов classes2.dex) ↩
-
fw-tv188b-260827-0003-r24.c018 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Утилиты Dune в /system/dunehd/firmware/bin/ — симлинки на /data/data/com.dunehd.app/lib/libxxx_<имя>.so (например php_server, run_plugin_cgi, ts, root) ↩
-
fw-tv188b-260827-0003-r24.c019 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Сами исполняемые файлы libxxx_*.so лежат в /system/bin/ (37 ELF); крупнейший — libxxx_ts.so (44235376 байт) ↩
-
fw-tv188b-261021-0117-r25.c006 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 в firmware_ext/plugins 15 каталогов встроенных плагинов с dune_plugin.xml: к 13 из r24 добавлены downloads и s928x_dvfel ↩
-
fw-tv188b-261021-0117-r25--downloads--manager-runtime.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В r24 (260827_0003) файла system/system/bin/libxxx_dl_manager.so нет: в отсортированном tree.tsv за libxxx_curl.so сразу идёт libxxx_do.so. ↩
-
fw-tv188b-261021-0117-r25--network-services.c047 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В r25 firmware/bin/ts — симлинк на /data/data/com.dunehd.app/lib/libxxx_ts.so; сам libxxx_ts.so в /system/bin занимает 44235376 байт. ↩
-
fw-tv188b-261021-0117-r25.c030 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Встроенный плагин downloads (r25, type php, program main.php): точка входа в root://applications показывается действием cond с pattern is_plugin_file(dunemdb_supplier_online_movies/__v2); вторая — в setup://applications (show_by_default no); public_actions open_magnet и download_settings; EPF включены ↩
-
fw-tv188b-261021-0117-r25.c007 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Новые исполняемые файлы Dune в r25: libxxx_dl_manager.so, libxxx_lcconv.so, libxxx_vsftpd.so в /system/bin; симлинки firmware/bin/dl_manager, firmware/bin/lcconv и firmware_ext/ftpserver/bin/vsftpd ведут в /data/data/com.dunehd.app/lib/ ↩
-
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--network-services.c065 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В прогоне collect8 встроенный ts (pid 32670) слушает порт 8095 на всех интерфейсах (
*:8095) и отвечаетMatriX.134на/echoс компьютера (http://<адрес в LAN>:8095/echo), то есть доступен из LAN. ↩ -
fw-tv188b-261021-0117-r25--network-services.c066 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Процесс ts (pid 32670, root, ppid 1) в прогоне collect8 (2026-10-30) не менялся с 12:45 до 13:09 и пережил
am force-stop com.dunehd.appв 13:02; в его ts.log есть записи 2026-10-28 17:24:34–37, в том числе «end set settings». ↩ -
fw-tv188b-261021-0117-r25--downloads.c076 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В прогоне collect8 при одном воспроизводимом файле торрента play_magnet сразу вернул downloads->launch_media_url с потоком
http://127.0.0.1:8095/stream/Big%20Buck%20Bunny.mp4?link=dd8255ecdc7ca55fb0bbf81323d87062db1f6d1c&index=2&play; open_magnet.m3u и open_magnet.json в $P/tmp/plugins/downloads не созданы, выбора файла не было. ↩ -
fw-apk-260724-0207-r24.c054 · code · android-atv; прошивка 260724_0207_r24 · libxxx_ts.so (44235376 байт; firmware/bin/ts по apk_bin_map.txt) — программа на Go с идентификацией TorrServer/MatriX.134 (торрент-сервер), а не ядро медиаплеера ↩
-
fw-apk-260724-0207-r24.c044 · code · android-atv; прошивка 260724_0207_r24 · В data.zip 12 встроенных плагинов: android_apps, bluray, dunemdb_supplier_generic, dunemdb_supplier_rutube, dunemdb_supplier_youtube, dunestore, ext_epg, kartina_tv_launcher, ktv_start, radiotime, shell_ext, widget ↩
-
doc-sdk-plugins.c064 · doc · any-documented; прошивка — · DuneSystem::$properties содержит plugin_name, install_dir_path, tmp_dir_path, data_dir_path, plugin_www_url, plugin_cgi_url ↩
-
doc-sdk-plugins.c066 · doc · any-documented; прошивка — · data_dir_path (постоянные данные) недоступен на устройствах без System Storage и Flash Memory Storage — тогда ключ не задан ↩
-
doc-sdk-plugins.c109 · doc · any-documented; прошивка — · check_update/auto включает фоновую автопроверку обновлений (по умолчанию выключена), доступно с прошивки 150430_r10 ↩
-
doc-sdk-plugins.c117 · doc · any-documented; прошивка — · Для подписанного плагина система проверяет подпись и отказывается его использовать при несовпадении подписи или недопустимом signer ID ↩↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c064 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Описатель rutube: caption %tr%title_supplier, langs russian, supported_video_types video|trailer, playback_type app, fixed_trailer_files [search_trailers], icon_url plugin_file://%android_apps%/icons/rutube.png, expr country(ru) ↩
-
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-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--libphp5.c045 · 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-бандле сертификат GlobalSign Root CA имеет notAfter 2028-01-28 12:00:00 UTC. ↩
-
- 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.
-
doc-sdk-plugins.c042 · doc · any-documented; прошивка — · По SDK тайм-аут операций плагина по умолчанию составляет 10 секунд; operation_timeout задаёт общий (
) и потиповой ( N ) тайм-аут. ↩ -
- doc-sdk-plugins.c117 · doc · any-documented; прошивка — · Для подписанного плагина система проверяет подпись и отказывается его использовать при несовпадении подписи или недопустимом signer ID
- fw-tv188b-261021-0117-r25--plugin-loader.c066 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · В populate_plugins (0x00215450) r25 после разбора манифеста plugin_signer (0x002aa204) вызывается только если properties_get_bool(<свойства плагина>, "strict_verify_needed", 0) истинно; при ложном значении плагин регистрируется без вызова plugin_signer.
-
doc-sdk-dune-custom-firmware.c004 · doc · any-documented; прошивка — · allowed_plugin_signer_ids задаёт разделённый запятыми список допустимых signer ID; если параметр не задан, разрешены все signer ID; умолчание — не задан, доступен с прошивок 130803_b8+. ↩
-
fw-tv188b-261021-0117-r25--plugin-loader.c072 · code · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Поле ro_config по смещению 0x1f0, из которого plugin_signer r25 берёт список допустимых signer_id, заполняется разборщиком ro_config_load_if_needed из свойства allowed_plugin_signer_ids. ↩
-
fw-apk-260724-0207-r24--data-deploy.c047 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, для PHP-плагина в APK HD::is_apk() истинно, а HD::is_fw_apk() ложно (HD_APK=1 без HD_FW_APK), то есть HD::is_limited_apk() = true и HD::with_network_manager() = false ↩
-
fw-tv175u-260724-0207-r24.c034 · inference · tv175u, android; прошивка 260724_0207_r24 · tv175u 260724_0207_r24 не подходит под android-dune-fw в формулировке таксономии (APK com.dunehd.app, HD_APK=1, HD_FW_APK=1): оболочка — dunehd_shell.apk, init не выставляет HD_APK/HD_FW_APK, нет apk_-конфигов, xbin/dunehd и симлинков libxxx_; это отдельный подкласс собственной Android-прошивки Dune (Realtek, Android 9) ↩
-
fw-apk-260724-0207-r24--data-deploy.c026 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, FS-префикс этого APK — /data/data/com.dunehd.app (RoConfig.getPackageName() не разобран; пакет APK — com.dunehd.app, и тот же путь записан в run_widget_path.env) ↩
-
fw-apk-260724-0207-r24--data-deploy.c029 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в этом APK (ограниченный режим, не fw_apk)
/tmp — отдельный каталог данных приложения, а не системный /tmp, а firmware/ и firmware_ext/ — копия из data.zip, а не ссылки на /system/dunehd; плагину в APK нужно обращаться к ним через $FS_PREFIX ↩ -
fw-apk-260724-0207-r24--data-deploy.c049 · inference, disputed · android-atv; прошивка 260724_0207_r24 · Вероятно, встроенный PHP (libphp5.so) сам добавляет $FS_PREFIX к абсолютным путям /firmware, /config, /flashdata, /fconfig (и т. п.) в файловых функциях и в командах exec/system/popen, так что PHP-плагин с путями вида /config/… работает и в APK; правила подстановки (какие функции, какие корни, /tmp) не установлены ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c031 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK PHP-плагин, обращаясь файловыми функциями к /tmp/…, /config/…, /flashdata/…, /fconfig/…, /firmware…, фактически работает с $FS_PREFIX/tmp/… и т. д., к /D/… — с $FS_PREFIX/tmp/mnt/D/…, а пути, уже начинающиеся с $FS_PREFIX (/data/data/<пакет>), не меняются; поэтому годятся и абсолютные пути прошивки, и getenv("FS_PREFIX") . "/config/…" ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c013 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK программа плагина, запущенная exec/shell_exec по абсолютному пути вне /firmware/bin/ и /firmware_ext/php/ (например /flashdata/plugins/<плагин>/bin/x или $FS_PREFIX/…), запускается как «sh <путь>»: shell-скрипт так работает и без бита x, а ELF-бинарник — нет ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c016 · inference · android-atv; прошивка 260724_0207_r24 · Для '/' в самом начале команды _php_add_fs_prefix_to_cmd проверяет байт перед началом строки (вне команды), поэтому, вероятно, путь первым словом (/config/x.sh …) получает FS_PREFIX непредсказуемо — в зависимости от памяти перед строкой; «sh » при этом добавляется ↩
-
- fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c022 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK proc_open(<команда>, …, $cwd) с $cwd вида /tmp/… или /config/… переходит в системный каталог Android, а не в $FS_PREFIX/…: пути в команде переписываются, а cwd — нет
- fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c023 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, при переданном в proc_open массиве $env дочерний процесс получает только эти переменные: FS_PREFIX, PATH, LD_LIBRARY_PATH и прочее окружение php_server в него не попадают, если плагин их не передал
-
- fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c029 · inference · android-dune-fw; прошивка 260827_0003_r24 · Вероятно, на tv188b 260827_0003_r24 подстановка путей и команд в PHP работает так же, как в APK: там тот же libphp5.so, а init и dunehd_service.env задают FS_PREFIX=/data/data/com.dunehd.app
- fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c030 · inference · android-dune-fw; прошивка 260724_0207_r24 · Вероятно, на tv175u 260724_0207_r24 libphp5.so пути и команды не переписывает: файл тот же, что в APK, а скрипт /system/dunehd/init FS_PREFIX не задаёт, так что getenv("FS_PREFIX") пуст
-
fw-tv188b-260827-0003-r24--init-runtime.c062 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Пути /config, /firmware, /flashdata в скриптах и плагинах, вероятно, — короткие имена для $FS_PREFIX/config, $FS_PREFIX/firmware, $FS_PREFIX/flashdata (в одних скриптах пишут с префиксом, в других — без) ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c081 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · data_dir_path, вероятно, — <хранилище>/plugins_data/
; для плагина из flashdata — с префиксом $FS_PREFIX ($FS_PREFIX/flashdata/plugins_data/ ); варианты persistfs и запасной /config/plugins_data, а также правило выбора не установлены. ↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c082 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24, 261021_0117_r25 · tmp_dir_path, вероятно, — $FS_PREFIX/tmp/plugins/
(для плагина из flashdata); shell-переменная bluray задаёт тот же путь без префикса — /tmp/plugins/ . ↩ -
fw-tv188b-260827-0003-r24--movie-suppliers.c050 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · На 260827_0003_r24 global_actions generic (boot_end/install/update) не выполняются, потому что флаг movie_suppliers_update есть; описатели generic строит shell_ext (update_service_plugins → movie_suppliers_update.sh) ↩
-
fw-tv188b-260827-0003-r24--movie-suppliers.c023 · code, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Значения по умолчанию ключей описателя: playback_type = stream, play_action = '', caption = имя файла, supported_video_types = video, server_managed = false (если ключа нет и id не входит в Config::$server_managed_suppliers; для id из этого списка — true), icon_url = '', location_handling = ignore, special_category = false, logo_width = 249, logo_height = 68; если logo_icon_url задан пустой строкой и есть icons/small/
.jpg, logo_icon_url и logo_width/logo_height получают 100/100 ↩ -
fw-tv188b-260827-0003-r24--movie-suppliers.c059 · code, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Команда запуска generic: для deeplink вида intent:…#Intent — «am start '
'»; иначе «am start» и, только если $package непустой, « -p ' '»; затем deeplink: « -d ' '», если FS_PREFIX пуст и ссылка http…, иначе отдельным аргументом « ' '» ↩ -
fw-apk-260724-0207-r24--data-deploy.c012 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, скрипты из data.zip после распаковки в APK не имеют бита исполнения, поэтому их запускают через sh (так записан RUN_WIDGET_PATH='sh /data/data/com.dunehd.app/…/run_widget.sh'); плагину в APK надёжнее вызывать скрипты прошивки как «sh <путь>», а не напрямую ↩
-
fw-tv188b-261021-0117-r25--app-launch.c040 · inference, disputed · tv188b, android-dune-fw; прошивка 261021_0117_r25, 260827_0003_r24 · Гипотеза для плагинов на tv188b — cmd «/system/dunehd/dunehd_service do am start …» в launch_ext_app уходит в shell, то есть в системный am от имени демона dunehd_service (root), где есть --user и прочие опции, которых нет в IntentBuilder, и нет ограничения exported. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c037 · inference · tv188b, android-dune-fw, android-atv; прошивка 261021_0117_r25, 260827_0003_r24, 260724_0207_r24 · На tv188b оболочка работает с sharedUserId android.uid.system, поэтому запуск неэкспортированной activity чужого пакета через launch_ext_app, вероятно, проходит; в APK DMC на ATV (обычный uid) он, вероятно, падает SecurityException → startActivityFromArgs false → статус -1 → error_action. ↩
-
fw-tv188b-261021-0117-r25--app-launch.c054 · inference · tv188b, android-atv, android-dune-fw; прошивка 260724_0207_r24, 261021_0117_r25 · Следствие для плагинов — если launch_ext_app получает delay ≤ 0 (у поставщика без wait_app_start_delay shell_ext ставит -1) и в момент проверки оболочка ещё держит фокус, ожидание сразу кончается «timed-out» и выполняется error_action, хотя activity стартовала («activity launch status: 0») — пользователь увидит ошибку («Не удалось запустить воспроизведение» у shell_ext); встроенные поставщики generic и rutube всегда отдают wait_app_start_delay 10. ↩
-
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--shell-ext--entry-handler.c088 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · Вероятно, для «Продолжить» у кнопки поставщика история plugin VOD должна содержать uid вида
:…, movie_id нужного фильма и len>0 и pos>=0. ↩ -
fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c087 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запись истории plugin VOD получает uid из PluginVodSeriesInfo::recent_uid, action_plugin из PluginVodInfo::recent_plugin и action_params из PluginVodInfo::recent_action_params. ↩
-
fw-tv188b-260827-0003-r24--http-api.c067 · inference · tv175u, unknown; прошивка 260724_0207_r24 · В tv175u r24 HTTP (в том числе /cgi-bin/do и /plugins/…) обслуживает, вероятно, busybox httpd, запущенный init с корнем /tmp/www; что /bin/httpd — это xbin/httpd, по карте не доказано ↩
-
fw-tv188b-260827-0003-r24--http-api.c113 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В tv188b r24 HTTP на HD_HTTP_LOCAL_PORT (80), вероятно, обслуживает busybox httpd из libxxx_busybox.so, как в tv175u r24 (c067); отдельного бинарника httpd/lighttpd в карте нет, а кто и с каким корнем запускает httpd и кто создаёт /tmp/www/cgi-bin/do, в init и извлечённых strings не найдено ↩
-
fw-tv188b-261021-0117-r25.c095 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 $FS_PREFIX/bin/httpd — симлинк на /data/data/com.dunehd.app/lib/libxxx_busybox.so, и в $FS_PREFIX/apk_bin_map.txt есть строка «bin/httpd libxxx_busybox.so». ↩
-
fw-tv188b-260827-0003-r24--http-api.c019 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Вероятно, на tv188b r24 потоковая HTTP-обёртка встроенного PHP (file_get_contents/fopen) подменяет адреса 127.0.0.1/cgi-bin/plugins/… и localhost/cgi-bin/plugins/… на http://127.0.0.1:$HD_HTTP_LOCAL_PORT/cgi-bin/plugins/… . ↩
-
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.c381 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении php_server плагина test_plugin6 (проверка на устройстве) HD_HTTP_LOCAL_PORT=80. ↩
-
- 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.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:
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c038 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK запросы плагина к http://127.0.0.1/cgi-bin/plugins/… и http://localhost/cgi-bin/plugins/… через curl_setopt($ch, CURLOPT_URL, …) и через потоки (fopen, file_get_contents) уходят на http://127.0.0.1:
/cgi-bin/plugins/… (в APK порт 11080), так что адрес без порта работает ↩ -
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c043 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, при открытии потока с поиском по include_path (fopen($f, $mode, true), file_get_contents($f, true) — бит 1 options, USE_PATH) _php_stream_open_wrapper_ex путь не переписывает, и FS_PREFIX к нему приписывается разве что при разрешении через virtual_file_ex ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c034 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK при заданной FS_PREFIX абсолютные пути под корнями /config и /tmp, разрешаемые realpath(), include/require, проверкой open_basedir и созданием временных файлов tempnam/tmpfile через virtual_file_ex, получают FS_PREFIX перед разрешением. ↩
-
fw-apk-260724-0207-r24--data-deploy--php-fs-prefix.c042 · inference · android-atv; прошивка 260724_0207_r24 · Вероятно, в APK при заданных HD_APK и FS_PREFIX плагин, читающий /sys/class/net/eth0/address через fopen с режимом на 'r' или file_get_contents без поиска по include_path, получает содержимое $FS_PREFIX/tmp/run/dune_mac.txt ↩
-
fw-tv188b-260827-0003-r24--init-runtime.c042 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Через
dunehd_service do <команда>процессы без root (плагины, оболочка) выполняют команду от имени демона dunehd_service, работающего от root ↩ -
fw-tv188b-261021-0117-r25.c259 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 из php_server PHP-плагина (id — uid=1000(system), context=u:r:system_app:s0) команда shell_exec('/system/dunehd/dunehd_service do id') выводит uid=0(root) gid=0(root) groups=0(root) context=u:r:shell:s0. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c032 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · PHP-сервер плагина не завершается после вызова: он живёт между вызовами, пока оболочка его не остановит (правка скрипта, сбой, выход оболочки), поэтому статические переменные PHP (например, static $plugin в DefaultDunePluginFw::call_plugin_impl) обычно переживают вызов ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--php-runtime.c016 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Тайм-аут операции (operation_timeout; по SDK по умолчанию 10 с, потиповой
N может задать своё значение) отсчитывает оболочка: по истечении она отменяет операцию у себя и сообщает «Operation time exceeded», но PHP-вызов в php_server не прерывается — его результат приходит позже и отбрасывается («Received result for cancelled operation»). ↩ -
fw-tv188b-260827-0003-r24--http-api--ext-command-params.c095 · inference · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 дополнительные пары {ключ=значение} в plugin_launcher://{name=…}{action_id=…}{ключ=значение}, по-видимому, доходят до данных запускаемого действия: open_magnet плагина downloads, который без magnet_url возвращает null, вернул следующее действие entry.ensure_ts. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c034 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Разрешение gcomps, вероятно, даёт плагину доступ к графическим компонентам оболочки (GComps: диалог gcomps_dialog, действия ShowGCompsDialog/ChangeGComps); какие действия без него запрещены, по strings не установлено ↩
-
fw-tv188b-260827-0003-r24--plugin-loader--manifest.c046 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · У dunemdb_supplier_rutube и dunemdb_supplier_youtube check_update без url, вероятно, служит только носителем prefer_builtin_if_url_differ (выбор встроенной копии при дубликате), а собственная проверка обновлений у них отключена ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c070 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Плагин с подписью, не прошедшей проверку: в r24 при загрузке есть ошибка «signature verification failed … but required» при флаге strict_verify_needed; по SDK подписанный плагин с неверной подписью система не использует вообще — что делает загрузчик r24 без этого флага, не установлено ↩
-
- fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c094 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 по концу каждой из двух серий plugin VOD (RUN_POSTPLAY_ACTIONS, eos: yes) оболочка добавила запись истории: uid kbp9:e1:1 и kbp9:e1:2, action_plugin/action_params, index 0/1, без ключей url и video_id.
- fw-tv188b-261021-0117-r25--shell-ext--entry-handler.c097 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запись истории req7, добавленная по концу серии plugin VOD (RUN_POSTPLAY_ACTIONS), содержит uid «kbp7vod:s1» (из PluginVodSeriesInfo::recent_uid), action_plugin «test_plugin7», action_params {from: kbp7_vod, kbp7: recent}, index 0, caption «KB probe 7 VOD», ctype video, pos 24, len 25, start, watched 26 и video_id «hash:F077E72E6AD27E99»; ключа url в записи нет.
-
fw-apk-260724-0207-r24.c042 · code · android-atv; прошивка 260724_0207_r24 · Сверка data.zip с system/system/dunehd/ прошивки tv188b r24 по путям и sha256: 2918 файлов совпадают, 18 различаются, 27 есть только в APK, 245 записей только в прошивке — в основном симлинки firmware/bin/* и firmware/lib/* на /data/data/com.dunehd.app/lib/lib*.so ↩