mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-01 10:15:31 +00:00
aquatic_ws: save peer even if AnnounceRequest.bytes_left is None
This commit is contained in:
parent
008d8b8eff
commit
cb66364fa5
3 changed files with 34 additions and 36 deletions
|
|
@ -37,11 +37,11 @@ impl PeerStatus {
|
|||
#[inline]
|
||||
pub fn from_event_and_bytes_left(
|
||||
event: AnnounceEvent,
|
||||
bytes_left: usize
|
||||
opt_bytes_left: Option<usize>
|
||||
) -> Self {
|
||||
if let AnnounceEvent::Stopped = event {
|
||||
Self::Stopped
|
||||
} else if bytes_left == 0 {
|
||||
} else if let Some(0) = opt_bytes_left {
|
||||
Self::Seeding
|
||||
} else {
|
||||
Self::Leeching
|
||||
|
|
|
|||
|
|
@ -109,44 +109,41 @@ pub fn handle_announce_requests(
|
|||
}
|
||||
}
|
||||
|
||||
// FIXME: correct to only update when bytes_left is Some?
|
||||
if let Some(bytes_left) = request.bytes_left {
|
||||
let peer_status = PeerStatus::from_event_and_bytes_left(
|
||||
request.event,
|
||||
bytes_left
|
||||
);
|
||||
let peer_status = PeerStatus::from_event_and_bytes_left(
|
||||
request.event,
|
||||
request.bytes_left
|
||||
);
|
||||
|
||||
let peer = Peer {
|
||||
connection_meta: sender_meta,
|
||||
status: peer_status,
|
||||
valid_until,
|
||||
};
|
||||
let peer = Peer {
|
||||
connection_meta: sender_meta,
|
||||
status: peer_status,
|
||||
valid_until,
|
||||
};
|
||||
|
||||
let opt_removed_peer = match peer_status {
|
||||
PeerStatus::Leeching => {
|
||||
torrent_data.num_leechers += 1;
|
||||
let opt_removed_peer = match peer_status {
|
||||
PeerStatus::Leeching => {
|
||||
torrent_data.num_leechers += 1;
|
||||
|
||||
torrent_data.peers.insert(peer_id, peer)
|
||||
},
|
||||
PeerStatus::Seeding => {
|
||||
torrent_data.num_seeders += 1;
|
||||
torrent_data.peers.insert(peer_id, peer)
|
||||
},
|
||||
PeerStatus::Seeding => {
|
||||
torrent_data.num_seeders += 1;
|
||||
|
||||
torrent_data.peers.insert(peer_id, peer)
|
||||
},
|
||||
PeerStatus::Stopped => {
|
||||
torrent_data.peers.remove(&peer_id)
|
||||
}
|
||||
};
|
||||
|
||||
match opt_removed_peer.map(|peer| peer.status){
|
||||
Some(PeerStatus::Leeching) => {
|
||||
torrent_data.num_leechers -= 1;
|
||||
},
|
||||
Some(PeerStatus::Seeding) => {
|
||||
torrent_data.num_seeders -= 1;
|
||||
},
|
||||
_ => {}
|
||||
torrent_data.peers.insert(peer_id, peer)
|
||||
},
|
||||
PeerStatus::Stopped => {
|
||||
torrent_data.peers.remove(&peer_id)
|
||||
}
|
||||
};
|
||||
|
||||
match opt_removed_peer.map(|peer| peer.status){
|
||||
Some(PeerStatus::Leeching) => {
|
||||
torrent_data.num_leechers -= 1;
|
||||
},
|
||||
Some(PeerStatus::Seeding) => {
|
||||
torrent_data.num_seeders -= 1;
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
|
||||
// If peer sent offers, send them on to random peers
|
||||
|
|
|
|||
|
|
@ -103,7 +103,8 @@ pub struct AnnounceRequestOffer {
|
|||
pub struct AnnounceRequest {
|
||||
pub info_hash: InfoHash,
|
||||
pub peer_id: PeerId,
|
||||
/// Just called "left" in protocol
|
||||
/// Just called "left" in protocol. Is set to None in some cases, such as
|
||||
/// when opening a magnet link
|
||||
#[serde(rename = "left")]
|
||||
pub bytes_left: Option<usize>,
|
||||
/// Can be empty. Then, default is "update"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue