feat: add logging support

This commit is contained in:
Michel de Graaf
2025-07-05 23:16:05 +02:00
parent 57dafaf8ab
commit 956cb824bd
28 changed files with 765 additions and 203 deletions
+2 -49
View File
@@ -1,55 +1,8 @@
use crate::message::{Message, MessageHandler};
use crate::peer::PeerOperation;
use crate::types::{File, FileSearchResult};
use crate::utils::zlib::deflate;
use std::collections::HashMap;
use crate::types::FileSearchResult;
use std::sync::mpsc::Sender;
fn decompress_buffer(buffer: &[u8]) -> Result<Vec<u8>, String> {
deflate(buffer)
}
impl FileSearchResult {
pub fn new_from_message(message: &mut Message) -> Self {
let pointer = message.get_pointer();
let size = message.get_size();
let data: Vec<u8> = message.get_slice(pointer, size);
let deflated = decompress_buffer(&data).unwrap();
let mut message = Message::new_with_data(deflated);
let username = message.read_string();
let token = message.read_raw_hex_str(4);
let n_files = message.read_int32();
let mut files: Vec<File> = Vec::new();
for _ in 0..n_files {
message.read_int8();
let name = message.read_string();
let size = message.read_int32();
message.read_int32();
message.read_string();
let n_attribs = message.read_int32();
let mut attribs: HashMap<i32, i32> = HashMap::new();
for _ in 0..n_attribs {
attribs.insert(message.read_int32(), message.read_int32());
}
files.push(File {
username: username.clone(),
name,
size,
attribs,
});
}
let slots = message.read_int8();
let speed = message.read_int32();
Self {
token,
files,
slots,
speed,
}
}
}
pub struct FileSearchResponse;
impl MessageHandler<PeerOperation> for FileSearchResponse {
fn get_code(&self) -> u8 {
@@ -85,7 +38,7 @@ fn test_new_from_message() {
message.set_pointer(8);
let file_search = FileSearchResult::new_from_message(&mut message);
assert_eq!(file_search.token, "6d2b9434");
assert_eq!(file_search.token, 23);
assert_eq!(file_search.files.len(), 2);
let file = &file_search.files[0];
assert_eq!(
+17
View File
@@ -0,0 +1,17 @@
use crate::{
message::{server::MessageFactory, Message, MessageHandler},
peer::PeerOperation,
};
use std::sync::mpsc::Sender;
pub struct GetShareFileList;
impl MessageHandler<PeerOperation> for GetShareFileList {
fn get_code(&self) -> u8 {
4
}
fn handle(&self, _message: &mut Message, sender: Sender<PeerOperation>) {
let message = MessageFactory::build_shared_folders_message(100, 800);
sender.send(PeerOperation::SendMessage(message)).unwrap();
}
}
+3
View File
@@ -1,3 +1,6 @@
pub mod file_search_response;
pub mod get_share_file_list;
pub mod transfer_request;
pub mod upload_failed;
pub use self::file_search_response::*;
+20
View File
@@ -0,0 +1,20 @@
use crate::{
message::{Message, MessageHandler},
peer::PeerOperation,
types::Transfer,
};
use std::sync::mpsc::Sender;
pub struct TransferRequest;
impl MessageHandler<PeerOperation> for TransferRequest {
fn get_code(&self) -> u8 {
40
}
fn handle(&self, message: &mut Message, sender: Sender<PeerOperation>) {
let transfer = Transfer::new_from_message(message);
sender
.send(PeerOperation::TransferRequest(transfer))
.unwrap();
}
}
+17
View File
@@ -0,0 +1,17 @@
use crate::{
message::{Message, MessageHandler},
peer::PeerOperation,
types::UploadFailed,
};
use std::sync::mpsc::Sender;
pub struct UploadFailedHandler;
impl MessageHandler<PeerOperation> for UploadFailedHandler {
fn get_code(&self) -> u8 {
46
}
fn handle(&self, message: &mut Message, sender: Sender<PeerOperation>) {
let upload_failed = UploadFailed::new_from_message(message);
info!("Upload failed for ${}", upload_failed.filename);
}
}