It seems like a relatively common problem that the terminating OO from sz gets lost or misparsed or something. See all these issues:
sorenisanerd/gotty#46
tsl0922/ttyd#239
tsl0922/ttyd#279
Eugeny/tabby#6259
cferdinandi/tabby#132
Eugeny/tabby#5196
trzsz/tabby-trzsz#2
Eugeny/tabby#5132
This lets me call .allow_missing_OO(true) on the session object which SEEMS to make the problem go away:
diff --git a/src/zsession.js b/src/zsession.js
index 5f0b8f9..cafe57f 100644
--- a/src/zsession.js
+++ b/src/zsession.js
@@ -193,6 +193,10 @@ Zmodem.Session = class ZmodemSession extends _Eventer {
//console.warn("Invalid first Zmodem header", hdr);
}
+ allow_missing_OO(flag) {
+ this._allow_missing_OO = !!flag;
+ }
+
/**
* Sets the sender function that a Session object will use.
*
@@ -549,7 +553,7 @@ Zmodem.Session.Receive = class ZmodemReceiveSession extends Zmodem.Session {
if (this._input_buffer.length < 2) return;
//if it’s OO, then set this._bytes_after_OO
- if (Zmodem.ZMLIB.find_subarray(this._input_buffer, OVER_AND_OUT) === 0) {
+ if (this._allow_missing_OO || Zmodem.ZMLIB.find_subarray(this._input_buffer, OVER_AND_OUT) === 0) {
//This doubles as an indication that the session has ended.
//We need to set this right away so that handlers like
...but I can't reliably trigger the problem, so my confidence in this approach is not great.
Do you have thoughts on how to address this? The spec suggests that if the OO does not arrive, you should just move on with your life after a brief timeout, so maybe we just need to implement that timeout? Just getting stuck in this state doesn't benefit anyone.
It seems like a relatively common problem that the terminating
OOfromszgets lost or misparsed or something. See all these issues:sorenisanerd/gotty#46
tsl0922/ttyd#239
tsl0922/ttyd#279
Eugeny/tabby#6259
cferdinandi/tabby#132
Eugeny/tabby#5196
trzsz/tabby-trzsz#2
Eugeny/tabby#5132
This lets me call
.allow_missing_OO(true)on the session object which SEEMS to make the problem go away:...but I can't reliably trigger the problem, so my confidence in this approach is not great.
Do you have thoughts on how to address this? The spec suggests that if the
OOdoes not arrive, you should just move on with your life after a brief timeout, so maybe we just need to implement that timeout? Just getting stuck in this state doesn't benefit anyone.