use crate::{message::Message, utils::md5}; pub struct MessageFactory; impl MessageFactory { pub fn build_login_message(username: &str, password: &str) -> Message { // Message::new_with_data( // [ // 1, 0, 0, 0, 20, 0, 0, 0, 105, 110, 115, 97, 110, 101, 95, 105, 110, 95, 116, 104, 101, // 95, 98, 114, 97, 105, 110, 50, 8, 0, 0, 0, 49, 51, 51, 55, 53, 49, 51, 55, 160, 0, 0, // 0, 32, 0, 0, 0, 50, 101, 100, 102, 53, 49, 100, 48, 51, 55, 57, 52, 51, 55, 56, 102, // 56, 98, 98, 54, 51, 49, 48, 100, 52, 54, 48, 99, 50, 50, 98, 49, 17, 0, 0, // 0, // //0, // 84, 0, 0, 0, 1, 0, 0, 0, 20, 0, 0, 0, 105, 110, 115, 97, 110, 101, 95, 105, 110, 95, // // 116, 104, 101, 95, 98, 114, 97, 105, 110, 50, 8, 0, 0, 0, 49, 51, 51, 55, 53, 49, 51, // // 55, 160, 0, 0, 0, 32, 0, 0, 0, 50, 101, 100, 102, 53, 49, 100, 48, 51, 55, 57, 52, 51, // // 55, 56, 102, 56, 98, 98, 54, 51, 49, 48, 100, 52, 54, 48, 99, 50, 50, 98, 49, 17, 0, 0, // // 0, // ] // .to_vec(), // ) // .clone() let hash = md5([username, password].join("").as_str()); let mut message = Message::new(); message .write_int32(1) .write_string(username) .write_string(password) .write_int32(157) // version .write_string(&hash) .write_int32(100); //minor version message } pub fn build_shared_folders_message(folder_count: i32, file_count: i32) -> Message { Message::new() .write_int32(35) .write_int32(folder_count) .write_int32(file_count) .clone() } pub fn build_file_search_message(token: i32, query: &str) -> Message { // Message::new_with_data( // [ // 26, 0, 0, 0, 219, 178, 47, 28, 11, 0, 0, 0, 116, 104, 101, 32, 119, 101, 101, 107, 101, // 110, 100, 0, 0, // ] // .to_vec(), // ) // .clone() Message::new() .write_int32(26) .write_int32(token) .write_string(query) .clone() } pub fn build_set_status_message(status_code: i32) -> Message { Message::new() .write_int32(28) .write_int32(status_code) .clone() } pub fn build_no_parent_message() -> Message { Message::new().write_int32(71).write_int32(1).clone() } pub fn build_set_wait_port_message() -> Message { Message::new().write_int32(2).write_int32(2234).clone() } pub fn build_watch_user(token: &str) -> Message { Message::new() .write_raw_bytes([5, 0, 0, 0, 0].to_vec()) .write_raw_hex_string(token) .clone() } } #[test] fn test_build_watch_user() { let token = "5b581500"; let message = MessageFactory::build_watch_user(token); let expect: Vec = [5, 0, 0, 0, 0, 91, 88, 21, 0].to_vec(); assert_eq!(expect, message.get_data()) } #[test] fn test_build_login_message() { let message = MessageFactory::build_login_message("insane_in_the_brain2", "13375137"); let expect: Vec = [ 1, 0, 0, 0, 20, 0, 0, 0, 105, 110, 115, 97, 110, 101, 95, 105, 110, 95, 116, 104, 101, 95, 98, 114, 97, 105, 110, 50, 8, 0, 0, 0, 49, 51, 51, 55, 53, 49, 51, 55, 157, 0, 0, 0, 32, 0, 0, 0, 50, 101, 100, 102, 53, 49, 100, 48, 51, 55, 57, 52, 51, 55, 56, 102, 56, 98, 98, 54, 51, 49, 48, 100, 52, 54, 48, 99, 50, 50, 98, 49, 100, 0, 0, 0, ] .to_vec(); // println!("{:?}", print_hex(message.get_data())); // assert_eq!(expect, message.get_data()); assert_eq!(expect, message.get_data()) } #[test] fn test_build_file_search_message() { let message = MessageFactory::build_file_search_message(12, "trance wax"); let expect: Vec = [ 26, 0, 0, 0, 12, 0, 0, 0, 10, 0, 0, 0, 116, 114, 97, 110, 99, 101, 32, 119, 97, 120, ] .to_vec(); assert_eq!(expect, message.get_data()) }