X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/b196a50a44a5c72fc43df39fce4407d05ec8863b..5d7865ce3db756ab378728e478cb846d302a7c17:/hotline/server.go diff --git a/hotline/server.go b/hotline/server.go index 33888e0..76cc248 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -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 }