|
|
|
@ -42,6 +42,9 @@ type LesServer struct { |
|
|
|
|
fcManager *flowcontrol.ClientManager // nil if our node is client only
|
|
|
|
|
fcCostStats *requestCostStats |
|
|
|
|
defParams *flowcontrol.ServerParams |
|
|
|
|
srvr *p2p.Server |
|
|
|
|
synced, stopped bool |
|
|
|
|
lock sync.Mutex |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error) { |
|
|
|
@ -67,12 +70,35 @@ func (s *LesServer) Protocols() []p2p.Protocol { |
|
|
|
|
return s.protocolManager.SubProtocols |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Start only starts the actual service if the ETH protocol has already been synced,
|
|
|
|
|
// otherwise it will be started by Synced()
|
|
|
|
|
func (s *LesServer) Start(srvr *p2p.Server) { |
|
|
|
|
s.protocolManager.Start(srvr) |
|
|
|
|
s.lock.Lock() |
|
|
|
|
defer s.lock.Unlock() |
|
|
|
|
|
|
|
|
|
s.srvr = srvr |
|
|
|
|
if s.synced { |
|
|
|
|
s.protocolManager.Start(s.srvr) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Synced notifies the server that the ETH protocol has been synced and LES service can be started
|
|
|
|
|
func (s *LesServer) Synced() { |
|
|
|
|
s.lock.Lock() |
|
|
|
|
defer s.lock.Unlock() |
|
|
|
|
|
|
|
|
|
s.synced = true |
|
|
|
|
if s.srvr != nil && !s.stopped { |
|
|
|
|
s.protocolManager.Start(s.srvr) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Stop stops the LES service
|
|
|
|
|
func (s *LesServer) Stop() { |
|
|
|
|
s.lock.Lock() |
|
|
|
|
defer s.lock.Unlock() |
|
|
|
|
|
|
|
|
|
s.stopped = true |
|
|
|
|
s.fcCostStats.store() |
|
|
|
|
s.fcManager.Stop() |
|
|
|
|
go func() { |
|
|
|
|