From 85005eee1bd8c9f4f0a0cc2729cab01b4f1df4b1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 10 Aug 2023 11:10:55 +0530 Subject: [PATCH] receive kitten: Send signature in 4KB blocks --- kittens/transfer/receive.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/kittens/transfer/receive.go b/kittens/transfer/receive.go index a4b387c21..46ec162a8 100644 --- a/kittens/transfer/receive.go +++ b/kittens/transfer/receive.go @@ -360,18 +360,27 @@ type sigwriter struct { file_id, prefix, suffix string q func(string) loop.IdType amt int64 + b bytes.Buffer } func (self *sigwriter) Write(b []byte) (int, error) { + self.b.Write(b) + if self.b.Len() > 4000 { + self.flush() + } + return len(b), nil +} + +func (self *sigwriter) flush() { frame := len(self.prefix) + len(self.suffix) - split_for_transfer(b, self.file_id, false, func(ftc *FileTransmissionCommand) { + split_for_transfer(self.b.Bytes(), self.file_id, false, func(ftc *FileTransmissionCommand) { self.q(self.prefix) data := ftc.Serialize(false) self.q(data) self.wid = self.q(self.suffix) self.amt += int64(frame + len(data)) }) - return len(b), nil + self.b.Reset() } var files_done error = errors.New("files done") @@ -422,6 +431,7 @@ func (self *manager) request_files() transmit_iterator { return 0, err } } + output.flush() f.sent_bytes += output.amt last_write_id = self.send(FileTransmissionCommand{Action: Action_end_data, File_id: f.file_id}, queue_write) }