diff options
| author | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2021-08-12 19:00:13 -0700 |
|---|---|---|
| committer | Jeff Halter <868228+jhalter@users.noreply.github.com> | 2021-08-12 11:00:13 -0700 |
| commit | c5d9af5aa4d9fb20316be45ab1b775bcf61bcad5 (patch) | |
| tree | 300f7c6814d41ad12ff5665f3f14f24a54c62e4d /hotline/file_transfer.go | |
| parent | 72dd37f1abb2b550aaaac48eac677403d5664797 (diff) | |
More cleanup
Diffstat (limited to 'hotline/file_transfer.go')
| -rw-r--r-- | hotline/file_transfer.go | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/hotline/file_transfer.go b/hotline/file_transfer.go index 46b0061..c0c2f87 100644 --- a/hotline/file_transfer.go +++ b/hotline/file_transfer.go @@ -1,6 +1,10 @@ package hotline -import "fmt" +import ( + "encoding/binary" + "fmt" + "strings" +) // File transfer types const ( @@ -27,3 +31,58 @@ func (ft *FileTransfer) String() string { return out } + +// 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 + PathItemCount [2]byte + FileNamePath []byte +} + +func (fu *folderUpload) FormattedPath() string { + pathItemLen := binary.BigEndian.Uint16(fu.PathItemCount[:]) + + var pathSegments []string + pathData := fu.FileNamePath + + 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) +} |