in internal/pkg/file/cbor/chunk.go [55:128]
func encodePreambleToCBOR(final bool, baseID string, chunkHash string, chunkSize int64) []byte {
bidLen := len(baseID)
hashLen := len(chunkHash)
// if we know the size of the chunk stream, we will write the 4-byte uint32
// descriptor of that length
// otherwise it will be a *single* byte saying it is an unknown length
// and we will write out lengths as the chunk is read
chunkLen := 5 // space for describing sequence length. 1 byte to SAY 32-bit int (4byte), then 4 bytes
if final {
chunkLen = 1
}
preamble := make([]byte, 31+bidLen+2+5+hashLen+2+chunkLen+5)
preamble[0] = 0xA5 // Object with 5 keys
preamble[1] = 0x6a // string with 10 characters (@timestamp)
preamble[2] = '@'
preamble[3] = 't'
preamble[4] = 'i'
preamble[5] = 'm'
preamble[6] = 'e'
preamble[7] = 's'
preamble[8] = 't'
preamble[9] = 'a'
preamble[10] = 'm'
preamble[11] = 'p'
preamble[12] = 0x1b // uint64 to follow
// occupies 8 bytes, indexes 13-20
binary.BigEndian.PutUint64(preamble[13:], uint64(time.Now().UnixMilli())) //nolint:gosec // disable G115
preamble[21] = 0x64 // string with 4 chars (key: last)
preamble[22] = 'l'
preamble[23] = 'a'
preamble[24] = 's'
preamble[25] = 't'
if final {
preamble[26] = 0xF5 // bool true
} else {
preamble[26] = 0xF4 // bool false
}
preamble[27] = 0x63 // string with 3 chars (key: bid)
preamble[28] = 'b'
preamble[29] = 'i'
preamble[30] = 'd'
i := 31
if n, err := writeString(preamble[i:], baseID); err != nil {
return nil
} else {
i += n
}
if n, err := writeKey(preamble[i:], "sha2"); err != nil {
return nil
} else {
i += n
}
if n, err := writeString(preamble[i:], chunkHash); err != nil {
return nil
} else {
i += n
}
if n, err := writeKey(preamble[i:], "data"); err != nil {
return nil
} else {
i += n
}
if !final {
// byte data should be precisely chunkSize long, otherwise malformed
preamble[i] = 0x5A // say length descriptor will be 32-bit int
binary.BigEndian.PutUint32(preamble[i+1:], uint32(chunkSize)) //nolint:gosec // disable G115
} else {
// final chunk may be less than full size, will need to determine length
preamble[i] = 0x5F // indeterminate-length byte sequence
}
return preamble
}