Documentation ¶
Index ¶
- Constants
- type Frame
- func (*Frame) AppendOptions(header *[]byte, options []byte)
- func (f *Frame) Bytes() []byte
- func (f *Frame) Header() []byte
- func (f *Frame) HeaderPtr() *[]byte
- func (f *Frame) Payload() []byte
- func (f *Frame) ReadFlags() byte
- func (*Frame) ReadHL(header []byte) byte
- func (f *Frame) ReadOptions(header []byte) []uint32
- func (*Frame) ReadPayloadLen(header []byte) uint32
- func (*Frame) ReadVersion(header []byte) byte
- func (f *Frame) Reset()
- func (*Frame) VerifyCRC(header []byte) bool
- func (*Frame) WriteCRC(header []byte)
- func (*Frame) WriteFlags(header []byte, flags ...byte)
- func (f *Frame) WriteOptions(header *[]byte, options ...uint32)
- func (f *Frame) WritePayload(data []byte)
- func (*Frame) WritePayloadLen(header []byte, payloadLen uint32)
- func (*Frame) WriteVersion(header []byte, version Version)
- type Version
Constants ¶
const ( CONTROL byte = 0x01 CODEC_RAW byte = 0x04 //nolint:stylecheck,golint CODEC_JSON byte = 0x08 //nolint:stylecheck,golint CODEC_MSGPACK byte = 0x10 //nolint:stylecheck,golint CODEC_GOB byte = 0x20 //nolint:stylecheck,golint ERROR byte = 0x40 //nolint:stylecheck,golint CODEC_PROTO byte = 0x80 //nolint:stylecheck,golint )
BYTE flags, it means, that we can set multiply flags from this group using bitwise OR For example CONTEXT_SEPARATOR | CODEC_RAW
const ( RESERVED2 byte = 0x81 RESERVED3 byte = 0x82 RESERVED4 byte = 0x83 RESERVED5 byte = 0x84 )
COMPLEX flags can't be used with Byte flags, because it's value more than 128
const OptionsMaxSize = 40
OptionsMaxSize represents header's options maximum size
const WORD = 4
WORD represents 32bit word
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Frame ¶
type Frame struct {
// contains filtered or unexported fields
}
Frame defines new user level package format.
func NewFrame ¶
func NewFrame() *Frame
NewFrame initializes new frame with 12-byte header and 100-byte reserved space for the payload
func ReadFrame ¶
ReadFrame produces Frame from the RAW bytes first 12 bytes will be a header the rest - payload
func (*Frame) AppendOptions ¶
AppendOptions appends options to the header
func (*Frame) ReadHL ¶
ReadHL The lower 4 bits of the 0th octet occupies our header len data. We should erase upper 4 bits, which contain information about Version To erase, we are applying bitwise AND to the upper 4 bits and returning result
func (*Frame) ReadOptions ¶
ReadOptions f.readHL() - 2 needed to know actual options size we know, that 2 WORDS is minimal header len extra WORDS will add extra 32bits to the options (4 bytes) cannot inline, cost 117 vs 80
func (*Frame) ReadPayloadLen ¶
ReadPayloadLen LE format used to write Payload Using 4 bytes (2,3,4,5 bytes in the header)
func (*Frame) ReadVersion ¶
ReadVersion ... To read version, we should return our 4 upper bits to their original place 1111_0000 -> 0000_1111 (15)
func (*Frame) VerifyCRC ¶
VerifyCRC ... Reading info from 6th byte and verifying it with calculated in-place. Should be equal. If not - drop the frame as incorrect.
func (*Frame) WriteCRC ¶
WriteCRC will calculate and write CRC32 4-bytes it to the 6th byte (7th reserved)
func (*Frame) WriteFlags ¶
func (*Frame) WriteOptions ¶
WriteOptions Options slice len should not be more than 10 (40 bytes) we need a pointer to the header because we are reallocating the slice
func (*Frame) WritePayloadLen ¶
WritePayloadLen LE format used to write Payload Using 4 bytes (2,3,4,5 bytes in the header)
func (*Frame) WriteVersion ¶
WriteVersion To write version, we should do the following: 1. For example, we have version 15 it's 0000_1111 (1 byte) 2. We should shift 4 lower bits to upper and write that to the 0th byte 3. The 0th byte should become 1111_0000, but it's not 240, it's only 15, because version only 4 bits len