]>
Commit | Line | Data |
---|---|---|
1 | package hotline | |
2 | ||
3 | import ( | |
4 | "encoding/binary" | |
5 | "slices" | |
6 | ) | |
7 | ||
8 | type FileHeader struct { | |
9 | Size []byte // Total size of FileHeader payload | |
10 | Type []byte // 0 for file, 1 for dir | |
11 | FilePath []byte // encoded file path | |
12 | } | |
13 | ||
14 | func NewFileHeader(fileName string, isDir bool) FileHeader { | |
15 | fh := FileHeader{ | |
16 | Size: make([]byte, 2), | |
17 | Type: []byte{0x00, 0x00}, | |
18 | FilePath: EncodeFilePath(fileName), | |
19 | } | |
20 | if isDir { | |
21 | fh.Type = []byte{0x00, 0x01} | |
22 | } | |
23 | ||
24 | encodedPathLen := uint16(len(fh.FilePath) + len(fh.Type)) | |
25 | binary.BigEndian.PutUint16(fh.Size, encodedPathLen) | |
26 | ||
27 | return fh | |
28 | } | |
29 | ||
30 | func (fh *FileHeader) Payload() []byte { | |
31 | return slices.Concat( | |
32 | fh.Size, | |
33 | fh.Type, | |
34 | fh.FilePath, | |
35 | ) | |
36 | } |