@@ -100,10 +100,9 @@ type Server struct {
100
100
101
101
ourHandshake * protoHandshake
102
102
103
- lock sync.RWMutex // protects running and peers
104
- running bool
105
- peers map [discover.NodeID ]* Peer
106
-
103
+ lock sync.RWMutex // protects running, peers and the trust fields
104
+ running bool
105
+ peers map [discover.NodeID ]* Peer
107
106
trusts map [discover.NodeID ]* discover.Node // Map of currently trusted remote nodes
108
107
trustDial chan * discover.Node // Dial request channel reserved for the trusted nodes
109
108
@@ -138,8 +137,10 @@ func (srv *Server) PeerCount() int {
138
137
return n
139
138
}
140
139
141
- // TrustPeer inserts a node into the list of privileged nodes.
142
- func (srv * Server ) TrustPeer (node * discover.Node ) {
140
+ // AddPeer connects to the given node and maintains the connection until the
141
+ // server is shut down. If the connection fails for any reason, the server will
142
+ // attempt to reconnect the peer.
143
+ func (srv * Server ) AddPeer (node * discover.Node ) {
143
144
srv .lock .Lock ()
144
145
defer srv .lock .Unlock ()
145
146
@@ -246,7 +247,7 @@ func (srv *Server) Start() (err error) {
246
247
glog .V (logger .Warn ).Infoln ("I will be kind-of useless, neither dialing nor listening." )
247
248
}
248
249
// maintain the trusted peers
249
- go srv .trustLoop ()
250
+ go srv .trustedNodesLoop ()
250
251
251
252
srv .running = true
252
253
return nil
@@ -341,16 +342,13 @@ func (srv *Server) listenLoop() {
341
342
}
342
343
}
343
344
344
- // trustLoop is responsible for periodically checking that trusted connections
345
- // are actually live, and requests dialing if not.
346
- func (srv * Server ) trustLoop () {
347
- // Create a ticker for verifying trusted connections
345
+ // trustedNodesLoop is responsible for periodically checking that trusted
346
+ // connections are actually live, and requests dialing if not.
347
+ func (srv * Server ) trustedNodesLoop () {
348
348
tick := time .Tick (trustedPeerCheckInterval )
349
-
350
349
for {
351
350
select {
352
351
case <- srv .quit :
353
- // Termination requested, simple return
354
352
return
355
353
356
354
case <- tick :
@@ -369,10 +367,7 @@ func (srv *Server) trustLoop() {
369
367
glog .V (logger .Debug ).Infof ("Dialing trusted peer %v" , node )
370
368
select {
371
369
case srv .trustDial <- node :
372
- // Ok, dialing
373
-
374
370
case <- srv .quit :
375
- // Terminating, return
376
371
return
377
372
}
378
373
}
@@ -547,16 +542,12 @@ func (srv *Server) checkPeer(id discover.NodeID) (bool, DiscReason) {
547
542
switch {
548
543
case ! srv .running :
549
544
return false , DiscQuitting
550
-
551
545
case ! trusted && len (srv .peers ) >= srv .MaxPeers :
552
546
return false , DiscTooManyPeers
553
-
554
547
case srv .peers [id ] != nil :
555
548
return false , DiscAlreadyConnected
556
-
557
549
case id == srv .ntab .Self ().ID :
558
550
return false , DiscSelf
559
-
560
551
default :
561
552
return true , 0
562
553
}
0 commit comments