]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/server.go
Simplify Dockerfile
[rbdr/mobius] / hotline / server.go
index 33888e08f745a92d1f41802603ba2aadb619c3ce..76cc248ba57088ebf950a449c4af9551d49361d2 100644 (file)
@@ -693,6 +693,8 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
 
        switch fileTransfer.Type {
        case FileDownload:
+               s.Stats.DownloadCounter += 1
+
                fullFilePath, err := readPath(s.Config.FileRoot, fileTransfer.FilePath, fileTransfer.FileName)
                if err != nil {
                        return err
@@ -744,6 +746,8 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
                        }
                }
        case FileUpload:
+               s.Stats.UploadCounter += 1
+
                destinationFile := s.Config.FileRoot + ReadFilePath(fileTransfer.FilePath) + "/" + string(fileTransfer.FileName)
 
                var file *os.File
@@ -829,6 +833,8 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
 
                i := 0
                err = filepath.Walk(fullFilePath+"/", func(path string, info os.FileInfo, err error) error {
+                       s.Stats.DownloadCounter += 1
+
                        if err != nil {
                                return err
                        }
@@ -978,15 +984,26 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
                }
 
                fileSize := make([]byte, 4)
-               readBuffer := make([]byte, 1024)
 
                for i := 0; i < fileTransfer.ItemCount(); i++ {
-                       // TODO: fix potential short read with io.ReadFull
-                       _, err := conn.Read(readBuffer)
-                       if err != nil {
+                       s.Stats.UploadCounter += 1
+
+                       var fu folderUpload
+                       if _, err := io.ReadFull(conn, fu.DataSize[:]); err != nil {
+                               return err
+                       }
+
+                       if _, err := io.ReadFull(conn, fu.IsFolder[:]); err != nil {
+                               return err
+                       }
+                       if _, err := io.ReadFull(conn, fu.PathItemCount[:]); err != nil {
+                               return err
+                       }
+                       fu.FileNamePath = make([]byte, binary.BigEndian.Uint16(fu.DataSize[:])-4)
+
+                       if _, err := io.ReadFull(conn, fu.FileNamePath); err != nil {
                                return err
                        }
-                       fu := readFolderUpload(readBuffer)
 
                        s.Logger.Infow(
                                "Folder upload continued",
@@ -1028,8 +1045,6 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
                                        nextAction = dlFldrActionResumeFile
                                }
 
-                               fmt.Printf("Next Action: %v\n", nextAction)
-
                                if _, err := conn.Write([]byte{0, uint8(nextAction)}); err != nil {
                                        return err
                                }
@@ -1073,7 +1088,7 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error {
                                        }
 
                                case dlFldrActionSendFile:
-                                       if _, err := conn.Read(fileSize); err != nil {
+                                       if _, err := io.ReadFull(conn, fileSize); err != nil {
                                                return err
                                        }