aboutsummaryrefslogtreecommitdiff
path: root/hotline/transfer.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-23 14:24:50 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2022-06-23 14:24:50 -0700
commitdf1ade5433b027f9cb905e584921692313e647f5 (patch)
tree74aa3a802c3c3457de888ee63b65aa898f0be91a /hotline/transfer.go
parentdb484a6c604d17a3df5c9ce10c12d56347e2fc40 (diff)
Implement GetClientInfoText with per-client file transfer info
Diffstat (limited to 'hotline/transfer.go')
-rw-r--r--hotline/transfer.go48
1 files changed, 3 insertions, 45 deletions
diff --git a/hotline/transfer.go b/hotline/transfer.go
index 9d2a97f..4c80581 100644
--- a/hotline/transfer.go
+++ b/hotline/transfer.go
@@ -1,7 +1,6 @@
package hotline
import (
- "bufio"
"bytes"
"encoding/binary"
"errors"
@@ -31,9 +30,7 @@ func (tf *transfer) Write(b []byte) (int, error) {
return len(b), nil
}
-const fileCopyBufSize = 4096
-
-func receiveFile(r io.Reader, targetFile, resForkFile, infoFork io.Writer) error {
+func receiveFile(r io.Reader, targetFile, resForkFile, infoFork, counterWriter io.Writer) error {
var ffo flattenedFileObject
if _, err := ffo.ReadFrom(r); err != nil {
return err
@@ -45,12 +42,7 @@ func receiveFile(r io.Reader, targetFile, resForkFile, infoFork io.Writer) error
return err
}
- // read and write the data fork
- bw := bufio.NewWriterSize(targetFile, fileCopyBufSize)
- if _, err = io.CopyN(bw, r, ffo.dataSize()); err != nil {
- return err
- }
- if err := bw.Flush(); err != nil {
+ if _, err = io.Copy(targetFile, io.TeeReader(r, counterWriter)); err != nil {
return err
}
@@ -59,47 +51,13 @@ func receiveFile(r io.Reader, targetFile, resForkFile, infoFork io.Writer) error
return err
}
- bw = bufio.NewWriterSize(resForkFile, fileCopyBufSize)
- _, err = io.CopyN(resForkFile, r, ffo.rsrcSize())
- if err != nil {
- return err
- }
- if err := bw.Flush(); err != nil {
+ if _, err = io.Copy(resForkFile, io.TeeReader(r, counterWriter)); err != nil {
return err
}
}
return nil
}
-func sendFile(w io.Writer, r io.Reader, offset int) (err error) {
- br := bufio.NewReader(r)
- if _, err := br.Discard(offset); err != nil {
- return err
- }
-
- rSendBuffer := make([]byte, 1024)
- for {
- var bytesRead int
-
- if bytesRead, err = br.Read(rSendBuffer); err == io.EOF {
- if _, err := w.Write(rSendBuffer[:bytesRead]); err != nil {
- return err
- }
- return nil
- }
- if err != nil {
- return err
- }
- // totalSent += int64(bytesRead)
-
- // fileTransfer.BytesSent += bytesRead
-
- if _, err := w.Write(rSendBuffer[:bytesRead]); err != nil {
- return err
- }
- }
-}
-
func (s *Server) bannerDownload(w io.Writer) error {
bannerBytes, err := os.ReadFile(filepath.Join(s.ConfigDir, s.Config.BannerFile))
if err != nil {