summaryrefslogtreecommitdiff
path: root/src/transfer.rs
diff options
context:
space:
mode:
authorXaviDCR92 <xavi.dcr@gmail.com>2019-01-15 00:21:22 +0100
committerXaviDCR92 <xavi.dcr@gmail.com>2019-01-15 00:21:22 +0100
commita1eed373b07d54c534310a5a4cd69d77d3a54350 (patch)
tree831fbd48b849101a6c56883118b1611c3215b517 /src/transfer.rs
parent136d9f5a37d5dfd72e6c1486065de4d96611c523 (diff)
downloadrspsxserial-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.rs55
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
}