@@ -65,7 +65,7 @@ func newClientHandler(ulcServers []string, ulcFraction int, checkpoint *params.T
65
65
}
66
66
handler .fetcher = newLightFetcher (handler )
67
67
handler .downloader = downloader .New (height , backend .chainDb , nil , backend .eventMux , nil , backend .blockchain , handler .removePeer )
68
- handler .backend .peers .notify ((* downloaderPeerNotify )(handler ))
68
+ handler .backend .peers .subscribe ((* downloaderPeerNotify )(handler ))
69
69
return handler
70
70
}
71
71
@@ -82,7 +82,8 @@ func (h *clientHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter)
82
82
if h .ulc != nil {
83
83
trusted = h .ulc .trusted (p .ID ())
84
84
}
85
- peer := newPeer (int (version ), h .backend .config .NetworkId , trusted , p , newMeteredMsgWriter (rw , int (version )))
85
+ peer := newServerPeer (int (version ), h .backend .config .NetworkId , trusted , p , newMeteredMsgWriter (rw , int (version )))
86
+ defer peer .close ()
86
87
peer .poolEntry = h .backend .serverPool .connect (peer , peer .Node ())
87
88
if peer .poolEntry == nil {
88
89
return p2p .DiscRequested
@@ -94,8 +95,8 @@ func (h *clientHandler) runPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter)
94
95
return err
95
96
}
96
97
97
- func (h * clientHandler ) handle (p * peer ) error {
98
- if h .backend .peers .Len () >= h .backend .config .LightPeers && ! p .Peer .Info ().Network .Trusted {
98
+ func (h * clientHandler ) handle (p * serverPeer ) error {
99
+ if h .backend .peers .len () >= h .backend .config .LightPeers && ! p .Peer .Info ().Network .Trusted {
99
100
return p2p .DiscTooManyPeers
100
101
}
101
102
p .Log ().Debug ("Light Ethereum peer connected" , "name" , p .Name ())
@@ -112,20 +113,20 @@ func (h *clientHandler) handle(p *peer) error {
112
113
return err
113
114
}
114
115
// Register the peer locally
115
- if err := h .backend .peers .Register (p ); err != nil {
116
+ if err := h .backend .peers .register (p ); err != nil {
116
117
p .Log ().Error ("Light Ethereum peer registration failed" , "err" , err )
117
118
return err
118
119
}
119
- serverConnectionGauge .Update (int64 (h .backend .peers .Len ()))
120
+ serverConnectionGauge .Update (int64 (h .backend .peers .len ()))
120
121
121
122
connectedAt := mclock .Now ()
122
123
defer func () {
123
- h .backend .peers .Unregister (p .id )
124
+ h .backend .peers .unregister (p .id )
124
125
connectionTimer .Update (time .Duration (mclock .Now () - connectedAt ))
125
- serverConnectionGauge .Update (int64 (h .backend .peers .Len ()))
126
+ serverConnectionGauge .Update (int64 (h .backend .peers .len ()))
126
127
}()
127
128
128
- h .fetcher .announce (p , p .headInfo )
129
+ h .fetcher .announce (p , & announceData { Hash : p .headInfo . Hash , Number : p . headInfo . Number , Td : p . headInfo . Td } )
129
130
130
131
// pool entry can be nil during the unit test.
131
132
if p .poolEntry != nil {
@@ -143,7 +144,7 @@ func (h *clientHandler) handle(p *peer) error {
143
144
144
145
// handleMsg is invoked whenever an inbound message is received from a remote
145
146
// peer. The remote connection is torn down upon returning any error.
146
- func (h * clientHandler ) handleMsg (p * peer ) error {
147
+ func (h * clientHandler ) handleMsg (p * serverPeer ) error {
147
148
// Read the next message from the remote peer, and ensure it's fully consumed
148
149
msg , err := p .rw .ReadMsg ()
149
150
if err != nil {
@@ -297,7 +298,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
297
298
Obj : resp .Status ,
298
299
}
299
300
case StopMsg :
300
- p .freezeServer ( true )
301
+ p .freeze ( )
301
302
h .backend .retriever .frozen (p )
302
303
p .Log ().Debug ("Service stopped" )
303
304
case ResumeMsg :
@@ -306,7 +307,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
306
307
return errResp (ErrDecode , "msg %v: %v" , msg , err )
307
308
}
308
309
p .fcServer .ResumeFreeze (bv )
309
- p .freezeServer ( false )
310
+ p .unfreeze ( )
310
311
p .Log ().Debug ("Service resumed" )
311
312
default :
312
313
p .Log ().Trace ("Received invalid message" , "code" , msg .Code )
@@ -315,8 +316,8 @@ func (h *clientHandler) handleMsg(p *peer) error {
315
316
// Deliver the received response to retriever.
316
317
if deliverMsg != nil {
317
318
if err := h .backend .retriever .deliver (p , deliverMsg ); err != nil {
318
- p .responseErrors ++
319
- if p .responseErrors > maxResponseErrors {
319
+ p .errCount ++
320
+ if p .errCount > maxResponseErrors {
320
321
return err
321
322
}
322
323
}
@@ -325,12 +326,12 @@ func (h *clientHandler) handleMsg(p *peer) error {
325
326
}
326
327
327
328
func (h * clientHandler ) removePeer (id string ) {
328
- h .backend .peers .Unregister (id )
329
+ h .backend .peers .unregister (id )
329
330
}
330
331
331
332
type peerConnection struct {
332
333
handler * clientHandler
333
- peer * peer
334
+ peer * serverPeer
334
335
}
335
336
336
337
func (pc * peerConnection ) Head () (common.Hash , * big.Int ) {
@@ -340,18 +341,18 @@ func (pc *peerConnection) Head() (common.Hash, *big.Int) {
340
341
func (pc * peerConnection ) RequestHeadersByHash (origin common.Hash , amount int , skip int , reverse bool ) error {
341
342
rq := & distReq {
342
343
getCost : func (dp distPeer ) uint64 {
343
- peer := dp .(* peer )
344
- return peer .GetRequestCost (GetBlockHeadersMsg , amount )
344
+ peer := dp .(* serverPeer )
345
+ return peer .getRequestCost (GetBlockHeadersMsg , amount )
345
346
},
346
347
canSend : func (dp distPeer ) bool {
347
- return dp .(* peer ) == pc .peer
348
+ return dp .(* serverPeer ) == pc .peer
348
349
},
349
350
request : func (dp distPeer ) func () {
350
351
reqID := genReqID ()
351
- peer := dp .(* peer )
352
- cost := peer .GetRequestCost (GetBlockHeadersMsg , amount )
352
+ peer := dp .(* serverPeer )
353
+ cost := peer .getRequestCost (GetBlockHeadersMsg , amount )
353
354
peer .fcServer .QueuedRequest (reqID , cost )
354
- return func () { peer .RequestHeadersByHash (reqID , cost , origin , amount , skip , reverse ) }
355
+ return func () { peer .requestHeadersByHash (reqID , origin , amount , skip , reverse ) }
355
356
},
356
357
}
357
358
_ , ok := <- pc .handler .backend .reqDist .queue (rq )
@@ -364,18 +365,18 @@ func (pc *peerConnection) RequestHeadersByHash(origin common.Hash, amount int, s
364
365
func (pc * peerConnection ) RequestHeadersByNumber (origin uint64 , amount int , skip int , reverse bool ) error {
365
366
rq := & distReq {
366
367
getCost : func (dp distPeer ) uint64 {
367
- peer := dp .(* peer )
368
- return peer .GetRequestCost (GetBlockHeadersMsg , amount )
368
+ peer := dp .(* serverPeer )
369
+ return peer .getRequestCost (GetBlockHeadersMsg , amount )
369
370
},
370
371
canSend : func (dp distPeer ) bool {
371
- return dp .(* peer ) == pc .peer
372
+ return dp .(* serverPeer ) == pc .peer
372
373
},
373
374
request : func (dp distPeer ) func () {
374
375
reqID := genReqID ()
375
- peer := dp .(* peer )
376
- cost := peer .GetRequestCost (GetBlockHeadersMsg , amount )
376
+ peer := dp .(* serverPeer )
377
+ cost := peer .getRequestCost (GetBlockHeadersMsg , amount )
377
378
peer .fcServer .QueuedRequest (reqID , cost )
378
- return func () { peer .RequestHeadersByNumber (reqID , cost , origin , amount , skip , reverse ) }
379
+ return func () { peer .requestHeadersByNumber (reqID , origin , amount , skip , reverse ) }
379
380
},
380
381
}
381
382
_ , ok := <- pc .handler .backend .reqDist .queue (rq )
@@ -388,7 +389,7 @@ func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip
388
389
// downloaderPeerNotify implements peerSetNotify
389
390
type downloaderPeerNotify clientHandler
390
391
391
- func (d * downloaderPeerNotify ) registerPeer (p * peer ) {
392
+ func (d * downloaderPeerNotify ) registerPeer (p * serverPeer ) {
392
393
h := (* clientHandler )(d )
393
394
pc := & peerConnection {
394
395
handler : h ,
@@ -397,7 +398,7 @@ func (d *downloaderPeerNotify) registerPeer(p *peer) {
397
398
h .downloader .RegisterLightPeer (p .id , ethVersion , pc )
398
399
}
399
400
400
- func (d * downloaderPeerNotify ) unregisterPeer (p * peer ) {
401
+ func (d * downloaderPeerNotify ) unregisterPeer (p * serverPeer ) {
401
402
h := (* clientHandler )(d )
402
403
h .downloader .UnregisterPeer (p .id )
403
404
}
0 commit comments