aboutsummaryrefslogtreecommitdiff
path: root/hotline/file_header.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2021-07-28 18:21:52 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2021-07-28 14:21:52 -0700
commit22c599abc18895f73e96095f35b71cf3357d41b4 (patch)
tree482ef57d386c955692ea43c43e4655b3c3763499 /hotline/file_header.go
parent71c56068adca18f76ebee86355f000a3e51d3127 (diff)
Move code to hotline dir
Diffstat (limited to 'hotline/file_header.go')
-rw-r--r--hotline/file_header.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/hotline/file_header.go b/hotline/file_header.go
new file mode 100644
index 0000000..60c652e
--- /dev/null
+++ b/hotline/file_header.go
@@ -0,0 +1,36 @@
+package hotline
+
+import (
+ "encoding/binary"
+ "github.com/jhalter/mobius/concat"
+)
+
+type FileHeader struct {
+ Size []byte // Total size of FileHeader payload
+ Type []byte // 0 for file, 1 for dir
+ FilePath []byte // encoded file path
+}
+
+func NewFileHeader(fileName string, isDir bool) FileHeader {
+ fh := FileHeader{
+ Size: make([]byte, 2),
+ Type: []byte{0x00, 0x00},
+ FilePath: EncodeFilePath(fileName),
+ }
+ if isDir {
+ fh.Type = []byte{0x00, 0x01}
+ }
+
+ encodedPathLen := uint16(len(fh.FilePath) + len(fh.Type))
+ binary.BigEndian.PutUint16(fh.Size, encodedPathLen)
+
+ return fh
+}
+
+func (fh *FileHeader) Payload() []byte {
+ return concat.Slices(
+ fh.Size,
+ fh.Type,
+ fh.FilePath,
+ )
+}