fix(lib): advertise real slot, speed and queue figures in search replies

Every reply to a peer's search claimed a free upload slot, no speed and
an empty queue, whatever the sharer was doing, and searchers rank
sources on exactly those fields. A reply now says whether a slot is
free, the bytes per second of the last completed upload, and how many
uploads are waiting.
This commit is contained in:
Michel de Graaf
2026-09-07 15:16:20 +02:00
parent 049deee5a7
commit 352816cc1e
9 changed files with 114 additions and 13 deletions
+8 -1
View File
@@ -145,8 +145,9 @@ impl Client {
&bytes_sent,
&cancel,
);
let streamed = result.as_ref().ok().copied();
let status = match &result {
Ok(()) => UploadStatus::Completed,
Ok(_) => UploadStatus::Completed,
Err(e) if e.kind() == std::io::ErrorKind::Interrupted => {
UploadStatus::Cancelled
}
@@ -158,7 +159,13 @@ impl Client {
if let Ok(mut ctx) = context.write_safe()
&& let Some(upload) = ctx.active_uploads.get_mut(&token)
{
let secs = upload.started.elapsed().as_secs_f64();
upload.status = status;
if let Some(bytes) = streamed
&& secs > 0.0
{
ctx.last_upload_speed = (bytes as f64 / secs) as u32;
}
}
// The slot this transfer held is free now, so whoever is next in
// line gets it without waiting for another request to arrive.