123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package smux
- import (
- "encoding/binary"
- "fmt"
- )
- const (
- version = 1
- )
- const ( // cmds
- cmdSYN byte = iota // stream open
- cmdFIN // stream close, a.k.a EOF mark
- cmdPSH // data push
- cmdNOP // no operation
- )
- const (
- sizeOfVer = 1
- sizeOfCmd = 1
- sizeOfLength = 2
- sizeOfSid = 4
- headerSize = sizeOfVer + sizeOfCmd + sizeOfSid + sizeOfLength
- )
- // Frame defines a packet from or to be multiplexed into a single connection
- type Frame struct {
- ver byte
- cmd byte
- sid uint32
- data []byte
- }
- func newFrame(cmd byte, sid uint32) Frame {
- return Frame{ver: version, cmd: cmd, sid: sid}
- }
- type rawHeader []byte
- func (h rawHeader) Version() byte {
- return h[0]
- }
- func (h rawHeader) Cmd() byte {
- return h[1]
- }
- func (h rawHeader) Length() uint16 {
- return binary.LittleEndian.Uint16(h[2:])
- }
- func (h rawHeader) StreamID() uint32 {
- return binary.LittleEndian.Uint32(h[4:])
- }
- func (h rawHeader) String() string {
- return fmt.Sprintf("Version:%d Cmd:%d StreamID:%d Length:%d",
- h.Version(), h.Cmd(), h.StreamID(), h.Length())
- }
|