mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-12-27 12:35:39 +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
|
||
|
}
|