X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/16a4ad707a05df25c9d12b8cc89fb3a9e3be0dba..2e08be587963ac3fcb204fb52186c17254b9fe56:/hotline/file_transfer.go diff --git a/hotline/file_transfer.go b/hotline/file_transfer.go index 65ef0b0..90dbbe6 100644 --- a/hotline/file_transfer.go +++ b/hotline/file_transfer.go @@ -3,7 +3,7 @@ package hotline import ( "encoding/binary" "fmt" - "strings" + "path/filepath" ) // File transfer types @@ -24,6 +24,7 @@ type FileTransfer struct { BytesSent int clientID uint16 fileResumeData *FileResumeData + options []byte } func (ft *FileTransfer) String() string { @@ -37,39 +38,6 @@ func (ft *FileTransfer) ItemCount() int { return int(binary.BigEndian.Uint16(ft.FolderItemCount)) } -// 00 28 // DataSize -// 00 00 // IsFolder -// 00 02 // PathItemCount -// -// 00 00 -// 09 -// 73 75 62 66 6f 6c 64 65 72 // "subfolder" -// -// 00 00 -// 15 -// 73 75 62 66 6f 6c 64 65 72 2d 74 65 73 74 66 69 6c 65 2d 35 6b // "subfolder-testfile-5k" -func readFolderUpload(buf []byte) folderUpload { - dataLen := binary.BigEndian.Uint16(buf[0:2]) - - fu := folderUpload{ - DataSize: [2]byte{buf[0], buf[1]}, // Size of this structure (not including data size element itself) - IsFolder: [2]byte{buf[2], buf[3]}, - PathItemCount: [2]byte{buf[4], buf[5]}, - FileNamePath: buf[6 : dataLen+2], - } - - return fu -} - - -func (fu *folderUpload) UnmarshalBinary(b []byte) error { - fu.DataSize = [2]byte{b[0], b[1]} - fu.IsFolder = [2]byte{b[2], b[3]} - fu.PathItemCount = [2]byte{b[4], b[5]} - - return nil -} - type folderUpload struct { DataSize [2]byte IsFolder [2]byte @@ -83,11 +51,12 @@ func (fu *folderUpload) FormattedPath() string { var pathSegments []string pathData := fu.FileNamePath + // TODO: implement scanner interface instead? for i := uint16(0); i < pathItemLen; i++ { segLen := pathData[2] pathSegments = append(pathSegments, string(pathData[3:3+segLen])) pathData = pathData[3+segLen:] } - return strings.Join(pathSegments, pathSeparator) + return filepath.Join(pathSegments...) }