]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_header.go
Limit chat message size to 8192 bytes
[rbdr/mobius] / hotline / file_header.go
index 60c652e36eb5cf1be776b192ed5bdc822cc71315..b18229a666a5d66ead8435fa73eb60d8e6e0a064 100644 (file)
@@ -2,35 +2,45 @@ package hotline
 
 import (
        "encoding/binary"
-       "github.com/jhalter/mobius/concat"
+       "io"
+       "slices"
 )
 
 type FileHeader struct {
-       Size     []byte // Total size of FileHeader payload
-       Type     []byte // 0 for file, 1 for dir
-       FilePath []byte // encoded file path
+       Size     [2]byte // Total size of FileHeader payload
+       Type     [2]byte // 0 for file, 1 for dir
+       FilePath []byte  // encoded file path
+
+       readOffset int // Internal offset to track read progress
 }
 
 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}
+               fh.Type = [2]byte{0x00, 0x01}
        }
 
        encodedPathLen := uint16(len(fh.FilePath) + len(fh.Type))
-       binary.BigEndian.PutUint16(fh.Size, encodedPathLen)
+       binary.BigEndian.PutUint16(fh.Size[:], encodedPathLen)
 
        return fh
 }
 
-func (fh *FileHeader) Payload() []byte {
-       return concat.Slices(
-               fh.Size,
-               fh.Type,
+func (fh *FileHeader) Read(p []byte) (int, error) {
+       buf := slices.Concat(
+               fh.Size[:],
+               fh.Type[:],
                fh.FilePath,
        )
+
+       if fh.readOffset >= len(buf) {
+               return 0, io.EOF // All bytes have been read
+       }
+
+       n := copy(p, buf[fh.readOffset:])
+       fh.readOffset += n
+
+       return n, nil
 }