]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_transfer.go
Cleanup and logging improvements
[rbdr/mobius] / hotline / file_transfer.go
index 46b00611d418c9e9015e7284fc9fb838f3796c42..90dbbe669a2c9391afbb481f81f5c27bcded0eaa 100644 (file)
@@ -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...)
+}