From fcb94e30581b198d0c530e7986310ca38c663429 Mon Sep 17 00:00:00 2001 From: zefie Date: Fri, 30 Jul 2021 07:34:17 -0400 Subject: [PATCH] v0.9.9 - update: config.json: add DoNotEncrypt flags to http and https - update: app.js: add ability to override service flags when using getServiceString - update: app.js: add ability to disable 'wtv-star' while keeping 'wtv-*' - update: app.js: add internal header 'minisrv-use-carriage-return', set to 'false' to disable `\r` in headers - implement bf0app flashrom functionality - update: actually fix wtv-1800:/preregister and include tellyscripts --- README.md | 16 +-- README_bf0app_flashrom.txt | 5 + .../BF0APP/bf0app_boot_uncompressed.tok | Bin 0 -> 6663 bytes .../DC/dc_production_normal.tok | Bin 0 -> 979 bytes .../DERBY/derby_production_normal.tok | Bin 0 -> 6059 bytes .../LC2/lc2_production_normal.tok | Bin 0 -> 6084 bytes .../WEBSTAR/dishplayer_production_normal.tok | Bin 0 -> 6050 bytes .../wtv-1800/{noflash.js.meh => noflash.js} | 11 +- .../ServiceVault/wtv-1800/preregister.js | 38 +++--- .../wtv-flashrom/current-noflash.js | 114 ++++++++++++++++++ .../ServiceVault/wtv-flashrom/get-by-path.js | 44 ++++++- .../ServiceVault/wtv-flashrom/get-lc2-page.js | 3 +- .../wtv-flashrom/initiate-lc2-download.js | 7 +- .../ServiceVault/wtv-flashrom/noflash.js | 114 ++++++++++++++++++ zefie_wtvp_minisrv/app.js | 55 ++++++--- zefie_wtvp_minisrv/config.json | 9 +- zefie_wtvp_minisrv/package.json | 2 +- zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj | 6 + 18 files changed, 363 insertions(+), 61 deletions(-) create mode 100644 README_bf0app_flashrom.txt create mode 100644 zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_boot_uncompressed.tok create mode 100644 zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/DC/dc_production_normal.tok create mode 100644 zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/DERBY/derby_production_normal.tok create mode 100644 zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/lc2_production_normal.tok create mode 100644 zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/WEBSTAR/dishplayer_production_normal.tok rename zefie_wtvp_minisrv/ServiceVault/wtv-1800/{noflash.js.meh => noflash.js} (88%) create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js create mode 100644 zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js diff --git a/README.md b/README.md index c5e0ea95..6a35a2f6 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,12 @@ This open source server is in alpha status. Use at your own risk. - Suports `.js` service files with synchronous or asynchronous requests - Supports multiple simultaneous users - WebTV-compatible HTTP(S) Proxy (via minisrv, or using an external proxy for enhanced features (such as [WebOne](https://github.com/atauenis/webone)) -- wtv-flashrom for LC2 and newer boxes (bf0app unsupported, need test unit) +- Flashrom flashing support for all known units (including bf0app 'Old Classic') - Can flash anything on [Ultra Willies](https://wtv.zefie.com/willie.php) with optional `use_zefie_server` flag set on `wtv-flashrom` service. -- wtv-update:/sync for Download-o-Rama style file downloading +- `wtv-update:/sync` for Download-o-Rama style file downloading ### Current issues: -- ~~Occasionally, in certain circumstances, a specific SSID may be unable to reconnect to the server until the server is restarted~~ *Hopefully fixed in [v0.9.3](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.9.3)* +- Satellite Receiver units reportedly cannot surf with http or https proxy. - Mis-configuring wtv-update:/sync DiskMaps may cause units to delete contents of partitions (need more info) ### Won't fix: @@ -24,12 +24,12 @@ This open source server is in alpha status. Use at your own risk. - No intentions to support user accounts, registration, or any form of database system ### Feature Todo: -- ~~Implement HTTP proxy (needs to be able to defluff most of the web, think retro WAP converter)~~ ***Done [v0.7.1](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.7.1)*** -- ~~Flashrom flashing functionality (at least for LC2 and higher)~~ ***Done [v0.8.0](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.8.0)*** -- ~~SSID/IP black/whitelisting (including tying SSID to an IP or multiple IPs)~~ ***Done [v0.9.4](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.9.4)*** -- Flashrom flashing for bf0app old classic (need donor unit) - wtv-lzpf support -- (maybe) wtvchat stuff +- TellyScript generation and/or manipulation (needed for Name Server configuration) +- ~~Flashrom flashing for bf0app old classic~~ ***Done [v0.9.9](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.9.9)*** +- ~~SSID/IP black/whitelisting (including tying SSID to an IP or multiple IPs)~~ ***Done [v0.9.4](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.9.4)*** +- ~~Flashrom flashing functionality (at least for LC2 and higher)~~ ***Done [v0.8.0](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.8.0)*** +- ~~Implement HTTP proxy (needs to be able to defluff most of the web, think retro WAP converter)~~ ***Done [v0.7.1](https://github.com/zefie/zefie_wtvp_minisrv/releases/tag/v0.7.1)*** ### How To Use: - Install [node.js](https://nodejs.org/en/download/). Be sure to say `Yes` when asked about `Chocolatey`. diff --git a/README_bf0app_flashrom.txt b/README_bf0app_flashrom.txt new file mode 100644 index 00000000..5b13af36 --- /dev/null +++ b/README_bf0app_flashrom.txt @@ -0,0 +1,5 @@ +The bf0app flashing system requires a two things that you must be aware of, that are different from a typical setup: +1) Your PPP system MUST accept auth, a noauth setup will not work for the 2nd dialing phase +2) You must have a clean dialup. DreamPi voltage-hacked lines, and unstable VoIP systems are known + to cause errors, leaving the box in a 'braindead' state with no flash. MiniSrv can help recover + from this but you will need to provide a stable dialup connection. This was tested with my Cisco 3825 setup. \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_boot_uncompressed.tok b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_boot_uncompressed.tok new file mode 100644 index 0000000000000000000000000000000000000000..958257d611347c7c7667dff6e642a4daf11e1922 GIT binary patch literal 6663 zcmcgx?Q+{T7Uc`{9nc?6+}sUe{#X{X~y z-#z%?he*)rZfBZbrf_g^@5Q+X7f9mAoaP~?*6Cy7$5H+FCeL^lWr-Y!vh^mXMZvNZ z-;e$#%nQ1p#WvyAAn`FI{yKd89Y%7>qb#P@%u~>urF>-#f+bCo&q0*44Sz)%2FQyS zgYxUrlVSSt2!f6|Y-7&ykw_#Y)0GqX8&g+o@cGiZC&dv<5Z`&~Ucx-?VzUqqe;>$B5IMZ7>_rnhbuCX(92hudXh=B{`Zb-+$x4%;G%>)0p@q&eG?c zJfzuJq6*WUgUXbGyb(#wJ;FJEWY4QGuDLJ2aXIt&4hiR0axjS z?r>zM(&`q*RdH7!lW(2m9i5oYnQRGcx zs5*vzIlW26d65#;`VrCbwY#`R2X!Ldd(5k!M0fV+?^yZ}^V}Lp#uSvx4|IHJzhat% zpRIxCAjSBs1`&H_RM=XFELDaQKgzZ#M@PwISIKimi@LuQjc&oioLe)Wv*@9~Eb$vn zV|W?;!%w&CTbhf%{oCzog+D)dsMufRApGDgy(=*Jj`GcYmeT4cVF&ZWC_<}zrL4^U zDO^`mK6u!3WhQ1}a=qmRi|IV4EB49S2UhDvVUqkDGGV|7l=l2>LFe0~pcgO;B%Et3 z3iT3;`r$Taw@DAiQJ9z&AuwLOYRlHB#8v*kVJVvZy#-wbitfYoj>aD2pId;j0_+gj z_gTI~5?g?Y0^Em1zbjLPLF^68k74xCvUQ|zBIUt`(zrEztcKODFEf$Cdc%D&%gfel zbV~RY^{MtR%F-3P+v4VgD^WQ<3(l8;dpsKk?r`QD4}+7*%$){~Gn)>dU5ws2m%}%s zXaAZ!`^o)EQ7xvc5I3iiD*+}Ar;dBN(4~1YQfmvnxUF+1&z?m zt8x8zHIl>qUo~7BD5&_UX+V%CPs25BM7;@%VwdG2WW~h3t_uE=1-)YhSE(TCf=Aq! zP%>QP@DDe&Mif{2KG%x82|;a{2ZI)WU#b7#fhVOB3RG}Hn0yKV)Ls@RG49Ns?Py*7B z%5q(O@YaZBq?6K%#*)1Z!qS)%87YL?8rima`@{SzW~C8yXp43#{?{u3>R6{hm92Lrwlc)`n-XmzD(G{U%85qf1KuV zwkz0g6vwvYM^7Cuy*c?=f=K{0!Cb;K;*!BlusD1vlYrw`97JpM6>E7wH@gMZ53G`G z2OZ`)9;wO&Vd@t3gKv4G7U>kO;k@Tt9P}P80hkQAls$oL{C484Nqx`Xpxu($StZ-z zUawoAGk_qV{EVs(gJ7ztuT=(6aQ%~I!;I}6;f5fMnbpkGM+l9Hj8evZEAmMnfA5pP zrT_Nw`esSQazX~NB*B6rsJfXFHn1!3stoK*>_@*RqBOhB(QGG za+s2vzL!@e2R-{ObX&_d{S+ayI5SDa@@UKW%a<~4VGOZE^ghcTuurPKdhA_*&m#DP zLd=G)%T`N^wA_xCa0^wx^2RXw%s4W|h$!1?qeT^zr@G2ONrCoSjak9zSBkn#@-X!d z3X(Bv{@T+$xoS}5fs9B{FJ-4`d(O9@4#+D_VG9+sdK5(vrvVWZL@NQ{)Faxd!!%no+^==nkMT*^q*2HLelV%vDUjGeErgS}}& z4L0FMC{U>d;-@NuxacE;Z16P>CS2q;n+>G8q+v~RRF7zxH|P=7|5O}aKCOfE^EnB( z{GO(qtr*T(Ayli7CEJ{eC3EkUt{QVv=JPp8>0QQIJr(y2Ia9r#_oWl(@&hi>l4Ufm y3bu;)Nj>BlN3Cky%e&e}#073q8{kHHQ%la?nc$sJb literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/DC/dc_production_normal.tok b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/DC/dc_production_normal.tok new file mode 100644 index 0000000000000000000000000000000000000000..201f613f2655319e6e85270f6d4d78c6b2bd5d92 GIT binary patch literal 979 zcmWlYZ)h839LImpwXt1w^sZ~SDzm**Taqlb&n0P^W{q6_)b3H1hNkV@i`rdsPm`P1 zyYB9iHXY*}E6f*)4wa2D@ee4t7m6=L9MU0(zNpN>I))QhhM=NgMK`Of^|8MAzW(s} zz&DxA90maN|3as3zN&Do;{bIZ0C--wx^m_gLX0ujb#0^#PBUTx;Y|S*p0X87|l39}QF~f93n>zlA|7k>afMRGS z{JYbmn?*&RGdt&sX2m!SpFj^{rR?Nb^58**)l!rgRYm_pQ&-^{kWxl-?NUXv>DWu~ z&rkK=Kxx=e3c5@CqfbGCyaIndQK$LZo6?a`zuO;)Mxx+fhC2^7^$90l=L}_*x;C|{ zT9Lj8-^MXOIJBFOVG(hkb4uG0{^U*BYaL-v+a4)`V8`+ z^;kF@{(?&%NV>T^En3tG0ZZU%Ju%pyW{I+znpV}wN;$gBTkGg~o|Jwz`Qv8f)-$vHDkd6%OzQzwkuD8%mkIHv8U%4w- zY3XCcT1aL?Q}m;r(H!_L7Xw6tpa+iLOL@y9-e)1`>OTgEp6%*{SqPpD5ThQMP5e^V z++R!Hb4}gbW>O3@9F@W`X>jn~4Z#@X70aQs_iOeK!rZUBK71h79BW?us*S$oPfd(? zZ+K(xp}qM0Ha|4odO_TnspzM?MrF3(%L<=DJ+@$1@^9EcFW*Hs(f4Q-f_IR=Eq7XR z91yY4^N=d(E9BS^STamu;#@ocl?$Qj7|g#Zk*z}~@whfii9Oi?KDiIc7|9ZPM-Cx5 z3<;_Fo#?m_NJk^EFAITDJijhlg6CM4I~!lC*qTvtC2?lWw8UtYT0lTwG+nL?=7t0a3LNxo4mQrqS_`n(H)#@5;}zexCG%cJ`; z?~ckN>BBfLCzo-FQKx7c1}*M%9>!L!J#)FsTi4$I_;XJhbiqliqAAFIi8gT~4C6$x zrM5?Y=1PZ~?^QnHdT;R)3!Ac36Bgr{T2HFylB_xfyl2c>24Cv-;*2~swD-QH9An#0 F{twR)MX~?@ literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/DERBY/derby_production_normal.tok b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/DERBY/derby_production_normal.tok new file mode 100644 index 0000000000000000000000000000000000000000..8acebbb5420a86a0c277bb9a2c3f0085e628d3ff GIT binary patch literal 6059 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 JrT3<%{}1VGsE7an literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/lc2_production_normal.tok b/zefie_wtvp_minisrv/ServiceDeps/premade_tellyscripts/LC2/lc2_production_normal.tok new file mode 100644 index 0000000000000000000000000000000000000000..c4df8494fcbbf9d57eff8f1a861741bf537d7dbd GIT binary patch literal 6084 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 D|5c>0 literal 0 HcmV?d00001 diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js similarity index 88% rename from zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh rename to zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js index 89b09d45..89438f2a 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js.meh +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/noflash.js @@ -12,11 +12,12 @@ if (wtvsec_login) { headers = `200 OK Connection: Keep-Alive +minisrv-use-carriage-return: false wtv-initial-key: ` + wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + ` Content-Type: text/tellyscript wtv-service: reset ` + getServiceString('wtv-head-waiter') + ` -` + getServiceString('wtv-star') + ` +` + getServiceString('wtv-star', { "no_star_word": true }) + ` ` + getServiceString('wtv-flashrom') + ` wtv-boot-url: wtv-head-waiter:/login? wtv-visit: wtv-head-waiter:/login? @@ -24,22 +25,16 @@ wtv-client-time-zone: GMT -0000 wtv-client-time-dst-rule: GMT wtv-client-date: `+ strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + ` GMT`; - var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead"; - //var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/LC2/LC2_OISP_5555732_56k.tok"; + var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_boot_uncompressed.tok"; if (file_path) { request_is_async = true; fs.readFile(file_path, null, function (err, file_read_data) { if (err) { - headers=`500 Some error occurred...` } sendToClient(socket, headers, file_read_data); }); - - - - } } else { console.log(" * Something bad happened (we don't know the client ssid???)"); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js index 80cb0b13..4d3be5f2 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js @@ -1,6 +1,5 @@ var gourl = "wtv-head-waiter:/login?"; if (request_headers.query.relogin) gourl += "relogin=true"; -var send_initial_key = true; if (socket.ssid) { if (ssid_sessions[socket.ssid].data_store) { @@ -46,7 +45,7 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { var send_tellyscripts = (minisrv_config.services[service_name].send_tellyscripts && !request_headers.query.relogin); var wtv_script_id = parseInt(ssid_sessions[socket.ssid].get("wtv-script-id")); var bootrom = ssid_sessions[socket.ssid].get("wtv-client-bootrom-version"); - if (request_headers.query.relogin && wtv_script_id != 0) send_tellyscript = false; + if (request_headers.query.relogin && wtv_script_id != 0) send_tellyscripts = false; if (send_tellyscripts) { if (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist) { var send_telly_to_ssid = (minisrv_config.services[service_name].send_tellyscript_ssid_whitelist.findIndex(element => element == socket.ssid) != -1) @@ -103,36 +102,43 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { // assume old classic in flash mode, override user setting and send tellyscript // because it is required to proceed in flash mode prereg_contype = "text/tellyscript"; - var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/bf0app/bf0app_production_braindead.tok"; - bf0app_update = true; + var file_path = __dirname + "/ServiceDeps/premade_tellyscripts/BF0APP/bf0app_boot_uncompressed.tok"; + var bf0app_update = true; + ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); } if (request_headers["wtv-ticket"]) { gourl = "wtv-head-waiter:/login-stage-two?relogin=true"; - send_initial_key = false; } headers = "200 OK\n" + if (bf0app_update) headers += "minisrv-use-carriage-return: false\n"; headers += "Connection: Keep-Alive\n"; - if (send_initial_key) headers += "wtv-initial-key: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + "\n"; + headers += "wtv-initial-key: " + ssid_sessions[socket.ssid].data_store.wtvsec_login.challenge_key.toString(CryptoJS.enc.Base64) + "\n"; headers += "Content-Type: " + prereg_contype + "\n"; headers += "wtv-service: reset\n"; - headers += getServiceString('wtv-1800') + "\n"; - headers += getServiceString('wtv-star') + "\n"; - if (!bf0app_update) headers += getServiceString('wtv-head-waiter') + "\n"; + if (!bf0app_update) headers += getServiceString('wtv-1800') + "\n"; + + if (bf0app_update) headers += getServiceString('wtv-head-waiter', { "flags": "0x00000001" }) + "\n"; + else headers += getServiceString('wtv-head-waiter') + "\n"; + + if (bf0app_update) headers += getServiceString('wtv-star', { "no_star_word": true }) + "\n"; + else headers += getServiceString('wtv-star') + "\n"; + headers += getServiceString('wtv-flashrom') + "\n"; - if (!bf0app_update) headers += "wtv-boot-url: wtv-1800:/preregister?relogin=true\n" + if (bf0app_update) headers += "wtv-boot-url: " + gourl + "\n"; + else headers += "wtv-boot-url: wtv-1800:/preregister?relogin=true\n"; + headers += "wtv-visit: " + gourl + "\n"; if (!bf0app_update) headers += "wtv-open-isp-disabled: false\n"; - if (!bf0app_update) headers += "wtv-visit: "+gourl+"\n"; - if (!bf0app_update) headers += "wtv-client-time-zone: GMT -0000\n"; - if (!bf0app_update) headers += "wtv-client-time-dst-rule: GMT\n" - if (!bf0app_update) headers += "wtv-client-date: " + strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + " GMT"; + headers += "wtv-client-time-zone: GMT -0000\n"; + headers += "wtv-client-time-dst-rule: GMT\n" + headers += "wtv-client-date: " + strftime("%a, %d %b %Y %H:%M:%S", new Date(new Date().toUTCString())) + " GMT"; if (file_path) { request_is_async = true; fs.readFile(file_path, null, function (err, file_read_data) { if (err) { - var errmsg = doErrorCode(400); + var errmsg = doErrorPage(400); headers = errmsg[0]; file_read_data = errmsg[1] + "\n" + err.toString(); } @@ -140,7 +146,7 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { }); } } else { - var errpage = doErrorCode(400); + var errpage = doErrorPage(400); headers = errpage[0]; data = errpage[1]; } \ No newline at end of file diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js new file mode 100644 index 00000000..3afc0834 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/current-noflash.js @@ -0,0 +1,114 @@ +// this build can be local or on zefie's server +// to get the path from zefie's server, browse +// https://archive.midnightchannel.net/zefie/files/wtv-flashrom/content/artemis-webtv-000/ +// and put everything from 'content/' onwards, including the part000.rom filename +// example is below +var default_build_to_send = minisrv_config.services[service_name].bf0app_default_rom || "content/artemis-webtv-000/build7181/daily-nondebug/bf0app-part000.rom"; + +headers = "200 OK\n"; +var request_path = ""; +var bf0app_update = true; +if (request_headers.query.path) request_path = unescape(request_headers.query.path); +else request_path = default_build_to_send; +request_is_async = true; + +if (ssid_sessions[socket.ssid].get("wtv-client-rom-type") == "bf0app" && ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") == "105") { + // assume old classic in flash mode, override user setting and send tellyscript + // because it is required to proceed in flash mode + bf0app_update = true; + ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + headers += "minisrv-use-carriage-return: false\n"; +} + +function doLocalFlashROM(flashrom_file_path) { + // use local flashrom files; + try { + fs.readFile(flashrom_file_path, null, function (err, data) { + if (err) { + errpage = doErrorPage(400) + headers = errpage[0]; + data = err.toString(); + } + sendToClient(socket, headers, data); + }); + } catch (e) { + var errpage = doErrorPage(404, "The service could not find the requested ROM.") + headers = errpage[0]; + data = errpage[1]; + sendToClient(socket, headers, data); + } +} + +function calculatedPath(data, path, numparts = null) { + var data_128 = new Buffer.alloc(128); + data.copy(data_128, 0, 0, 128); + var flashrom_numparts = null; + var flashrom_message = new Buffer.from(data_128.toString('hex').substring(36 * 2, 68 * 2), 'hex').toString('ascii').replace(/[^0-9a-z\ \.\-]/gi, ""); + + if (numparts != null) flashrom_numparts = parseInt(numparts); + if (!flashrom_numparts) flashrom_numparts = flashrom_message.substring(flashrom_message.length - 4).replace(/\D/g, ''); + + var ind = new Array(); + ind[0] = (path.indexOf("part") + 4); + ind[1] = (path.indexOf(".", ind[0]) + 1); + var flashrom_part_num = path.substr(ind[0], (path.length - ind[1])); + var flashrom_lastpart = (flashrom_numparts == (parseInt(flashrom_part_num) + 1)) ? true : false; + var flashrom_rompath = 'wtv-flashrom:/get-by-path?path=' + path; + if (flashrom_lastpart) { + flashrom_next_rompath = "wtv-flashrom:/lc2-download-complete?"; + } else { + var flashrom_next_part_num = (parseInt(flashrom_part_num) + 1); + if (flashrom_next_part_num < 10) flashrom_next_part_num = "00" + flashrom_next_part_num; // 1s + else if (flashrom_next_part_num >= 10 && flashrom_next_part_num < 100) flashrom_next_part_num = "0" + flashrom_next_part_num; // 10s + var flashrom_next_rompath = flashrom_rompath.replace("part" + flashrom_part_num, "part" + flashrom_next_part_num) + "&numparts=" + parseInt(flashrom_numparts); + } + return flashrom_next_rompath; +} + +if ((/\.brom$/).test(request_path)) headers += "Content-Type: binary/x-wtv-bootrom"; // maybe? +else headers += "Content-Type: binary/x-wtv-flashblock"; + +var flashrom_file_path = null; +Object.keys(service_vaults).forEach(function (g) { + if (flashrom_file_path != null) return; + flashrom_file_path = service_vaults[g] + "/" + service_name + "/" + request_path; + if (!fs.existsSync(flashrom_file_path)) flashrom_file_path = null; +}); +if (minisrv_config.services[service_name].use_zefie_server && !flashrom_file_path) { + // get flashrom files from archive.midnightchannel.net + var options = { + host: "archive.midnightchannel.net", + path: "/zefie/files/wtv-flashrom/" + request_path, + timeout: 5000, + method: 'GET' + } + const req = https.request(options, function (res) { + var data_hex = ''; + res.setEncoding('hex'); + + res.on('data', d => { + data_hex += d; + }) + + res.on('end', function () { + if (!zquiet) console.log(` * Zefie's FlashROM Server HTTP Status: ${res.statusCode} ${res.statusMessage}`) + if (res.statusCode == 200) { + data = Buffer.from(data_hex, 'hex'); + } else if (res.statusCode == 404) { + var errpage = doErrorPage(404, "The service could not find the requested ROM on zefie's server.") + headers = errpage[0]; + data = errpage[1]; + } else { + var errpage = doErrorPage(400) + headers = errpage[0]; + data = errpage[1]; + } + headers += "\nwtv-visit: " + calculatedPath(data, request_path); + sendToClient(socket, headers, data); + }); + }); + req.end(); +} else { + doLocalFlashROM(flashrom_file_path); +} + diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js index 004221d5..00c88d30 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-by-path.js @@ -1,5 +1,7 @@ request_is_async = true; + +var bf0app_update = false; var request_path = unescape(request_headers.query.path); headers = "200 OK\n" @@ -22,11 +24,44 @@ function doLocalFlashROM(flashrom_file_path) { } } -var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); +if (ssid_sessions[socket.ssid].get("wtv-client-rom-type") == "bf0app" && ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") == "105") { + // assume old classic in flash mode, override user setting and send tellyscript + // because it is required to proceed in flash mode + bf0app_update = true; + ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + headers += "minisrv-use-carriage-return: false\n"; +} -if (request_headers.query.raw || romtype == "bf0app") { + +function calculatedPath(data, path, numparts = null) { + var data_128 = new Buffer.alloc(128); + data.copy(data_128, 0, 0, 128); + var flashrom_numparts = null; + var flashrom_message = new Buffer.from(data_128.toString('hex').substring(36 * 2, 68 * 2), 'hex').toString('ascii').replace(/[^0-9a-z\ \.\-]/gi, ""); + + if (numparts != null) flashrom_numparts = parseInt(numparts); + if (!flashrom_numparts) flashrom_numparts = flashrom_message.substring(flashrom_message.length - 4).replace(/\D/g, ''); + + var ind = new Array(); + ind[0] = (path.indexOf("part") + 4); + ind[1] = (path.indexOf(".", ind[0]) + 1); + var flashrom_part_num = path.substr(ind[0], (path.length - ind[1])); + var flashrom_lastpart = (flashrom_numparts == (parseInt(flashrom_part_num) + 1)) ? true : false; + var flashrom_rompath = 'wtv-flashrom:/get-by-path?path=' + path; + if (flashrom_lastpart) flashrom_next_rompath = null; + else { + var flashrom_next_part_num = (parseInt(flashrom_part_num) + 1); + if (flashrom_next_part_num < 10) flashrom_next_part_num = "00" + flashrom_next_part_num; // 1s + else if (flashrom_next_part_num >= 10 && flashrom_next_part_num < 100) flashrom_next_part_num = "0" + flashrom_next_part_num; // 10s + var flashrom_next_rompath = flashrom_rompath.replace("part" + flashrom_part_num, "part" + flashrom_next_part_num) + "&numparts=" + parseInt(flashrom_numparts); + } + return flashrom_next_rompath; +} + +if (request_headers.query.raw || bf0app_update) { if ((/\.brom$/).test(request_path)) headers += "Content-Type: binary/x-wtv-bootrom"; // maybe? else headers += "Content-Type: binary/x-wtv-flashblock"; + var flashrom_file_path = null; Object.keys(service_vaults).forEach(function (g) { if (flashrom_file_path != null) return; @@ -62,6 +97,11 @@ if (request_headers.query.raw || romtype == "bf0app") { headers = errpage[0]; data = errpage[1]; } + if (bf0app_update) { + var nextpath = calculatedPath(data, request_path, (request_headers.query.numparts || null)); + if (nextpath != null) headers += "\nwtv-visit: " + nextpath; + } + else headers += "\nwtv-connection-close: true"; sendToClient(socket, headers, data); }); }); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js index 63e2d198..2338c10f 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/get-lc2-page.js @@ -89,7 +89,8 @@ if (!request_headers.query.path) { } async function processLC2DownloadPage(path, flashrom_message, numparts = null) { - if (numparts != null) var flashrom_numparts = parseInt(numparts); + var flashrom_numparts = null; + if (numparts != null) flashrom_numparts = parseInt(numparts); if (!flashrom_numparts) flashrom_numparts = flashrom_message.substring(flashrom_message.length - 4).replace(/\D/g, ''); var ind = new Array(); ind[0] = (path.indexOf("part") + 4); diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js index 8ba45429..b22756f3 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/initiate-lc2-download.js @@ -1,9 +1,10 @@ if (request_headers.query.path) { var url = "wtv-flashrom:/get-lc2-page?path=" + request_headers.query.path; var romtype = ssid_sessions[socket.ssid].get("wtv-client-rom-type"); -if (romtype == "bf0app") { - url = "client:updateflash?ipaddr="+minisrv_config.services[service_name].host+"&port="+minisrv_config.services[service_name].port+"&path=" + request_headers.query.path; -} + if (romtype == "bf0app") { + url = "client:updateflash?ipaddr=" + minisrv_config.services[service_name].host + "&port=" + minisrv_config.services[service_name].port + "&path=" + escape(url.replace("get-lc2-page", "get-by-path")); + if (request_headers.query.numparts) url += escape("&numparts=" + request_headers.query.numparts); + } headers = "300 OK\n"; headers += "wtv-visit: " + url + "\n"; headers += "Location: " + url + "\n"; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js new file mode 100644 index 00000000..3afc0834 --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-flashrom/noflash.js @@ -0,0 +1,114 @@ +// this build can be local or on zefie's server +// to get the path from zefie's server, browse +// https://archive.midnightchannel.net/zefie/files/wtv-flashrom/content/artemis-webtv-000/ +// and put everything from 'content/' onwards, including the part000.rom filename +// example is below +var default_build_to_send = minisrv_config.services[service_name].bf0app_default_rom || "content/artemis-webtv-000/build7181/daily-nondebug/bf0app-part000.rom"; + +headers = "200 OK\n"; +var request_path = ""; +var bf0app_update = true; +if (request_headers.query.path) request_path = unescape(request_headers.query.path); +else request_path = default_build_to_send; +request_is_async = true; + +if (ssid_sessions[socket.ssid].get("wtv-client-rom-type") == "bf0app" && ssid_sessions[socket.ssid].get("wtv-client-bootrom-version") == "105") { + // assume old classic in flash mode, override user setting and send tellyscript + // because it is required to proceed in flash mode + bf0app_update = true; + ssid_sessions[socket.ssid].set("bf0app_update", bf0app_update); + headers += "minisrv-use-carriage-return: false\n"; +} + +function doLocalFlashROM(flashrom_file_path) { + // use local flashrom files; + try { + fs.readFile(flashrom_file_path, null, function (err, data) { + if (err) { + errpage = doErrorPage(400) + headers = errpage[0]; + data = err.toString(); + } + sendToClient(socket, headers, data); + }); + } catch (e) { + var errpage = doErrorPage(404, "The service could not find the requested ROM.") + headers = errpage[0]; + data = errpage[1]; + sendToClient(socket, headers, data); + } +} + +function calculatedPath(data, path, numparts = null) { + var data_128 = new Buffer.alloc(128); + data.copy(data_128, 0, 0, 128); + var flashrom_numparts = null; + var flashrom_message = new Buffer.from(data_128.toString('hex').substring(36 * 2, 68 * 2), 'hex').toString('ascii').replace(/[^0-9a-z\ \.\-]/gi, ""); + + if (numparts != null) flashrom_numparts = parseInt(numparts); + if (!flashrom_numparts) flashrom_numparts = flashrom_message.substring(flashrom_message.length - 4).replace(/\D/g, ''); + + var ind = new Array(); + ind[0] = (path.indexOf("part") + 4); + ind[1] = (path.indexOf(".", ind[0]) + 1); + var flashrom_part_num = path.substr(ind[0], (path.length - ind[1])); + var flashrom_lastpart = (flashrom_numparts == (parseInt(flashrom_part_num) + 1)) ? true : false; + var flashrom_rompath = 'wtv-flashrom:/get-by-path?path=' + path; + if (flashrom_lastpart) { + flashrom_next_rompath = "wtv-flashrom:/lc2-download-complete?"; + } else { + var flashrom_next_part_num = (parseInt(flashrom_part_num) + 1); + if (flashrom_next_part_num < 10) flashrom_next_part_num = "00" + flashrom_next_part_num; // 1s + else if (flashrom_next_part_num >= 10 && flashrom_next_part_num < 100) flashrom_next_part_num = "0" + flashrom_next_part_num; // 10s + var flashrom_next_rompath = flashrom_rompath.replace("part" + flashrom_part_num, "part" + flashrom_next_part_num) + "&numparts=" + parseInt(flashrom_numparts); + } + return flashrom_next_rompath; +} + +if ((/\.brom$/).test(request_path)) headers += "Content-Type: binary/x-wtv-bootrom"; // maybe? +else headers += "Content-Type: binary/x-wtv-flashblock"; + +var flashrom_file_path = null; +Object.keys(service_vaults).forEach(function (g) { + if (flashrom_file_path != null) return; + flashrom_file_path = service_vaults[g] + "/" + service_name + "/" + request_path; + if (!fs.existsSync(flashrom_file_path)) flashrom_file_path = null; +}); +if (minisrv_config.services[service_name].use_zefie_server && !flashrom_file_path) { + // get flashrom files from archive.midnightchannel.net + var options = { + host: "archive.midnightchannel.net", + path: "/zefie/files/wtv-flashrom/" + request_path, + timeout: 5000, + method: 'GET' + } + const req = https.request(options, function (res) { + var data_hex = ''; + res.setEncoding('hex'); + + res.on('data', d => { + data_hex += d; + }) + + res.on('end', function () { + if (!zquiet) console.log(` * Zefie's FlashROM Server HTTP Status: ${res.statusCode} ${res.statusMessage}`) + if (res.statusCode == 200) { + data = Buffer.from(data_hex, 'hex'); + } else if (res.statusCode == 404) { + var errpage = doErrorPage(404, "The service could not find the requested ROM on zefie's server.") + headers = errpage[0]; + data = errpage[1]; + } else { + var errpage = doErrorPage(400) + headers = errpage[0]; + data = errpage[1]; + } + headers += "\nwtv-visit: " + calculatedPath(data, request_path); + sendToClient(socket, headers, data); + }); + }); + req.end(); +} else { + doLocalFlashROM(flashrom_file_path); +} + diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index e3691b90..4761b422 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -31,19 +31,19 @@ if (!String.prototype.reverse) { } } -function getServiceString(service) { +function getServiceString(service, overrides = null) { // used externally by service scripts if (service === "all") { var out = ""; Object.keys(minisrv_config.services).forEach(function (k) { - out += minisrv_config.services[k].toString() + "\n"; + out += minisrv_config.services[k].toString(overrides) + "\n"; }); return out; } else { if (!minisrv_config.services[service]) { throw ("SERVICE ERROR: Attempted to provision unconfigured service: " + service) } else { - return minisrv_config.services[service].toString(); + return minisrv_config.services[service].toString(overrides); } } } @@ -469,9 +469,9 @@ async function sendToClient(socket, headers_obj, data) { // calculate content length if (typeof data.length !== 'undefined') { - headers_obj["Content-Length"] = data.length; + headers_obj["Content-length"] = data.length; } else if (typeof data.byteLength !== 'undefined') { - headers_obj["Content-Length"] = data.byteLength; + headers_obj["Content-length"] = data.byteLength; } if (ssid_sessions[socket.ssid]) { @@ -486,17 +486,23 @@ async function sendToClient(socket, headers_obj, data) { } } + var end_of_line = "\n"; + if (!headers_obj['minisrv-use-carriage-return'] || headers_obj['minisrv-use-carriage-return'] != "false") end_of_line = "\r\n"; + if (headers_obj['minisrv-use-carriage-return']) delete headers_obj['minisrv-use-carriage-return']; + + if (end_of_line == "\n" && zdebug) console.log(" * Script requested to send headers without carriage return (bf0app hack)"); + // header object to string if (zshowheaders) console.log(" * Outgoing headers on socket ID", socket.id, (await filterSSID(headers_obj))); Object.keys(headers_obj).forEach(function (k) { if (k == "http_response") { - headers += headers_obj[k] + "\r\n"; + headers += headers_obj[k] + end_of_line; } else { if (k.indexOf('_') >= 0) { var j = k.split('_')[0]; - headers += j + ": " + headers_obj[k] + "\r\n"; + headers += j + ": " + headers_obj[k] + end_of_line; } else { - headers += k + ": " + headers_obj[k] + "\r\n"; + headers += k + ": " + headers_obj[k] + end_of_line; } } }); @@ -505,17 +511,17 @@ async function sendToClient(socket, headers_obj, data) { // send to client var toClient = null; if (typeof data == 'string') { - toClient = headers + "\r\n" + data; + toClient = headers + end_of_line + data; socket.write(toClient); } else if (typeof data == 'object') { if (zquiet) var verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; if (socket_sessions[socket.id].secure_headers == true) { // encrypt headers if (zquiet)verbosity_mod += " with encrypted headers"; - var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + "\r\n"); + var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + end_of_line); socket.write(new Uint8Array(concatArrayBuffer(enc_headers, data))); } else { - socket.write(new Uint8Array(concatArrayBuffer(Buffer.from(headers + "\r\n"), data))); + socket.write(new Uint8Array(concatArrayBuffer(Buffer.from(headers + end_of_line), data))); } if (zquiet) console.log(" * Sent" + verbosity_mod + " " + headers_obj.http_response + " to client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-Length'], "bytes)"); } @@ -1217,15 +1223,26 @@ Object.keys(minisrv_config.services).forEach(function (k) { if (minisrv_config.services[k].port && !minisrv_config.services[k].nobind) { ports.push(minisrv_config.services[k].port); } - - minisrv_config.services[k].toString = function () { - var outstr = "wtv-service: name=" + this.name + " host=" + this.host + " port=" + this.port; - if (this.flags) outstr += " flags=" + this.flags; - if (this.connections) outstr += " connections=" + this.connections; + // minisrv_config service toString + minisrv_config.services[k].toString = function (overrides) { + var self = this; + if (overrides != null) { + if (typeof (overrides) == 'object') { + Object.keys(overrides).forEach(function (k) { + self[k] = overrides[k]; + }); + } + } + if ((k == "wtv-star" && self.no_star_word != true) || k != "wtv-star") { + var outstr = "wtv-service: name=" + self.name + " host=" + self.host + " port=" + self.port; + if (self.flags) outstr += " flags=" + self.flags; + if (self.connections) outstr += " connections=" + self.connections; + } if (k == "wtv-star") { - outstr += "\nwtv-service: name=wtv-* host=" + this.host + " port=" + this.port; - if (this.flags) outstr += " flags=" + this.flags; - if (this.connections) outstr += " connections=" + this.connections; + outstr += "\nwtv-service: name=wtv-* host=" + self.host + " port=" + self.port; + if (self.flags) outstr += " flags=" + self.flags; + if (self.connections) outstr += " connections=" + self.connections; + if (self['no_star_word']) delete self['no_star_word']; } return outstr; } diff --git a/zefie_wtvp_minisrv/config.json b/zefie_wtvp_minisrv/config.json index 4c69fe7a..1fb88b65 100644 --- a/zefie_wtvp_minisrv/config.json +++ b/zefie_wtvp_minisrv/config.json @@ -47,7 +47,8 @@ "wtv-flashrom": { "port": 1618, "flags": "0x00000040", - "use_zefie_server": true + "use_zefie_server": true, + "bf0app_default_rom": "content/artemis-webtv-000/build7181/daily-nondebug/bf0app-part000.rom" }, "wtv-music": { "port": 1656, @@ -68,7 +69,8 @@ "use_external_proxy": false, "external_proxy_is_socks": false, "external_proxy_host": "127.0.0.1", - "external_proxy_port": 1080 + "external_proxy_port": 1080, + "flags": "0x00000001" }, "https": { "port": 1650, @@ -76,7 +78,8 @@ "use_external_proxy": false, "external_proxy_is_socks": false, "external_proxy_host": "127.0.0.1", - "external_proxy_port": 1080 + "external_proxy_port": 1080, + "flags": "0x00000001" } } } diff --git a/zefie_wtvp_minisrv/package.json b/zefie_wtvp_minisrv/package.json index 2feae443..7ee6b090 100644 --- a/zefie_wtvp_minisrv/package.json +++ b/zefie_wtvp_minisrv/package.json @@ -1,6 +1,6 @@ { "name": "zefie_wtvp_minisrv", - "version": "0.9.8", + "version": "0.9.9", "description": "WebTV Service (WTVP) Emulation Server", "main": "app.js", "homepage": "https://github.com/zefie/zefie_wtvp_minisrv", diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index b40cd310..6b73bcde 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -32,12 +32,17 @@ + + + + Code + Code @@ -47,6 +52,7 @@ +