feat(zmodem): Allow file uploads/downloads

Using zmodem (rz and sz commands from lrzsz) you can now send and receive
files.
This commit is contained in:
Søren L. Hansen 2022-03-29 13:59:22 -07:00
parent 163fd0537c
commit 782991c356
12 changed files with 663 additions and 21 deletions

View file

@ -176,7 +176,13 @@ func (wt *WebTTY) handleMasterReadEvent(data []byte) error {
return nil
}
_, err := wt.slave.Write(data[1:])
var decodedBuffer = make([]byte, len(data))
n, err := base64.StdEncoding.Decode(decodedBuffer, data[1:])
if err != nil {
return errors.Wrapf(err, "failed to write received data to slave")
}
_, err = wt.slave.Write(decodedBuffer[:n])
if err != nil {
return errors.Wrapf(err, "failed to write received data to slave")
}

View file

@ -98,8 +98,8 @@ func TestWriteFromFrontend(t *testing.T) {
checkNextMsgType(t, mMaster.gottyToMasterReader, SetWindowTitle)
checkNextMsgType(t, mMaster.gottyToMasterReader, SetBufferSize)
// simulate input from frontend...
message := []byte("1hello\n") // line buffered canonical mode
// simulate input from frontend... ("hello" in base64)
message := []byte("1aGVsbG8=\n") // line buffered canonical mode
mMaster.masterToGottyWriter.Write(message)
// ...and make sure it makes it through to the slave intact
@ -108,7 +108,7 @@ func TestWriteFromFrontend(t *testing.T) {
if err != nil {
t.Fatalf("Unexpected error from Write(): %s", err)
}
if !bytes.Equal(readBuf[:n], message[1:]) {
if !bytes.Equal(readBuf[:n], []byte("hello")) {
t.Fatalf("Unexpected message received: `%s`", readBuf[:n])
}
}