mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2024-11-16 06:01:21 +08:00
77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package core
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
protocolVersion = uint8(3)
|
|
protocolVersionV2 = uint8(2)
|
|
protocolTimeout = 10 * time.Second
|
|
|
|
closeErrorCodeGeneric = 0
|
|
closeErrorCodeProtocol = 1
|
|
closeErrorCodeAuth = 2
|
|
)
|
|
|
|
type transmissionRate struct {
|
|
SendBPS uint64
|
|
RecvBPS uint64
|
|
}
|
|
|
|
type clientHello struct {
|
|
Rate transmissionRate
|
|
AuthLen uint16 `struc:"sizeof=Auth"`
|
|
Auth []byte
|
|
}
|
|
|
|
type serverHello struct {
|
|
OK bool
|
|
Rate transmissionRate
|
|
MessageLen uint16 `struc:"sizeof=Message"`
|
|
Message string
|
|
}
|
|
|
|
type clientRequest struct {
|
|
UDP bool
|
|
HostLen uint16 `struc:"sizeof=Host"`
|
|
Host string
|
|
Port uint16
|
|
}
|
|
|
|
type serverResponse struct {
|
|
OK bool
|
|
UDPSessionID uint32
|
|
MessageLen uint16 `struc:"sizeof=Message"`
|
|
Message string
|
|
}
|
|
|
|
type udpMessage struct {
|
|
SessionID uint32
|
|
HostLen uint16 `struc:"sizeof=Host"`
|
|
Host string
|
|
Port uint16
|
|
MsgID uint16 // doesn't matter when not fragmented, but must not be 0 when fragmented
|
|
FragID uint8 // doesn't matter when not fragmented, starts at 0 when fragmented
|
|
FragCount uint8 // must be 1 when not fragmented
|
|
DataLen uint16 `struc:"sizeof=Data"`
|
|
Data []byte
|
|
}
|
|
|
|
func (m udpMessage) HeaderSize() int {
|
|
return 4 + 2 + len(m.Host) + 2 + 2 + 1 + 1 + 2
|
|
}
|
|
|
|
func (m udpMessage) Size() int {
|
|
return m.HeaderSize() + len(m.Data)
|
|
}
|
|
|
|
type udpMessageV2 struct {
|
|
SessionID uint32
|
|
HostLen uint16 `struc:"sizeof=Host"`
|
|
Host string
|
|
Port uint16
|
|
DataLen uint16 `struc:"sizeof=Data"`
|
|
Data []byte
|
|
}
|