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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user