mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-04-26 05:08:03 +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:])
|
||
|
}
|