@@ -54,6 +54,7 @@ type addrsReachabilityTracker struct {
54
54
mx sync.Mutex
55
55
reachableAddrs []ma.Multiaddr
56
56
unreachableAddrs []ma.Multiaddr
57
+ unknownAddrs []ma.Multiaddr
57
58
}
58
59
59
60
// newAddrsReachabilityTracker returns a new addrsReachabilityTracker.
@@ -83,10 +84,10 @@ func (r *addrsReachabilityTracker) UpdateAddrs(addrs []ma.Multiaddr) {
83
84
}
84
85
}
85
86
86
- func (r * addrsReachabilityTracker ) ConfirmedAddrs () (reachableAddrs , unreachableAddrs []ma.Multiaddr ) {
87
+ func (r * addrsReachabilityTracker ) ConfirmedAddrs () (reachableAddrs , unreachableAddrs , unknownAddrs []ma.Multiaddr ) {
87
88
r .mx .Lock ()
88
89
defer r .mx .Unlock ()
89
- return slices .Clone (r .reachableAddrs ), slices .Clone (r .unreachableAddrs )
90
+ return slices .Clone (r .reachableAddrs ), slices .Clone (r .unreachableAddrs ), slices . Clone ( r . unknownAddrs )
90
91
}
91
92
92
93
func (r * addrsReachabilityTracker ) Start () error {
@@ -129,7 +130,7 @@ func (r *addrsReachabilityTracker) background() {
129
130
130
131
var task reachabilityTask
131
132
var backoffInterval time.Duration
132
- var currReachable , currUnreachable , prevReachable , prevUnreachable []ma.Multiaddr
133
+ var currReachable , currUnreachable , currUnknown , prevReachable , prevUnreachable , prevUnknown []ma.Multiaddr
133
134
for {
134
135
select {
135
136
case <- probeTicker .C :
@@ -173,12 +174,13 @@ func (r *addrsReachabilityTracker) background() {
173
174
return
174
175
}
175
176
176
- currReachable , currUnreachable = r .appendConfirmedAddrs (currReachable [:0 ], currUnreachable [:0 ])
177
- if areAddrsDifferent (prevReachable , currReachable ) || areAddrsDifferent (prevUnreachable , currUnreachable ) {
177
+ currReachable , currUnreachable , currUnknown = r .appendConfirmedAddrs (currReachable [:0 ], currUnreachable [: 0 ], currUnknown [:0 ])
178
+ if areAddrsDifferent (prevReachable , currReachable ) || areAddrsDifferent (prevUnreachable , currUnreachable ) || areAddrsDifferent ( prevUnknown , currUnknown ) {
178
179
r .notify ()
179
180
}
180
181
prevReachable = append (prevReachable [:0 ], currReachable ... )
181
182
prevUnreachable = append (prevUnreachable [:0 ], currUnreachable ... )
183
+ prevUnknown = append (prevUnknown [:0 ], currUnknown ... )
182
184
if ! nextProbeTime .IsZero () {
183
185
probeTimer .Reset (nextProbeTime .Sub (r .clock .Now ()))
184
186
}
@@ -196,13 +198,14 @@ func newBackoffInterval(current time.Duration) time.Duration {
196
198
return current
197
199
}
198
200
199
- func (r * addrsReachabilityTracker ) appendConfirmedAddrs (reachable , unreachable []ma.Multiaddr ) (reachableAddrs , unreachableAddrs []ma.Multiaddr ) {
200
- reachable , unreachable = r .probeManager .AppendConfirmedAddrs (reachable , unreachable )
201
+ func (r * addrsReachabilityTracker ) appendConfirmedAddrs (reachable , unreachable , unknown []ma.Multiaddr ) (reachableAddrs , unreachableAddrs , unknownAddrs []ma.Multiaddr ) {
202
+ reachable , unreachable , unknown = r .probeManager .AppendConfirmedAddrs (reachable , unreachable , unknown )
201
203
r .mx .Lock ()
202
204
r .reachableAddrs = append (r .reachableAddrs [:0 ], reachable ... )
203
205
r .unreachableAddrs = append (r .unreachableAddrs [:0 ], unreachable ... )
206
+ r .unknownAddrs = append (r .unknownAddrs [:0 ], unknown ... )
204
207
r .mx .Unlock ()
205
- return reachable , unreachable
208
+ return reachable , unreachable , unknown
206
209
}
207
210
208
211
func (r * addrsReachabilityTracker ) notify () {
@@ -381,7 +384,7 @@ func newProbeManager(now func() time.Time) *probeManager {
381
384
}
382
385
383
386
// AppendConfirmedAddrs appends the current confirmed reachable and unreachable addresses.
384
- func (m * probeManager ) AppendConfirmedAddrs (reachable , unreachable []ma.Multiaddr ) (reachableAddrs , unreachableAddrs []ma.Multiaddr ) {
387
+ func (m * probeManager ) AppendConfirmedAddrs (reachable , unreachable , unknown []ma.Multiaddr ) (reachableAddrs , unreachableAddrs , unknownAddrs []ma.Multiaddr ) {
385
388
m .mx .Lock ()
386
389
defer m .mx .Unlock ()
387
390
@@ -393,9 +396,11 @@ func (m *probeManager) AppendConfirmedAddrs(reachable, unreachable []ma.Multiadd
393
396
reachable = append (reachable , a )
394
397
case network .ReachabilityPrivate :
395
398
unreachable = append (unreachable , a )
399
+ case network .ReachabilityUnknown :
400
+ unknown = append (unknown , a )
396
401
}
397
402
}
398
- return reachable , unreachable
403
+ return reachable , unreachable , unknown
399
404
}
400
405
401
406
// UpdateAddrs updates the tracked addrs
0 commit comments