Skip to main content

BtMessageHandler

Struct BtMessageHandler 

Source
pub struct BtMessageHandler;
Expand description

BT Message Handler for block-level operations

Manages the process of requesting and receiving individual blocks from peers during piece download.

Implementations§

Source§

impl BtMessageHandler

Source

pub async fn request_block( connections: &mut [BtPeerConn], piece_index: u32, block_offset: u32, block_length: u32, ) -> Result<BlockDownloadResult>

Request and receive a single block from available peers

This method implements the core block request/receive loop:

  1. Send the block request to a peer
  2. Wait for the response with timeout
  3. Handle various message types while waiting
  4. Return the block data on success
§Arguments
  • connections - Mutable slice of active peer connections
  • piece_index - The index of the piece this block belongs to
  • block_offset - The byte offset within the piece
  • block_length - The length of this block in bytes
§Returns
  • Ok(BlockDownloadResult) - Result containing success status and data
  • Err(Aria2Error) - If all peers fail to respond
Source

pub async fn download_piece_blocks( connections: &mut [BtPeerConn], piece_index: u32, piece_length: u32, num_blocks: u32, ) -> Result<Vec<u8>>

Download all blocks for a piece with retry logic

Coordinates the download of all blocks that make up a piece, implementing retry logic for failed pieces.

§Arguments
  • connections - Mutable slice of active peer connections
  • piece_index - Index of the piece to download
  • piece_length - Total length of this piece in bytes
  • num_blocks - Number of blocks in this piece
§Returns
  • Ok(Vec<u8>) - Complete piece data if all blocks downloaded successfully
  • Err(Aria2Error) - If piece download fails after all retries
Source

pub async fn download_piece_blocks_endgame( connections: &mut [BtPeerConn], piece_index: u32, piece_length: u32, num_blocks: u32, endgame_state: &mut EndgameState, ) -> Result<Vec<u8>>

Download all blocks for a piece using endgame mode (duplicate request strategy).

In endgame mode, when few pieces remain, we request each block from ALL available peers simultaneously. When any peer responds first, we immediately send Cancel messages to the other peers to stop them from sending redundant data.

§Phase 14 - B1/B2: Endgame Duplicate Request Strategy + Cancel on Block Arrival
§Arguments
  • connections - Mutable slice of active peer connections
  • piece_index - Index of the piece to download
  • piece_length - Total length of this piece in bytes
  • num_blocks - Number of blocks in this piece
  • endgame_state - Mutable reference to EndgameState for tracking duplicate requests
§Returns
  • Ok(Vec<u8>) - Complete piece data if all blocks downloaded successfully
  • Err(Aria2Error) - If piece download fails after all retries

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more