server.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package p2p
  2. import (
  3. "blockchain-go/log"
  4. "blockchain-go/p2p/enode"
  5. "errors"
  6. "net"
  7. "sync"
  8. )
  9. var (
  10. ErrServerStopped = errors.New("server stopped")
  11. )
  12. // Server manages all peer connections.
  13. type Server struct {
  14. // Config fields may not be modified while the server is running.
  15. Config
  16. // Hooks for testing. These are useful because we can inhibit
  17. // the whole protocol stack.
  18. //newTransport func(net.Conn, *ecdsa.PublicKey) transport
  19. //newPeerHook func(*Peer)
  20. listenFunc func(network, addr string) (net.Listener, error)
  21. lock sync.Mutex // protects running
  22. running bool
  23. listener net.Listener
  24. //ourHandshake *protoHandshake
  25. loopWG sync.WaitGroup // loop, listenLoop
  26. //peerFeed event.Feed
  27. log log.Logger
  28. nodedb *enode.DB
  29. localnode *enode.LocalNode
  30. //ntab *discover.UDPv4
  31. //DiscV5 *discover.UDPv5
  32. discmix *enode.FairMix
  33. //dialsched *dialScheduler
  34. // Channels into the run loop.
  35. quit chan struct{}
  36. addtrusted chan *enode.Node
  37. removetrusted chan *enode.Node
  38. //peerOp chan peerOpFunc
  39. peerOpDone chan struct{}
  40. delpeer chan peerDrop
  41. checkpointPostHandshake chan *conn
  42. checkpointAddPeer chan *conn
  43. // State of run loop and listenLoop.
  44. //inboundHistory expHeap
  45. }
  46. //type peerOpFunc func(map[enode.ID]*Peer)
  47. type peerDrop struct {
  48. *Peer
  49. err error
  50. requested bool // true if signaled by the peer
  51. }