@@ -100,11 +100,12 @@ type Server struct {
100
100
101
101
ourHandshake * protoHandshake
102
102
103
- lock sync.RWMutex // protects running, peers and the trust fields
104
- running bool
105
- peers map [discover.NodeID ]* Peer
106
- statics map [discover.NodeID ]* discover.Node // Map of currently static remote nodes
107
- staticDial chan * discover.Node // Dial request channel reserved for the static nodes
103
+ lock sync.RWMutex // protects running, peers and the trust fields
104
+ running bool
105
+ peers map [discover.NodeID ]* Peer
106
+ staticNodes map [discover.NodeID ]* discover.Node // Map of currently maintained static remote nodes
107
+ staticDial chan * discover.Node // Dial request channel reserved for the static nodes
108
+ staticCycle time.Duration // Overrides staticPeerCheckInterval, used for testing
108
109
109
110
ntab * discover.Table
110
111
listener net.Listener
@@ -144,7 +145,7 @@ func (srv *Server) AddPeer(node *discover.Node) {
144
145
srv .lock .Lock ()
145
146
defer srv .lock .Unlock ()
146
147
147
- srv .statics [node .ID ] = node
148
+ srv .staticNodes [node .ID ] = node
148
149
}
149
150
150
151
// Broadcast sends an RLP-encoded message to all connected peers.
@@ -207,9 +208,9 @@ func (srv *Server) Start() (err error) {
207
208
srv .peers = make (map [discover.NodeID ]* Peer )
208
209
209
210
// Create the current trust map, and the associated dialing channel
210
- srv .statics = make (map [discover.NodeID ]* discover.Node )
211
+ srv .staticNodes = make (map [discover.NodeID ]* discover.Node )
211
212
for _ , node := range srv .StaticNodes {
212
- srv .statics [node .ID ] = node
213
+ srv .staticNodes [node .ID ] = node
213
214
}
214
215
srv .staticDial = make (chan * discover.Node )
215
216
@@ -345,17 +346,23 @@ func (srv *Server) listenLoop() {
345
346
// staticNodesLoop is responsible for periodically checking that static
346
347
// connections are actually live, and requests dialing if not.
347
348
func (srv * Server ) staticNodesLoop () {
348
- tick := time .Tick (staticPeerCheckInterval )
349
+ // Create a default maintenance ticker, but override it requested
350
+ cycle := staticPeerCheckInterval
351
+ if srv .staticCycle != 0 {
352
+ cycle = srv .staticCycle
353
+ }
354
+ tick := time .NewTicker (cycle )
355
+
349
356
for {
350
357
select {
351
358
case <- srv .quit :
352
359
return
353
360
354
- case <- tick :
361
+ case <- tick . C :
355
362
// Collect all the non-connected static nodes
356
363
needed := []* discover.Node {}
357
364
srv .lock .RLock ()
358
- for id , node := range srv .statics {
365
+ for id , node := range srv .staticNodes {
359
366
if _ , ok := srv .peers [id ]; ! ok {
360
367
needed = append (needed , node )
361
368
}
@@ -473,7 +480,7 @@ func (srv *Server) startPeer(fd net.Conn, dest *discover.Node) {
473
480
srv .lock .RLock ()
474
481
atcap := len (srv .peers ) == srv .MaxPeers
475
482
if dest != nil {
476
- if _ , ok := srv .statics [dest .ID ]; ok {
483
+ if _ , ok := srv .staticNodes [dest .ID ]; ok {
477
484
atcap = false
478
485
}
479
486
}
@@ -536,7 +543,7 @@ func (srv *Server) addPeer(id discover.NodeID, p *Peer) (bool, DiscReason) {
536
543
// in the pool, or if it's of no use.
537
544
func (srv * Server ) checkPeer (id discover.NodeID ) (bool , DiscReason ) {
538
545
// First up, figure out if the peer is static
539
- _ , static := srv .statics [id ]
546
+ _ , static := srv .staticNodes [id ]
540
547
541
548
// Make sure the peer passes all required checks
542
549
switch {
0 commit comments