mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-04-25 12:48:09 +08:00
45 lines
919 B
Go
45 lines
919 B
Go
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:])
|
|
}
|