Initial upload

This commit is contained in:
MassiveBox 2025-05-29 22:52:44 +02:00
commit cefd7abe8a
Signed by: massivebox
GPG key ID: 9B74D3A59181947D
19 changed files with 1027 additions and 0 deletions

54
fcast/raw.go Normal file
View file

@ -0,0 +1,54 @@
package fcast
import (
"encoding/binary"
"errors"
)
type OpCode uint8
type MessageHeader struct {
Size uint32 // little endian (4) 0-3
OpCode OpCode // (1) 4-4
}
type RawMessage struct {
Header MessageHeader // 0-4
Body []byte // 5-
}
func NewMessage(op OpCode, body []byte) *RawMessage {
return &RawMessage{
Header: MessageHeader{
Size: uint32(len(body) + 1),
OpCode: op,
},
Body: body,
}
}
func SerializeRaw(message *RawMessage) []byte {
buf := make([]byte, 4+message.Header.Size)
binary.LittleEndian.PutUint32(buf[0:4], message.Header.Size)
buf[4] = byte(message.Header.OpCode)
copy(buf[5:], message.Body)
return buf
}
var (
ErrHeaderTooShort = errors.New("header is too short")
ErrBodyTooShort = errors.New("body is too short")
)
func DeserializeRaw(bodyLen, opCode, body []byte) (*RawMessage, error) {
var msg RawMessage
msg.Header.Size = binary.LittleEndian.Uint32(bodyLen)
msg.Header.OpCode = OpCode(uint8(opCode[0]))
msg.Body = body
return &msg, nil
}