WIP
This commit is contained in:
46
peer/remote.go
Normal file
46
peer/remote.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package peer
|
||||
|
||||
import (
|
||||
"net/netip"
|
||||
"time"
|
||||
|
||||
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
|
||||
|
||||
"vppn/peer/control"
|
||||
)
|
||||
|
||||
type PeerState string
|
||||
|
||||
const (
|
||||
StateRelayed = PeerState("RELAY")
|
||||
StateProbing = PeerState("PROBE")
|
||||
StateDirect = PeerState("DIRECT")
|
||||
)
|
||||
|
||||
type Peer struct {
|
||||
PubKey wgtypes.Key // WireGuard public key.
|
||||
VPNIP netip.Addr // VPN IP address.
|
||||
IsRelay bool // Peer is a relay.
|
||||
IsPublic bool // Peer has a public IP.
|
||||
Endpoint4 netip.AddrPort // Reported IPv4 endpoint.
|
||||
Endpoint6 netip.AddrPort // Reported IPv6 endpoint.
|
||||
ObservedEndpoint netip.AddrPort // If we're public: WG handshake source endpoint.
|
||||
LastPing time.Time // Time of last ping received.
|
||||
RTT time.Duration // Round-trip time.
|
||||
Role control.Role // Client initiates pings; server responds.
|
||||
State PeerState // Current connection state.
|
||||
Up bool // Is the peer alive.
|
||||
WGEndpoint netip.AddrPort // Endpoint currently in WG (direct/probe).
|
||||
}
|
||||
|
||||
func (p *Peer) Alive() bool {
|
||||
return time.Since(p.LastPing) < TimeoutInterval
|
||||
}
|
||||
|
||||
func (p *Peer) CanRelay() bool {
|
||||
return p.IsRelay && p.Up && p.WGEndpoint.IsValid()
|
||||
}
|
||||
|
||||
func (p *Peer) PreferredEndpoint() netip.AddrPort {
|
||||
return preferredEndpoint(p.Endpoint4, p.Endpoint6)
|
||||
}
|
||||
Reference in New Issue
Block a user