X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/22c599abc18895f73e96095f35b71cf3357d41b4..02b446d81d53ba3ccd4175917a62563bbda54199:/hotline/file_transfer.go diff --git a/hotline/file_transfer.go b/hotline/file_transfer.go index 46b0061..90dbbe6 100644 --- a/hotline/file_transfer.go +++ b/hotline/file_transfer.go @@ -1,6 +1,10 @@ package hotline -import "fmt" +import ( + "encoding/binary" + "fmt" + "path/filepath" +) // File transfer types const ( @@ -19,6 +23,8 @@ type FileTransfer struct { FolderItemCount []byte BytesSent int clientID uint16 + fileResumeData *FileResumeData + options []byte } func (ft *FileTransfer) String() string { @@ -27,3 +33,30 @@ func (ft *FileTransfer) String() string { return out } + +func (ft *FileTransfer) ItemCount() int { + return int(binary.BigEndian.Uint16(ft.FolderItemCount)) +} + +type folderUpload struct { + DataSize [2]byte + IsFolder [2]byte + PathItemCount [2]byte + FileNamePath []byte +} + +func (fu *folderUpload) FormattedPath() string { + pathItemLen := binary.BigEndian.Uint16(fu.PathItemCount[:]) + + 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 filepath.Join(pathSegments...) +}