server.go 1.4 KB

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