Documentation
¶
Index ¶
- Constants
- func EncodePacketClients(pkt PacketClients) []byte
- func EncodePacketFarPing(pkt PacketFarPing) []byte
- func EncodePacketIPv4(pkt PacketIPv4) []byte
- func IPToUint32(ip net.IP) uint32
- func ReadPacket(pkt *Packet, conn *Conn, client *Client) error
- func Uint32ToIP(intIP uint32) net.IP
- func WritePacket(pkt *Packet, conn *Conn, client *Client) error
- func WriteRawPacket(typ uint8, content []byte, conn *Conn, client *Client) error
- type Client
- func (client *Client) CheckClients()
- func (client *Client) CheckConn()
- func (client *Client) HandleConn(rawConn net.Conn, connInfo string) error
- func (client *Client) HandleFinalIPv4(pkt PacketIPv4) error
- func (client *Client) HandlePacketFarPing(pkt PacketFarPing) error
- func (client *Client) HandlePacketIPv4(pkt PacketIPv4) error
- func (client *Client) HandleTunIPv4(data []byte, pkt *packet.IPv4) error
- func (client *Client) Start() error
- func (client *Client) Stop()
- type ClientConfig
- type Config
- type Conn
- type LatencyPair
- type ListenInfo
- type OtherClient
- type OtherClientInfo
- type OtherClients
- func (c *OtherClients) ClearClients(viaId uint32)
- func (c *OtherClients) IPv4ToId(ipv4 uint32) uint32
- func (c *OtherClients) Init(checkInterval int)
- func (c *OtherClients) UpdateClient(id, ipv4, viaId, latency, latencyAdd uint32)
- func (c *OtherClients) UpdateClientConnInfo(id uint32, connInfo string)
- func (c *OtherClients) UpdateClients(pkt PacketClients, viaId, addLatency uint32)
- func (c *OtherClients) UpdateLatencyAdd(viaId, addLatency uint32)
- type OtherClientsInfo
- type Packet
- type PacketClients
- type PacketClientsOkTypeArr
- type PacketClientsString
- type PacketClientsStringArr
- type PacketClientsUint32
- type PacketClientsUint32Arr
- type PacketFarPing
- type PacketIPv4
- type Peer
- type QueuedPacket
- type TmpKey
- type TmpKeySet
- type Writer
Constants ¶
View Source
const ( FarPingRequest uint32 = 0 FarPingReply uint32 = 1 FarPingCircuit uint32 = 2 )
View Source
const ( GrassPacketIPv4 uint8 = 0 GrassPacketPing uint8 = 1 GrassPacketInfo uint8 = 2 GrassPacketPong uint8 = 3 GrassPacketClients uint8 = 4 GrassPacketFarPing uint8 = 5 GrassPacketExpired uint8 = 255 )
View Source
const MAX_PEER_CONNS = 8
View Source
const PacketMagicNumber uint8 = 114514 % 256
Variables ¶
This section is empty.
Functions ¶
func EncodePacketClients ¶
func EncodePacketClients(pkt PacketClients) []byte
func EncodePacketFarPing ¶
func EncodePacketFarPing(pkt PacketFarPing) []byte
func EncodePacketIPv4 ¶
func EncodePacketIPv4(pkt PacketIPv4) []byte
func IPToUint32 ¶
func Uint32ToIP ¶
Types ¶
type Client ¶
type Client struct {
Id uint32
IPv4 uint32
Key []byte
Peers map[uint32]*Peer
PeerMutex *sync.RWMutex
OClients OtherClients
LastCheckClients OtherClientsInfo
Tun *network.TunHandler
Config ClientConfig
ConnInfo string
KnownConnInfo map[string]uint32
KnownConnInfoMutex *sync.Mutex
// contains filtered or unexported fields
}
func (*Client) CheckClients ¶
func (client *Client) CheckClients()
func (*Client) HandleConn ¶
func (*Client) HandleFinalIPv4 ¶
func (client *Client) HandleFinalIPv4(pkt PacketIPv4) error
func (*Client) HandlePacketFarPing ¶
func (client *Client) HandlePacketFarPing(pkt PacketFarPing) error
func (*Client) HandlePacketIPv4 ¶
func (client *Client) HandlePacketIPv4(pkt PacketIPv4) error
func (*Client) HandleTunIPv4 ¶
type ClientConfig ¶
type ClientConfig struct {
Id uint32
Key []byte
InterfaceName string
MTU int
IPv4 uint32
IPv4Gateway uint32
IPv4Mask uint32
IPv4DNS []uint32
Listen []ListenInfo
BootstrapNodes []string
CheckClientsInterval int
PingInterval int
CheckConnInterval int
Debug bool
ConnectNewPeer bool
StartTun bool
}
func UnmarshalConfig ¶
func UnmarshalConfig(s []byte) (ClientConfig, error)
type LatencyPair ¶
type ListenInfo ¶
type OtherClient ¶
type OtherClient struct {
Id uint32
IPv4 uint32
Latency map[uint32]uint32 // connId->latency
LatencyAdd map[uint32]uint32
LatencySorted []LatencyPair
LatencyMutex *sync.RWMutex
ConnInfo []string
ConnInfoStr string
}
func (*OtherClient) GetLatency ¶
func (oc *OtherClient) GetLatency() uint32
func (*OtherClient) SortLatency ¶
func (oc *OtherClient) SortLatency()
type OtherClientInfo ¶
type OtherClients ¶
type OtherClients struct {
C map[uint32]*OtherClient
M *sync.RWMutex
IPv4Map map[uint32]uint32
BannedClients *TmpKeySet
}
func (*OtherClients) ClearClients ¶
func (c *OtherClients) ClearClients(viaId uint32)
func (*OtherClients) IPv4ToId ¶
func (c *OtherClients) IPv4ToId(ipv4 uint32) uint32
func (*OtherClients) Init ¶
func (c *OtherClients) Init(checkInterval int)
func (*OtherClients) UpdateClient ¶
func (c *OtherClients) UpdateClient(id, ipv4, viaId, latency, latencyAdd uint32)
func (*OtherClients) UpdateClientConnInfo ¶
func (c *OtherClients) UpdateClientConnInfo(id uint32, connInfo string)
func (*OtherClients) UpdateClients ¶
func (c *OtherClients) UpdateClients(pkt PacketClients, viaId, addLatency uint32)
func (*OtherClients) UpdateLatencyAdd ¶
func (c *OtherClients) UpdateLatencyAdd(viaId, addLatency uint32)
type OtherClientsInfo ¶
type OtherClientsInfo map[uint32]OtherClientInfo
type PacketClients ¶
type PacketClients struct {
Count uint64
Ids []uint32
ConnInfo PacketClientsStringArr
IPv4 PacketClientsUint32Arr
Latency PacketClientsUint32Arr
}
func DecodePacketClients ¶
func DecodePacketClients(buf []byte) (PacketClients, error)
func GenDiffPacketClients ¶
func GenDiffPacketClients(cur, old OtherClientsInfo) (PacketClients, bool)
type PacketClientsOkTypeArr ¶
type PacketClientsString ¶
type PacketClientsStringArr ¶
type PacketClientsStringArr []PacketClientsString
func (PacketClientsStringArr) GetOk ¶
func (a PacketClientsStringArr) GetOk(n int) bool
func (PacketClientsStringArr) SetOk ¶
func (a PacketClientsStringArr) SetOk(n int)
type PacketClientsUint32 ¶
type PacketClientsUint32Arr ¶
type PacketClientsUint32Arr []PacketClientsUint32
func (PacketClientsUint32Arr) GetOk ¶
func (a PacketClientsUint32Arr) GetOk(n int) bool
func (PacketClientsUint32Arr) SetOk ¶
func (a PacketClientsUint32Arr) SetOk(n int)
type PacketFarPing ¶
func DecodePacketFarPing ¶
func DecodePacketFarPing(buf []byte) (PacketFarPing, error)
type PacketIPv4 ¶
type PacketIPv4 struct {
TargetNode uint32
TTL uint8
HistoryNodes []uint32
Data []byte
IPPacket *packet.IPv4
}
func DecodePacketIPv4 ¶
func DecodePacketIPv4(buf []byte) (PacketIPv4, error)
type Peer ¶
type Peer struct {
Id uint32
Conns []*Conn
ConnInfo []string
ConnsMutex *sync.RWMutex
LastSendClients OtherClientsInfo
}
func (*Peer) AvgLatency ¶
type QueuedPacket ¶
type TmpKeySet ¶
func NewTmpKeySet ¶
Source Files
¶
Click to show internal directories.
Click to hide internal directories.