Documentation ¶
Overview ¶
Package packet handling packet communicate between server and client.
Packet Layout
-------------------------------------------------------------- iv + crc32(type+payload) + aes(crc32(type+payload), token, iv) + length + aes(payload + type, token, iv) -------------------------------------------------------------- iv => userId(uint16) + portNum(uint16) + reqId(int32) + rand(8) = 16byte length => int16 aes => aes-256-cfb type => int8 payload => []byte token => auth request
Index ¶
Constants ¶
View Source
const PacketL2HeaderSize = 24
Variables ¶
View Source
var ( IsHasLoopbackPrefix = runtime.GOOS == "darwin" MaxPayloadLength = math.MaxUint16 - 27 // header(26) + type(1) )
View Source
var ( ErrPacketTooShort = logex.Define("packet too short: %v") ErrInvalidType = logex.Define("invalid type: %v") ErrInvalidToken = logex.Define("invalid token") ErrInvalidLength = logex.Define("invalid length, want:%v, got: %v") ErrPayloadTooLarge = logex.Define("payload is too large: %v") )
View Source
var (
ErrUserNotMatch = logex.Define("user %v is not matched")
)
Functions ¶
This section is empty.
Types ¶
type AuthDelegate ¶
type DataPacket ¶
type DataPacket struct {
*Packet
}
func NewDataPacket ¶
func NewDataPacket(payload []byte) *DataPacket
func (*DataPacket) DestIP ¶
func (d *DataPacket) DestIP() ip.IP
func (*DataPacket) SrcIP ¶
func (d *DataPacket) SrcIP() ip.IP
type PacketL2 ¶
type PacketL2 struct { IV []byte UserId uint16 Payload []byte Checksum uint32 // contains filtered or unexported fields }
to verify auth iv + userid + // header (18) crc32(payload) // checksum (4) len(payload) + payload // payload (2+n)
func NewPacketL2 ¶
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
func NewSessionCli ¶
func NewSessionSvr ¶
func NewSessionSvr(delegate AuthDelegate) *Session
type Type ¶
type Type int
const ( AUTH Type // 1: payload: token AUTH_R // 2: payload: token DATA // 3: payload: ip packet DATA_R // 4: payload: nil HEARTBEAT // 5: payload: nil HEARTBEAT_R // 6: payload: nil NEWDC // 7: payload: nil NEWDC_R // 8: payload: json([port]) // send bytes to remote SPEED // 9: payload: [4096]bytes in random SPEED_R // 10: payload: nil // let remote send N bytes to local SPEED_REQ // 11: payload: byte size(uint64) SPEED_REQ_R // 12: InvalidType )
packet type
Click to show internal directories.
Click to hide internal directories.