feat(shares): reply to browse requests with a SharedFileListResponse (code 5)

GetShareFileList (peer code 4) previously replied with a malformed message (a
server SharedFolders stats message over a peer connection). It now emits
ShareListRequested, and the client builds a real SharedFileListResponse
(code 5) from its shares grouped by directory. Adds a std-only code-5
encoder/decoder (build_shared_file_list / parse_shared_file_list) with a
roundtrip test, and Shares::directories() to group files. The decoder is the
foundation for the Browse feature.
This commit is contained in:
michel
2026-07-19 18:51:55 +02:00
parent 54d7d8f8a3
commit f3b24f34c0
6 changed files with 177 additions and 4 deletions
+11
View File
@@ -38,6 +38,8 @@ pub enum PeerMessage {
RequestTransfer(Download),
/// A peer queued one of our shared files for download (they sent us code 43).
IncomingQueueUpload(String),
/// A peer asked to browse our shared files (they sent us code 4).
ShareListRequested,
/// Offer the queued file to that peer: send an upload TransferRequest.
ServeUpload {
token: u32,
@@ -347,6 +349,15 @@ impl PeerActor {
);
self.send_message(message);
}
PeerMessage::ShareListRequested => {
let requester_key = self.peer_username();
if let Err(e) = self
.client_channel
.send(ClientOperation::ShareListRequested { requester_key })
{
error!("[peer_actor] forward ShareListRequested: {}", e);
}
}
PeerMessage::RequestTransfer(download) => {
let message = MessageFactory::build_transfer_request_message(
&download.filename,