package p2p import ( "blockchain-go/log" "blockchain-go/p2p/enode" "errors" "net" "sync" ) var ( ErrServerStopped = errors.New("server stopped") ) // Server manages all peer connections. type Server struct { // Config fields may not be modified while the server is running. Config // Hooks for testing. These are useful because we can inhibit // the whole protocol stack. //newTransport func(net.Conn, *ecdsa.PublicKey) transport //newPeerHook func(*Peer) listenFunc func(network, addr string) (net.Listener, error) lock sync.Mutex // protects running running bool listener net.Listener //ourHandshake *protoHandshake loopWG sync.WaitGroup // loop, listenLoop //peerFeed event.Feed log log.Logger nodedb *enode.DB localnode *enode.LocalNode //ntab *discover.UDPv4 //DiscV5 *discover.UDPv5 discmix *enode.FairMix //dialsched *dialScheduler // Channels into the run loop. quit chan struct{} addtrusted chan *enode.Node removetrusted chan *enode.Node //peerOp chan peerOpFunc peerOpDone chan struct{} delpeer chan peerDrop checkpointPostHandshake chan *conn checkpointAddPeer chan *conn // State of run loop and listenLoop. //inboundHistory expHeap } //type peerOpFunc func(map[enode.ID]*Peer) type peerDrop struct { *Peer err error requested bool // true if signaled by the peer }