|
|
|
@ -518,7 +518,7 @@ func (srv *Server) startPeer(fd net.Conn, dest *discover.Node) { |
|
|
|
|
conn: fd, rtimeout: frameReadTimeout, wtimeout: frameWriteTimeout, |
|
|
|
|
} |
|
|
|
|
p := newPeer(fd, conn, srv.Protocols) |
|
|
|
|
if ok, reason := srv.addPeer(conn.ID, p); !ok { |
|
|
|
|
if ok, reason := srv.addPeer(conn, p); !ok { |
|
|
|
|
glog.V(logger.Detail).Infof("Not adding %v (%v)\n", p, reason) |
|
|
|
|
p.politeDisconnect(reason) |
|
|
|
|
srv.peerWG.Done() |
|
|
|
@ -564,13 +564,18 @@ func (srv *Server) runPeer(p *Peer) { |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (srv *Server) addPeer(id discover.NodeID, p *Peer) (bool, DiscReason) { |
|
|
|
|
func (srv *Server) addPeer(conn *conn, p *Peer) (bool, DiscReason) { |
|
|
|
|
// drop connections with no matching protocols.
|
|
|
|
|
if len(srv.Protocols) > 0 && countMatchingProtocols(srv.Protocols, conn.protoHandshake.Caps) == 0 { |
|
|
|
|
return false, DiscUselessPeer |
|
|
|
|
} |
|
|
|
|
// add the peer if it passes the other checks.
|
|
|
|
|
srv.lock.Lock() |
|
|
|
|
defer srv.lock.Unlock() |
|
|
|
|
if ok, reason := srv.checkPeer(id); !ok { |
|
|
|
|
if ok, reason := srv.checkPeer(conn.ID); !ok { |
|
|
|
|
return false, reason |
|
|
|
|
} |
|
|
|
|
srv.peers[id] = p |
|
|
|
|
srv.peers[conn.ID] = p |
|
|
|
|
return true, 0 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|