@@ -23,6 +23,7 @@ import (
23
23
24
24
"github.com/ethereum/go-ethereum/common"
25
25
"github.com/ethereum/go-ethereum/common/mclock"
26
+ "github.com/ethereum/go-ethereum/core/forkid"
26
27
"github.com/ethereum/go-ethereum/core/types"
27
28
"github.com/ethereum/go-ethereum/eth/downloader"
28
29
"github.com/ethereum/go-ethereum/light"
@@ -35,6 +36,7 @@ import (
35
36
// responses.
36
37
type clientHandler struct {
37
38
ulc * ulc
39
+ forkFilter forkid.Filter
38
40
checkpoint * params.TrustedCheckpoint
39
41
fetcher * lightFetcher
40
42
downloader * downloader.Downloader
@@ -47,6 +49,7 @@ type clientHandler struct {
47
49
48
50
func newClientHandler (ulcServers []string , ulcFraction int , checkpoint * params.TrustedCheckpoint , backend * LightEthereum ) * clientHandler {
49
51
handler := & clientHandler {
52
+ forkFilter : forkid .NewFilter (backend .blockchain ),
50
53
checkpoint : checkpoint ,
51
54
backend : backend ,
52
55
closeCh : make (chan struct {}),
@@ -107,7 +110,7 @@ func (h *clientHandler) handle(p *peer) error {
107
110
number = head .Number .Uint64 ()
108
111
td = h .backend .blockchain .GetTd (hash , number )
109
112
)
110
- if err := p .Handshake (td , hash , number , h .backend .blockchain .Genesis ().Hash (), nil ); err != nil {
113
+ if err := p .handshakeWithServer (td , hash , number , h .backend .blockchain .Genesis ().Hash (), forkid . NewID ( h . backend . blockchain ), h . forkFilter ); err != nil {
111
114
p .Log ().Debug ("Light Ethereum handshake failed" , "err" , err )
112
115
return err
113
116
}
@@ -159,8 +162,8 @@ func (h *clientHandler) handleMsg(p *peer) error {
159
162
var deliverMsg * Msg
160
163
161
164
// Handle the message depending on its contents
162
- switch msg . Code {
163
- case AnnounceMsg :
165
+ switch {
166
+ case msg . Code == AnnounceMsg :
164
167
p .Log ().Trace ("Received announce message" )
165
168
var req announceData
166
169
if err := msg .Decode (& req ); err != nil {
@@ -189,7 +192,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
189
192
p .Log ().Trace ("Announce message content" , "number" , req .Number , "hash" , req .Hash , "td" , req .Td , "reorg" , req .ReorgDepth )
190
193
h .fetcher .announce (p , & req )
191
194
}
192
- case BlockHeadersMsg :
195
+ case msg . Code == BlockHeadersMsg :
193
196
p .Log ().Trace ("Received block header response message" )
194
197
var resp struct {
195
198
ReqID , BV uint64
@@ -206,7 +209,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
206
209
log .Debug ("Failed to deliver headers" , "err" , err )
207
210
}
208
211
}
209
- case BlockBodiesMsg :
212
+ case msg . Code == BlockBodiesMsg :
210
213
p .Log ().Trace ("Received block bodies response" )
211
214
var resp struct {
212
215
ReqID , BV uint64
@@ -221,7 +224,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
221
224
ReqID : resp .ReqID ,
222
225
Obj : resp .Data ,
223
226
}
224
- case CodeMsg :
227
+ case msg . Code == CodeMsg :
225
228
p .Log ().Trace ("Received code response" )
226
229
var resp struct {
227
230
ReqID , BV uint64
@@ -236,7 +239,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
236
239
ReqID : resp .ReqID ,
237
240
Obj : resp .Data ,
238
241
}
239
- case ReceiptsMsg :
242
+ case msg . Code == ReceiptsMsg :
240
243
p .Log ().Trace ("Received receipts response" )
241
244
var resp struct {
242
245
ReqID , BV uint64
@@ -251,7 +254,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
251
254
ReqID : resp .ReqID ,
252
255
Obj : resp .Receipts ,
253
256
}
254
- case ProofsV2Msg :
257
+ case msg . Code == ProofsV2Msg :
255
258
p .Log ().Trace ("Received les/2 proofs response" )
256
259
var resp struct {
257
260
ReqID , BV uint64
@@ -266,7 +269,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
266
269
ReqID : resp .ReqID ,
267
270
Obj : resp .Data ,
268
271
}
269
- case HelperTrieProofsMsg :
272
+ case msg . Code == HelperTrieProofsMsg :
270
273
p .Log ().Trace ("Received helper trie proof response" )
271
274
var resp struct {
272
275
ReqID , BV uint64
@@ -281,7 +284,7 @@ func (h *clientHandler) handleMsg(p *peer) error {
281
284
ReqID : resp .ReqID ,
282
285
Obj : resp .Data ,
283
286
}
284
- case TxStatusMsg :
287
+ case msg . Code == TxStatusMsg :
285
288
p .Log ().Trace ("Received tx status response" )
286
289
var resp struct {
287
290
ReqID , BV uint64
@@ -296,11 +299,11 @@ func (h *clientHandler) handleMsg(p *peer) error {
296
299
ReqID : resp .ReqID ,
297
300
Obj : resp .Status ,
298
301
}
299
- case StopMsg :
302
+ case msg . Code == StopMsg && p . version >= lpv3 :
300
303
p .freezeServer (true )
301
304
h .backend .retriever .frozen (p )
302
305
p .Log ().Debug ("Service stopped" )
303
- case ResumeMsg :
306
+ case msg . Code == ResumeMsg && p . version >= lpv3 :
304
307
var bv uint64
305
308
if err := msg .Decode (& bv ); err != nil {
306
309
return errResp (ErrDecode , "msg %v: %v" , msg , err )
0 commit comments