diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js index 43f3e7d6..56180d57 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-1800/preregister.js @@ -117,14 +117,15 @@ if (ssid_sessions[socket.ssid].data_store.wtvsec_login) { if (request_headers.query.reconnect) gourl = null; - if (!file_path != null && !minisrv_config.config.debug_flags.quiet) console.log(" * Sending TellyScript", file_path, "on socket", socket.id); - if (request_headers.query.guest_login) { send_tellyscript = false; if (gourl != null) gourl += "&guest_login=true" if (request_headers.query.skip_splash) gourl += "&skip_splash=true"; } + if (!file_path != null && send_tellyscript && !minisrv_config.config.debug_flags.quiet) console.log(" * Sending TellyScript", file_path, "on socket", socket.id); + + headers = "200 OK\n" if (bf0app_update) headers += "minisrv-use-carriage-return: false\n"; headers += "Connection: Keep-Alive\n"; diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/modem_firmware.dat.gz b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/kflex/modem_firmware.dat.gz similarity index 99% rename from zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/modem_firmware.dat.gz rename to zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/kflex/modem_firmware.dat.gz index cda77497..8d709962 100644 Binary files a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/modem_firmware.dat.gz and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/kflex/modem_firmware.dat.gz differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/v90/modem_firmware.dat.gz b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/v90/modem_firmware.dat.gz new file mode 100644 index 00000000..f1df9b19 Binary files /dev/null and b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/Modem_Firmware/Locale/en-US/v90/modem_firmware.dat.gz differ diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmware.json b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmware.json index 25de241e..93aebcff 100644 --- a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmware.json +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmware.json @@ -7,9 +7,10 @@ "service_owned": true, "files": [ { - "file": "file://Disk/Browser/Modem_Firmware/Locale/en-US/modem_firmware.dat.gz" + "file": "file://Disk/Browser/Modem_Firmware/Locale/en-US/modem_firmware.dat.gz", + "location": "content/Modem_Firmware/Locale/en-US/v90/modem_firmware.dat.gz" }, - { + { "file": "file://Disk/Browser/Modem_Firmware/Locale/ja-JP/modem_firmware.dat.gz" } ] diff --git a/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmwareOld.json b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmwareOld.json new file mode 100644 index 00000000..ff770dfd --- /dev/null +++ b/zefie_wtvp_minisrv/ServiceVault/wtv-disk/content/diskmaps/ModemFirmwareOld.json @@ -0,0 +1,18 @@ +{ + "ModemFirmware": { + "base": "file://Disk/Browser/Modem_Firmware/", + "location": "content/Modem_Firmware/", + "execute": "client:ModemReload", + "execute_when": "atEnd", + "service_owned": true, + "files": [ + { + "file": "file://Disk/Browser/Modem_Firmware/Locale/en-US/modem_firmware.dat.gz", + "location": "content/Modem_Firmware/Locale/en-US/kflex/modem_firmware.dat.gz" + }, + { + "file": "file://Disk/Browser/Modem_Firmware/Locale/ja-JP/modem_firmware.dat.gz" + } + ] + } +} \ No newline at end of file diff --git a/zefie_wtvp_minisrv/app.js b/zefie_wtvp_minisrv/app.js index 6046689c..c7810f1b 100644 --- a/zefie_wtvp_minisrv/app.js +++ b/zefie_wtvp_minisrv/app.js @@ -721,21 +721,58 @@ async function sendToClient(socket, headers_obj, data) { var toClient = null; if (typeof data == 'string') { toClient = headers + end_of_line + data; - socket.write(Buffer.from(toClient)); + sendToSocket(socket, Buffer.from(toClient)); } else if (typeof data == 'object') { if (minisrv_config.config.debug_flags.quiet) var verbosity_mod = (headers_obj["wtv-encrypted"] == 'true') ? " encrypted response" : ""; if (socket_sessions[socket.id].secure_headers == true) { // encrypt headers if (minisrv_config.config.debug_flags.quiet) verbosity_mod += " with encrypted headers"; var enc_headers = socket_sessions[socket.id].wtvsec.Encrypt(1, headers + end_of_line); - socket.write(new Buffer.from(concatArrayBuffer(enc_headers, data))); + sendToSocket(socket, new Buffer.from(concatArrayBuffer(enc_headers, data))); } else { - socket.write(new Buffer.from(concatArrayBuffer(Buffer.from(headers + end_of_line), data))); + sendToSocket(socket, new Buffer.from(concatArrayBuffer(Buffer.from(headers + end_of_line), data))); } if (minisrv_config.config.debug_flags.quiet) console.log(" * Sent" + verbosity_mod + " " + headers_obj.http_response + " to client (Content-Type:", headers_obj['Content-Type'], "~", headers_obj['Content-length'], "bytes)"); } } +async function sendToSocket(socket, data) { + // buffer size = lesser of minisrv_config.config.chunk_size or size remaining + var chunk_size = 16384; + var can_write = true; + var expected_data_out = 0; + while ((socket.bytesWritten == 0 || socket.bytesWritten != expected_data_out) && can_write) { + if (expected_data_out === 0) expected_data_out = data.byteLength + (socket_sessions[socket.id].socket_total_written || 0); + if (socket.bytesWritten == expected_data_out) break; + + var data_left = (expected_data_out - socket.bytesWritten); + var buffer_size = (data_left >= chunk_size) ? chunk_size : data_left; + var offset = (data.byteLength - data_left); + var chunk = new Buffer.alloc(buffer_size); + data.copy(chunk, 0, offset, (offset + buffer_size)); + can_write = socket.write(chunk); + if (!can_write) { + socket.once('drain', function () { + sendToSocket(socket, data); + }); + break; + } + } + if (socket.bytesWritten == expected_data_out) { + socket_sessions[socket.id].socket_total_written = socket.bytesWritten; + if (socket_sessions[socket.id].expecting_post_data) delete socket_sessions[socket.id].expecting_post_data; + if (socket_sessions[socket.id].header_buffer) delete socket_sessions[socket.id].header_buffer; + if (socket_sessions[socket.id].secure_buffer) delete socket_sessions[socket.id].secure_buffer; + if (socket_sessions[socket.id].buffer) delete socket_sessions[socket.id].buffer; + if (socket_sessions[socket.id].headers) delete socket_sessions[socket.id].headers; + if (socket_sessions[socket.id].post_data) delete socket_sessions[socket.id].post_data; + if (socket_sessions[socket.id].post_data_length) delete socket_sessions[socket.id].post_data_length; + if (socket_sessions[socket.id].post_data_percents_shown) delete socket_sessions[socket.id].post_data_percents_shown; + socket.setTimeout(minisrv_config.config.socket_timeout * 1000); + if (socket_sessions[socket.id].close_me) socket.end(); + if (socket_sessions[socket.id].destroy_me) socket.destroy(); + } +} function concatArrayBuffer(buffer1, buffer2) { var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength); diff --git a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj index 1810a2a6..6d59b961 100644 --- a/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj +++ b/zefie_wtvp_minisrv/zefie_wtvp_minisrv.njsproj @@ -52,6 +52,7 @@ Code + Code