mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-02 10:45:30 +00:00
udp: send_response: reduce branching (hopefully)
This commit is contained in:
parent
dcf6ceaec0
commit
5d227428cc
1 changed files with 39 additions and 11 deletions
|
|
@ -76,7 +76,10 @@ impl PendingScrapeResponseSlab {
|
||||||
split_requests
|
split_requests
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_and_get_finished(&mut self, response: PendingScrapeResponse) -> Option<Response> {
|
pub fn add_and_get_finished(
|
||||||
|
&mut self,
|
||||||
|
response: PendingScrapeResponse,
|
||||||
|
) -> Option<ScrapeResponse> {
|
||||||
let finished = if let Some(entry) = self.0.get_mut(response.slab_key) {
|
let finished = if let Some(entry) = self.0.get_mut(response.slab_key) {
|
||||||
entry.num_pending -= 1;
|
entry.num_pending -= 1;
|
||||||
|
|
||||||
|
|
@ -97,10 +100,10 @@ impl PendingScrapeResponseSlab {
|
||||||
if finished {
|
if finished {
|
||||||
let entry = self.0.remove(response.slab_key);
|
let entry = self.0.remove(response.slab_key);
|
||||||
|
|
||||||
Some(Response::Scrape(ScrapeResponse {
|
Some(ScrapeResponse {
|
||||||
transaction_id: entry.transaction_id,
|
transaction_id: entry.transaction_id,
|
||||||
torrent_stats: entry.torrent_stats.into_values().collect(),
|
torrent_stats: entry.torrent_stats.into_values().collect(),
|
||||||
}))
|
})
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
@ -396,15 +399,40 @@ fn send_responses(
|
||||||
}
|
}
|
||||||
|
|
||||||
for (response, addr) in response_receiver.try_iter() {
|
for (response, addr) in response_receiver.try_iter() {
|
||||||
let opt_response = match response {
|
match response {
|
||||||
ConnectedResponse::Scrape(r) => pending_scrape_responses.add_and_get_finished(r),
|
ConnectedResponse::Scrape(r) => {
|
||||||
ConnectedResponse::AnnounceIpv4(r) => Some(Response::AnnounceIpv4(r)),
|
if let Some(response) = pending_scrape_responses.add_and_get_finished(r) {
|
||||||
ConnectedResponse::AnnounceIpv6(r) => Some(Response::AnnounceIpv6(r)),
|
send_response(
|
||||||
|
state,
|
||||||
|
config,
|
||||||
|
socket,
|
||||||
|
buffer,
|
||||||
|
Response::Scrape(response),
|
||||||
|
addr,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ConnectedResponse::AnnounceIpv4(r) => {
|
||||||
|
send_response(
|
||||||
|
state,
|
||||||
|
config,
|
||||||
|
socket,
|
||||||
|
buffer,
|
||||||
|
Response::AnnounceIpv4(r),
|
||||||
|
addr,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
ConnectedResponse::AnnounceIpv6(r) => {
|
||||||
|
send_response(
|
||||||
|
state,
|
||||||
|
config,
|
||||||
|
socket,
|
||||||
|
buffer,
|
||||||
|
Response::AnnounceIpv6(r),
|
||||||
|
addr,
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(response) = opt_response {
|
|
||||||
send_response(state, config, socket, buffer, response, addr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue