package session import ( "encoding/binary" ) const ( // cmds cmdWaste = 0 // Paddings cmdSYN = 1 // stream open cmdPSH = 2 // data push cmdFIN = 3 // stream close, a.k.a EOF mark cmdSettings = 4 // Settings cmdAlert = 5 // Alert cmdUpdatePaddingScheme = 6 // update padding scheme ) const ( headerOverHeadSize = 1 + 4 + 2 ) // frame defines a packet from or to be multiplexed into a single connection type frame struct { cmd byte // 1 sid uint32 // 4 data []byte // 2 + len(data) } func newFrame(cmd byte, sid uint32) frame { return frame{cmd: cmd, sid: sid} } type rawHeader [headerOverHeadSize]byte func (h rawHeader) Cmd() byte { return h[0] } func (h rawHeader) StreamID() uint32 { return binary.BigEndian.Uint32(h[1:]) } func (h rawHeader) Length() uint16 { return binary.BigEndian.Uint16(h[5:]) }