-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathpeer_conn_store.go
65 lines (46 loc) · 1.27 KB
/
peer_conn_store.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package meshboi
import (
"sync"
"inet.af/netaddr"
)
type PeerConnStore struct {
peersByOutsideIPPort map[netaddr.IPPort]*PeerConn
peersByInsideIP map[netaddr.IP]*PeerConn
lock sync.RWMutex
}
func NewPeerConnStore() *PeerConnStore {
s := &PeerConnStore{}
s.peersByInsideIP = make(map[netaddr.IP]*PeerConn)
s.peersByOutsideIPPort = make(map[netaddr.IPPort]*PeerConn)
return s
}
func (p *PeerConnStore) Add(peer *PeerConn) {
p.lock.Lock()
defer p.lock.Unlock()
p.peersByInsideIP[peer.insideIP] = peer
p.peersByOutsideIPPort[peer.outsideAddr] = peer
}
func (p *PeerConnStore) GetByInsideIp(insideIP netaddr.IP) (*PeerConn, bool) {
p.lock.Lock()
defer p.lock.Unlock()
peer, ok := p.peersByInsideIP[insideIP]
return peer, ok
}
func (p *PeerConnStore) GetByOutsideIpPort(outsideIPPort netaddr.IPPort) (*PeerConn, bool) {
p.lock.Lock()
defer p.lock.Unlock()
peer, ok := p.peersByOutsideIPPort[outsideIPPort]
return peer, ok
}
func (p *PeerConnStore) RemoveByOutsideIPPort(outsideIPPort netaddr.IPPort) bool {
peer, ok := p.GetByOutsideIpPort(outsideIPPort)
if !ok {
return false
}
p.lock.Lock()
defer p.lock.Unlock()
insideIp := peer.insideIP
delete(p.peersByInsideIP, insideIp)
delete(p.peersByOutsideIPPort, outsideIPPort)
return true
}