8
8
9
9
"github.com/bitcoin-sv/block-headers-service/internal/transports/p2p/peer"
10
10
"github.com/bitcoin-sv/block-headers-service/internal/wire"
11
+ "golang.org/x/exp/maps"
11
12
)
12
13
13
14
// AddressBook represents a collection of known network addresses.
@@ -16,11 +17,11 @@ type AddressBook struct {
16
17
addrs []* knownAddress // addrs is a slice containing known addresses
17
18
addrsLookup map [string ]int // addrLookup is a map for fast lookup of addresses, maps address key to index in addrs slice
18
19
mu sync.Mutex
19
- addrFitlerFn func (* wire.NetAddress ) bool
20
+ addrFilterFn func (* wire.NetAddress ) bool
20
21
}
21
22
22
23
// NewAddressBook creates and initializes a new AddressBook instance.
23
- func NewAdressBook (banDuration time.Duration , acceptLocalAddresses bool ) * AddressBook {
24
+ func NewAddressBook (banDuration time.Duration , acceptLocalAddresses bool ) * AddressBook {
24
25
// Set the address filter function based on whether local addresses are accepted
25
26
addrFitlerFn := IsRoutable
26
27
if acceptLocalAddresses {
@@ -32,7 +33,7 @@ func NewAdressBook(banDuration time.Duration, acceptLocalAddresses bool) *Addres
32
33
addrs : make ([]* knownAddress , 0 , addressesInitCapacity ),
33
34
addrsLookup : make (map [string ]int , addressesInitCapacity ),
34
35
banDuration : banDuration ,
35
- addrFitlerFn : addrFitlerFn ,
36
+ addrFilterFn : addrFitlerFn ,
36
37
}
37
38
}
38
39
@@ -42,12 +43,12 @@ func (a *AddressBook) UpsertPeerAddr(p *peer.Peer) {
42
43
defer a .mu .Unlock ()
43
44
44
45
pa := p .GetPeerAddr ()
45
- key , ka := a .internalFind (pa )
46
+ key , ka := a .findAddr (pa )
46
47
47
48
if ka != nil {
48
49
ka .peer = p
49
50
} else {
50
- a .internalAddAddr (key , & knownAddress {addr : pa , peer : p })
51
+ a .addAddr (key , & knownAddress {addr : pa , peer : p })
51
52
}
52
53
}
53
54
@@ -57,14 +58,14 @@ func (a *AddressBook) UpsertAddrs(address []*wire.NetAddress) {
57
58
defer a .mu .Unlock ()
58
59
59
60
for _ , addr := range address {
60
- if ! a .addrFitlerFn (addr ) {
61
+ if ! a .addrFilterFn (addr ) {
61
62
continue
62
63
}
63
64
64
- key , ka := a .internalFind (addr )
65
+ key , ka := a .findAddr (addr )
65
66
// If the address is not found, add it to the AddressBook.
66
67
if ka == nil {
67
- a .internalAddAddr (key , & knownAddress {addr : addr })
68
+ a .addAddr (key , & knownAddress {addr : addr })
68
69
} else if addr .Timestamp .After (ka .addr .Timestamp ) {
69
70
// Otherwise, update the timestamp if the new one is newer.
70
71
ka .addr .Timestamp = addr .Timestamp
@@ -77,18 +78,20 @@ func (a *AddressBook) BanAddr(addr *wire.NetAddress) {
77
78
a .mu .Lock ()
78
79
defer a .mu .Unlock ()
79
80
80
- _ , ka := a .internalFind (addr )
81
+ _ , ka := a .findAddr (addr )
81
82
if ka != nil {
82
83
now := time .Now ()
83
84
ka .banTimestamp = & now
84
85
}
85
86
}
86
87
87
- // GetRndUnusedAddr returns a randomly chosen unused network address.
88
- func (a * AddressBook ) GetRndUnusedAddr (tries uint ) * wire.NetAddress {
88
+ // GetRandUnusedAddr returns a randomly chosen unused network address.
89
+ func (a * AddressBook ) GetRandUnusedAddr (tries uint ) * wire.NetAddress {
89
90
a .mu .Lock ()
90
91
defer a .mu .Unlock ()
91
92
93
+ v := maps .Values (a .addrsLookup )
94
+
92
95
alen := len (a .addrs )
93
96
for i := uint (0 ); i < tries ; i ++ {
94
97
// #nosec G404
@@ -105,7 +108,7 @@ func (a *AddressBook) GetRndUnusedAddr(tries uint) *wire.NetAddress {
105
108
return nil
106
109
}
107
110
108
- func (a * AddressBook ) internalFind (addr * wire.NetAddress ) (string , * knownAddress ) {
111
+ func (a * AddressBook ) findAddr (addr * wire.NetAddress ) (string , * knownAddress ) {
109
112
key := addrKey (addr )
110
113
addrIndex , ok := a .addrsLookup [key ]
111
114
@@ -115,7 +118,7 @@ func (a *AddressBook) internalFind(addr *wire.NetAddress) (string, *knownAddress
115
118
return key , nil
116
119
}
117
120
118
- func (a * AddressBook ) internalAddAddr (key string , addr * knownAddress ) {
121
+ func (a * AddressBook ) addAddr (key string , addr * knownAddress ) {
119
122
newItemIndex := len (a .addrs )
120
123
121
124
a .addrs = append (a .addrs , addr )
0 commit comments