package peer import "unsafe" // ---------------------------------------------------------------------------- const ( headerSize = 12 controlHeaderSize = 24 dataHeaderSize = 12 dataStreamID = 1 controlStreamID = 2 ) type Header struct { Version byte StreamID byte SourceIP byte DestIP byte Counter uint64 // Init with time.Now().Unix << 30 to ensure monotonic. } func parseHeader(b []byte) (h Header) { h.Version = b[0] h.StreamID = b[1] h.SourceIP = b[2] h.DestIP = b[3] h.Counter = *(*uint64)(unsafe.Pointer(&b[4])) return h } func (h *Header) Parse(b []byte) { h.Version = b[0] h.StreamID = b[1] h.SourceIP = b[2] h.DestIP = b[3] h.Counter = *(*uint64)(unsafe.Pointer(&b[4])) } func (h *Header) Marshal(buf []byte) { buf[0] = h.Version buf[1] = h.StreamID buf[2] = h.SourceIP buf[3] = h.DestIP *(*uint64)(unsafe.Pointer(&buf[4])) = h.Counter }