glider/proxy/anytls/session/frame.go
2026-04-09 18:49:23 +08:00

37 lines
1.2 KiB
Go

package session
import "encoding/binary"
// Command types for the anytls session protocol.
const (
cmdWaste byte = 0 // padding, discarded
cmdSYN byte = 1 // stream open
cmdPSH byte = 2 // data push
cmdFIN byte = 3 // stream close (EOF)
cmdSettings byte = 4 // client -> server settings
cmdAlert byte = 5 // alert message
cmdUpdatePaddingScheme byte = 6 // update padding scheme
cmdSYNACK byte = 7 // server -> client stream opened (v2)
cmdHeartRequest byte = 8 // keepalive request (v2)
cmdHeartResponse byte = 9 // keepalive response (v2)
cmdServerSettings byte = 10 // server -> client settings (v2)
)
const headerSize = 1 + 4 + 2 // cmd(1) + streamID(4) + length(2)
type frame struct {
cmd byte
sid uint32
data []byte
}
func newFrame(cmd byte, sid uint32) frame {
return frame{cmd: cmd, sid: sid}
}
type rawHeader [headerSize]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:]) }