aboutsummaryrefslogtreecommitdiff
path: root/hotline/file_transfer.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2021-08-12 19:00:13 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2021-08-12 11:00:13 -0700
commitc5d9af5aa4d9fb20316be45ab1b775bcf61bcad5 (patch)
tree300f7c6814d41ad12ff5665f3f14f24a54c62e4d /hotline/file_transfer.go
parent72dd37f1abb2b550aaaac48eac677403d5664797 (diff)
More cleanup
Diffstat (limited to 'hotline/file_transfer.go')
-rw-r--r--hotline/file_transfer.go61
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)
+}