|
|
@@ -111,10 +111,11 @@ func (server *Server) run() {
|
|
|
|
|
|
fmt.Printf("Started P2P networking, self: %v.\n", server.localnode.Node().URLv4())
|
|
|
|
|
|
- //var (
|
|
|
- // peers = make(map[enode.ID]*Peer)
|
|
|
- // inboundCount = 0
|
|
|
- //)
|
|
|
+ var (
|
|
|
+ peers = make(map[enode.ID]*Peer)
|
|
|
+ inboundCount = 0
|
|
|
+ )
|
|
|
+
|
|
|
running:
|
|
|
for {
|
|
|
select {
|
|
|
@@ -123,14 +124,31 @@ running:
|
|
|
|
|
|
break running
|
|
|
case c := <-server.checkpointPostHandshake:
|
|
|
- p := server.launchPeer(c)
|
|
|
- fmt.Printf("launchPeer: %v\n", p.rw.node.IP())
|
|
|
+ //p := server.launchPeer(c)
|
|
|
+ //fmt.Printf("Check peer in local: %v\n", p.rw.node.IP())
|
|
|
+
|
|
|
+ c.cont <- server.postHandshakeChecks(peers, inboundCount, c)
|
|
|
case c := <-server.checkpointAddPeer:
|
|
|
fmt.Printf("checkpointAddPeer: %v.\n", c.name)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func (server *Server) postHandshakeChecks(peers map[enode.ID]*Peer, inboundCount int, c *conn) error {
|
|
|
+ switch {
|
|
|
+ case !c.is(trustedConn) && len(peers) >= server.MaxPeers:
|
|
|
+ return DiscTooManyPeers
|
|
|
+ //case !c.is(trustedConn) && c.is(inboundConn) && inboundCount >= server.maxInboundConns():
|
|
|
+ // return DiscTooManyPeers
|
|
|
+ case peers[c.node.ID()] != nil:
|
|
|
+ return DiscAlreadyConnected
|
|
|
+ case c.node.ID() == server.localnode.ID():
|
|
|
+ return DiscSelf
|
|
|
+ default:
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func (server *Server) launchPeer(c *conn) *Peer {
|
|
|
p := newPeer(c, server.Protocols)
|
|
|
// ❌ 首先完成eth协议,封装在在eth/protocols/eth/handler.go
|
|
|
@@ -434,7 +452,7 @@ func (server *Server) setupConn(c *conn, dialDest *enode.Node) error {
|
|
|
return err
|
|
|
}
|
|
|
c.caps, c.name = phs.Caps, phs.Name
|
|
|
- //fmt.Printf("Handshake ok, id: %v, addr: %v.\n", c.node.ID(), c.fd.RemoteAddr())
|
|
|
+ fmt.Printf("Handshake ok, id: %v, addr: %v.\n", c.node.ID(), c.fd.RemoteAddr())
|
|
|
|
|
|
// 握手成功后将此链接放入addPeer的检查点
|
|
|
err = server.checkpoint(c, server.checkpointAddPeer)
|