package hotline
-import "fmt"
+import (
+ "encoding/binary"
+ "fmt"
+ "path/filepath"
+)
// File transfer types
const (
FileUpload = 1
FolderDownload = 2
FolderUpload = 3
+ bannerDownload = 4
)
type FileTransfer struct {
FolderItemCount []byte
BytesSent int
clientID uint16
+ fileResumeData *FileResumeData
+ options []byte
}
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...)
+}