Skip to content

Commit 66dbc52

Browse files
committed
Include message type in MessageError::Length
1 parent 2997b39 commit 66dbc52

File tree

1 file changed

+32
-32
lines changed

1 file changed

+32
-32
lines changed

src/peer/messages.rs

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -336,93 +336,94 @@ impl TryFrom<Bytes> for CoreMessage {
336336
let Ok(msg_type) = buf.try_get::<u8>() else {
337337
return Ok(CoreMessage::Keepalive);
338338
};
339+
let errmap = &|source| MessageError::Length { msg_type, source };
339340
match msg_type {
340341
0 => {
341-
buf.eof()?;
342+
buf.eof().map_err(errmap)?;
342343
Ok(CoreMessage::Choke)
343344
}
344345
1 => {
345-
buf.eof()?;
346+
buf.eof().map_err(errmap)?;
346347
Ok(CoreMessage::Unchoke)
347348
}
348349
2 => {
349-
buf.eof()?;
350+
buf.eof().map_err(errmap)?;
350351
Ok(CoreMessage::Interested)
351352
}
352353
3 => {
353-
buf.eof()?;
354+
buf.eof().map_err(errmap)?;
354355
Ok(CoreMessage::NotInterested)
355356
}
356357
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)?;
359360
Ok(CoreMessage::Have { piece })
360361
}
361362
5 => Ok(CoreMessage::Bitfield(buf.remainder())),
362363
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)?;
367368
Ok(CoreMessage::Request {
368369
index,
369370
begin,
370371
length,
371372
})
372373
}
373374
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)?;
376377
let data = buf.remainder();
377378
Ok(CoreMessage::Piece { index, begin, data })
378379
}
379380
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)?;
384385
Ok(CoreMessage::Cancel {
385386
index,
386387
begin,
387388
length,
388389
})
389390
}
390391
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)?;
393394
Ok(CoreMessage::Port { port })
394395
}
395396
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)?;
398399
Ok(CoreMessage::Suggest { index })
399400
}
400401
0x0E => {
401-
buf.eof()?;
402+
buf.eof().map_err(errmap)?;
402403
Ok(CoreMessage::HaveAll)
403404
}
404405
0x0F => {
405-
buf.eof()?;
406+
buf.eof().map_err(errmap)?;
406407
Ok(CoreMessage::HaveNone)
407408
}
408409
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)?;
413414
Ok(CoreMessage::Reject {
414415
index,
415416
begin,
416417
length,
417418
})
418419
}
419420
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)?;
422423
Ok(CoreMessage::AllowedFast { index })
423424
}
424425
0x14 => {
425-
let msg_id = buf.try_get::<u8>()?;
426+
let msg_id = buf.try_get::<u8>().map_err(errmap)?;
426427
let payload = buf.remainder();
427428
Ok(CoreMessage::Extended { msg_id, payload })
428429
}
@@ -776,9 +777,8 @@ impl TryFrom<Bytes> for MetadataMessage {
776777
pub(crate) enum MessageError {
777778
#[error("unknown message type: {0}")]
778779
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 },
782782
#[error("unknown extended message ID: {0}")]
783783
UnknownExtended(u8),
784784
#[error("failed to decode extended handshake payload")]

0 commit comments

Comments
 (0)