X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/dcd23d5355badf66c34ffd63d3c44734e87ebf17..HEAD:/hotline/file_transfer.go?ds=sidebyside diff --git a/hotline/file_transfer.go b/hotline/file_transfer.go index 12725db..4e71bd6 100644 --- a/hotline/file_transfer.go +++ b/hotline/file_transfer.go @@ -316,22 +316,24 @@ func UploadHandler(rwc io.ReadWriter, fullPath string, fileTransfer *FileTransfe // handler should have returned an error to the client indicating there was an existing file present. _, err := os.Stat(fullPath) if err == nil { - return fmt.Errorf("existing file found: %s", fullPath) + // return fmt.Errorf("existing file found: %s", fullPath) } - if errors.Is(err, fs.ErrNotExist) { + // if errors.Is(err, fs.ErrNotExist) { // If not found, open or create a new .incomplete file file, err = os.OpenFile(fullPath+IncompleteFileSuffix, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644) if err != nil { return err } - } + // } + + defer file.Close() f, err := NewFileWrapper(fileStore, fullPath, 0) if err != nil { return err } - rLogger.Info("File upload started", "dstFile", fullPath) + rLogger.Debug("File upload started", "dstFile", fullPath) rForkWriter := io.Discard iForkWriter := io.Discard @@ -348,15 +350,11 @@ func UploadHandler(rwc io.ReadWriter, fullPath string, fileTransfer *FileTransfe } if err := receiveFile(rwc, file, rForkWriter, iForkWriter, fileTransfer.bytesSentCounter); err != nil { - rLogger.Error(err.Error()) - } - - if err := file.Close(); err != nil { - return err + return fmt.Errorf("receive file: %v", err) } if err := fileStore.Rename(fullPath+".incomplete", fullPath); err != nil { - return err + return fmt.Errorf("rename incomplete file: %v", err) } rLogger.Info("File upload complete", "dstFile", fullPath) @@ -368,26 +366,26 @@ func DownloadFolderHandler(rwc io.ReadWriter, fullPath string, fileTransfer *Fil // Folder Download flow: // 1. Get filePath from the transfer // 2. Iterate over files - // 3. For each fileWrapper: - // Send fileWrapper header to client + // 3. For each file: + // Send file header to client // The client can reply in 3 ways: // - // 1. If type is an odd number (unknown type?), or fileWrapper download for the current fileWrapper is completed: - // client sends []byte{0x00, 0x03} to tell the server to continue to the next fileWrapper + // 1. If type is an odd number (unknown type?), or file download for the current file is completed: + // client sends []byte{0x00, 0x03} to tell the server to continue to the next file // - // 2. If download of a fileWrapper is to be resumed: + // 2. If download of a file is to be resumed: // client sends: // []byte{0x00, 0x02} // download folder action // [2]byte // Resume data size - // []byte fileWrapper resume data (see myField_FileResumeData) + // []byte file resume data (see myField_FileResumeData) // - // 3. Otherwise, download of the fileWrapper is requested and client sends []byte{0x00, 0x01} + // 3. Otherwise, download of the file is requested and client sends []byte{0x00, 0x01} // // When download is requested (case 2 or 3), server replies with: - // [4]byte - fileWrapper size + // [4]byte - file size // []byte - Flattened File Object // - // After every fileWrapper download, client could request next fileWrapper with: + // After every file download, client could request next file with: // []byte{0x00, 0x03} // // This notifies the server to send the next item header @@ -421,7 +419,6 @@ func DownloadFolderHandler(rwc io.ReadWriter, fullPath string, fileTransfer *Fil } subPath := path[basePathLen+1:] - rLogger.Debug("Sending fileheader", "i", i, "path", path, "fullFilePath", fullPath, "subPath", subPath, "IsDir", info.IsDir()) if i == 1 { return nil @@ -437,8 +434,6 @@ func DownloadFolderHandler(rwc io.ReadWriter, fullPath string, fileTransfer *Fil return err } - rLogger.Debug("Client folder download action", "action", fmt.Sprintf("%X", nextAction[0:2])) - var dataOffset int64 switch nextAction[1] { @@ -675,7 +670,7 @@ func UploadFolderHandler(rwc io.ReadWriter, fullPath string, fileTransfer *FileT } } - // Tell client to send next fileWrapper + // Tell client to send next file if _, err := rwc.Write([]byte{0, DlFldrActionNextFile}); err != nil { return err }