@@ -336,93 +336,94 @@ impl TryFrom<Bytes> for CoreMessage {
336
336
let Ok ( msg_type) = buf. try_get :: < u8 > ( ) else {
337
337
return Ok ( CoreMessage :: Keepalive ) ;
338
338
} ;
339
+ let errmap = & |source| MessageError :: Length { msg_type, source } ;
339
340
match msg_type {
340
341
0 => {
341
- buf. eof ( ) ?;
342
+ buf. eof ( ) . map_err ( errmap ) ?;
342
343
Ok ( CoreMessage :: Choke )
343
344
}
344
345
1 => {
345
- buf. eof ( ) ?;
346
+ buf. eof ( ) . map_err ( errmap ) ?;
346
347
Ok ( CoreMessage :: Unchoke )
347
348
}
348
349
2 => {
349
- buf. eof ( ) ?;
350
+ buf. eof ( ) . map_err ( errmap ) ?;
350
351
Ok ( CoreMessage :: Interested )
351
352
}
352
353
3 => {
353
- buf. eof ( ) ?;
354
+ buf. eof ( ) . map_err ( errmap ) ?;
354
355
Ok ( CoreMessage :: NotInterested )
355
356
}
356
357
4 => {
357
- let piece = buf. try_get :: < u32 > ( ) ?;
358
- buf. eof ( ) ?;
358
+ let piece = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
359
+ buf. eof ( ) . map_err ( errmap ) ?;
359
360
Ok ( CoreMessage :: Have { piece } )
360
361
}
361
362
5 => Ok ( CoreMessage :: Bitfield ( buf. remainder ( ) ) ) ,
362
363
6 => {
363
- let index = buf. try_get :: < u32 > ( ) ?;
364
- let begin = buf. try_get :: < u32 > ( ) ?;
365
- let length = buf. try_get :: < u32 > ( ) ?;
366
- buf. eof ( ) ?;
364
+ let index = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
365
+ let begin = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
366
+ let length = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
367
+ buf. eof ( ) . map_err ( errmap ) ?;
367
368
Ok ( CoreMessage :: Request {
368
369
index,
369
370
begin,
370
371
length,
371
372
} )
372
373
}
373
374
7 => {
374
- let index = buf. try_get :: < u32 > ( ) ?;
375
- let begin = buf. try_get :: < u32 > ( ) ?;
375
+ let index = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
376
+ let begin = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
376
377
let data = buf. remainder ( ) ;
377
378
Ok ( CoreMessage :: Piece { index, begin, data } )
378
379
}
379
380
8 => {
380
- let index = buf. try_get :: < u32 > ( ) ?;
381
- let begin = buf. try_get :: < u32 > ( ) ?;
382
- let length = buf. try_get :: < u32 > ( ) ?;
383
- buf. eof ( ) ?;
381
+ let index = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
382
+ let begin = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
383
+ let length = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
384
+ buf. eof ( ) . map_err ( errmap ) ?;
384
385
Ok ( CoreMessage :: Cancel {
385
386
index,
386
387
begin,
387
388
length,
388
389
} )
389
390
}
390
391
9 => {
391
- let port = buf. try_get :: < u16 > ( ) ?;
392
- buf. eof ( ) ?;
392
+ let port = buf. try_get :: < u16 > ( ) . map_err ( errmap ) ?;
393
+ buf. eof ( ) . map_err ( errmap ) ?;
393
394
Ok ( CoreMessage :: Port { port } )
394
395
}
395
396
0x0D => {
396
- let index = buf. try_get :: < u32 > ( ) ?;
397
- buf. eof ( ) ?;
397
+ let index = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
398
+ buf. eof ( ) . map_err ( errmap ) ?;
398
399
Ok ( CoreMessage :: Suggest { index } )
399
400
}
400
401
0x0E => {
401
- buf. eof ( ) ?;
402
+ buf. eof ( ) . map_err ( errmap ) ?;
402
403
Ok ( CoreMessage :: HaveAll )
403
404
}
404
405
0x0F => {
405
- buf. eof ( ) ?;
406
+ buf. eof ( ) . map_err ( errmap ) ?;
406
407
Ok ( CoreMessage :: HaveNone )
407
408
}
408
409
0x10 => {
409
- let index = buf. try_get :: < u32 > ( ) ?;
410
- let begin = buf. try_get :: < u32 > ( ) ?;
411
- let length = buf. try_get :: < u32 > ( ) ?;
412
- buf. eof ( ) ?;
410
+ let index = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
411
+ let begin = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
412
+ let length = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
413
+ buf. eof ( ) . map_err ( errmap ) ?;
413
414
Ok ( CoreMessage :: Reject {
414
415
index,
415
416
begin,
416
417
length,
417
418
} )
418
419
}
419
420
0x11 => {
420
- let index = buf. try_get :: < u32 > ( ) ?;
421
- buf. eof ( ) ?;
421
+ let index = buf. try_get :: < u32 > ( ) . map_err ( errmap ) ?;
422
+ buf. eof ( ) . map_err ( errmap ) ?;
422
423
Ok ( CoreMessage :: AllowedFast { index } )
423
424
}
424
425
0x14 => {
425
- let msg_id = buf. try_get :: < u8 > ( ) ?;
426
+ let msg_id = buf. try_get :: < u8 > ( ) . map_err ( errmap ) ?;
426
427
let payload = buf. remainder ( ) ;
427
428
Ok ( CoreMessage :: Extended { msg_id, payload } )
428
429
}
@@ -776,9 +777,8 @@ impl TryFrom<Bytes> for MetadataMessage {
776
777
pub ( crate ) enum MessageError {
777
778
#[ error( "unknown message type: {0}" ) ]
778
779
Unknown ( u8 ) ,
779
- #[ error( "message had invalid length" ) ]
780
- // TODO: Should this include information on the kind of message?
781
- Length ( #[ from] PacketError ) ,
780
+ #[ error( "message type {msg_type:#4x} had invalid length" ) ]
781
+ Length { msg_type : u8 , source : PacketError } ,
782
782
#[ error( "unknown extended message ID: {0}" ) ]
783
783
UnknownExtended ( u8 ) ,
784
784
#[ error( "failed to decode extended handshake payload" ) ]
0 commit comments