mirror of
https://github.com/sigcn/pg.git
synced 2026-04-23 00:37:30 +08:00
vpn/nic: add RemovePeer func
This commit is contained in:
@@ -247,6 +247,7 @@ func (v *P2PVPN) listenPacketConn(ctx context.Context) (c *p2p.PacketConn, err e
|
||||
p2pOptions := []p2p.Option{
|
||||
p2p.PeerMeta("version", Version),
|
||||
p2p.ListenPeerUp(v.addPeer),
|
||||
p2p.ListenPeerLeave(v.removePeer),
|
||||
p2p.KeepAlivePeriod(6 * time.Second),
|
||||
}
|
||||
if v.Config.Port > 0 {
|
||||
@@ -290,6 +291,10 @@ func (v *P2PVPN) addPeer(pi disco.PeerID, m url.Values) {
|
||||
v.nic.AddPeer(nic.Peer{Addr: pi, IPv4: m.Get("alias1"), IPv6: m.Get("alias2"), Meta: m})
|
||||
}
|
||||
|
||||
func (v *P2PVPN) removePeer(pi disco.PeerID) {
|
||||
v.nic.RemovePeer(pi)
|
||||
}
|
||||
|
||||
func (v *P2PVPN) loginIfNecessary(ctx context.Context) (disco.SecretStore, error) {
|
||||
if len(v.Config.SecretFile) == 0 {
|
||||
currentUser, err := user.Current()
|
||||
|
||||
@@ -63,6 +63,13 @@ func (c *Cache[K, V]) Put(key K, value V) {
|
||||
c.cache[key] = elem
|
||||
}
|
||||
|
||||
func (c *Cache[K, V]) Del(key K) {
|
||||
if v, ok := c.cache[key]; ok {
|
||||
c.list.Remove(v)
|
||||
delete(c.cache, key)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Cache[K, V]) Clear() {
|
||||
clear(c.cache)
|
||||
c.list.Init()
|
||||
|
||||
@@ -88,6 +88,19 @@ func (r *VirtualNIC) AddPeer(peer Peer) {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *VirtualNIC) RemovePeer(addr net.Addr) {
|
||||
r.init()
|
||||
r.peersMutex.Lock()
|
||||
defer r.peersMutex.Unlock()
|
||||
_, v, ok := r.peers.Find(func(s string, p *Peer) bool {
|
||||
return p.Addr == addr
|
||||
})
|
||||
if ok {
|
||||
r.peers.Del(v.IPv4)
|
||||
r.peers.Del(v.IPv6)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *VirtualNIC) AddRoute(dst *net.IPNet, via net.IP) bool {
|
||||
r.init()
|
||||
r.peersMutex.Lock()
|
||||
|
||||
Reference in New Issue
Block a user