diff options
| author | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-15 00:21:22 +0100 |
|---|---|---|
| committer | XaviDCR92 <xavi.dcr@gmail.com> | 2019-01-15 00:21:22 +0100 |
| commit | a1eed373b07d54c534310a5a4cd69d77d3a54350 (patch) | |
| tree | 831fbd48b849101a6c56883118b1611c3215b517 /src/transfer.rs | |
| parent | 136d9f5a37d5dfd72e6c1486065de4d96611c523 (diff) | |
| download | rspsxserial-a1eed373b07d54c534310a5a4cd69d77d3a54350.tar.gz | |
requested_file is now also modified by send_file().
Packets smaller than 8 bytes are now also sent.
Diffstat (limited to 'src/transfer.rs')
| -rw-r--r-- | src/transfer.rs | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/src/transfer.rs b/src/transfer.rs index c441fd0..aaa5dc8 100644 --- a/src/transfer.rs +++ b/src/transfer.rs @@ -181,34 +181,48 @@ pub fn wait_file_request(port : &mut serial::SystemPort, requested_file : &mut S } fn get_file_name(buffer : &Vec<u8>, requested_file: &mut String) -> TransferState { - // No valid header byte has been found yet. - match buffer.iter().position(|&c| c == '#' as u8) { - None => TransferState::WaitFileRequest, - Some(pos) => { - let final_pos : usize = - match buffer.iter().position(|&c| c == '@' as u8) { - None => buffer.len() - 1, - Some(l) => l - }; - requested_file.clone_from(&String::from_utf8(buffer[pos + 1..final_pos].to_vec()).unwrap()); - - println!("Requested file: {}", requested_file); - - if requested_file.ends_with(";1") { - TransferState::SendFile + if requested_file.is_empty() { + // No valid header byte has been found yet. + match buffer.iter().position(|&c| c == '#' as u8) { + Some(pos) => { + let final_pos : usize = + match buffer.iter().position(|&c| c == '@' as u8) { + None => { + println!("Terminator character could not be found"); + buffer.len() - 1 + }, + Some(l) => l + }; + requested_file.clone_from(&String::from_utf8(buffer[pos + 1..final_pos].to_vec()).unwrap()); } - else - { - TransferState::WaitFileRequest + None => {}, + } + } + else + { + // No valid header byte has been found yet. + match buffer.iter().position(|&c| c == '@' as u8) { + Some(pos) => { + requested_file.push_str(&String::from_utf8(buffer[0..pos].to_vec()).unwrap()); } + None => {}, } } + + if requested_file.ends_with(";1") { + println!("Requested file: {}", requested_file); + TransferState::SendFile + } + else + { + TransferState::WaitFileRequest + } } pub fn send_file(port : &mut serial::SystemPort, folder: &String, sent_bytes: &mut usize, - requested_file: &String, + requested_file: &mut String, file_data : &mut Vec<u8>, file_size : &mut Option<usize>) -> TransferState { use std::fs; @@ -295,12 +309,13 @@ pub fn send_file(port : &mut serial::SystemPort, } else { - println!("{} has been completely sent.", requested_file); + println!("\r{} has been completely sent.", requested_file); // Reset information. *sent_bytes = 0; *file_size = None; file_data.clear(); + requested_file.clear(); TransferState::WaitFileRequest } |
