allow resuming writes

This commit is contained in:
Daniella 2022-08-14 23:27:17 +02:00
parent 300e558df2
commit 8aa7fe2129
3 changed files with 23 additions and 9 deletions

2
Cargo.lock generated
View file

@ -4,4 +4,4 @@ version = 3
[[package]]
name = "qft"
version = "0.1.11"
version = "0.2.0"

View file

@ -1,6 +1,6 @@
[package]
name = "qft"
version = "0.1.11"
version = "0.2.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View file

@ -1,7 +1,7 @@
use std::{
collections::HashMap,
fs::File,
io::{stdout, Error, Read, Write},
fs::{File, OpenOptions},
io::{stdout, Error, Read, Write, Seek, SeekFrom},
net::*,
str::FromStr,
thread,
@ -67,7 +67,7 @@ impl SafeReadWrite {
panic!("bad buf length")
}
}
Err(x) => return Err(x),
Err(_) => {}
}
let mut buf = [0, 0];
match self.socket.recv(&mut buf).ok() {
@ -147,7 +147,7 @@ impl SafeReadWrite {
panic!("internet down")
}
}
Err(_) => return self.socket,
Err(_) => {},
}
let mut buf = [0, 0];
match self.socket.recv(&mut buf).ok() {
@ -227,6 +227,7 @@ fn sender(args: &Vec<String>) {
let connection = holepunch(args);
let br = u32::from_str_radix(args.get(5).unwrap_or(&"256".to_string()), 10)
.expect("This is not a correct number");
let begin = args.get(6).map(|s| u64::from_str_radix(s.as_str(), 10)).unwrap_or(Ok(0)).expect("bad begin operand");
let mut buf: Vec<u8> = Vec::new();
buf.resize(br as usize, 0);
let mut buf = buf.leak();
@ -236,6 +237,12 @@ fn sender(args: &Vec<String>) {
}))
.expect("file not readable");
if begin != 0 {
println!("Skipping to {}...", begin);
file.seek(SeekFrom::Start(begin)).expect("unable to skip");
println!("Done.");
}
let mut sc = SafeReadWrite::new(connection);
let mut bytes_sent: u64 = 0;
loop {
@ -261,15 +268,22 @@ fn receiver(args: &Vec<String>) {
let connection = holepunch(args);
let br = u32::from_str_radix(args.get(5).unwrap_or(&"256".to_string()), 10)
.expect("This is not a correct number");
let begin = args.get(6).map(|s| u64::from_str_radix(s.as_str(), 10)).unwrap_or(Ok(0)).expect("bad begin operand");
let mut buf: Vec<u8> = Vec::new();
buf.resize(br as usize, 0);
let mut buf: &[u8] = buf.leak();
let mut file = File::create(args.get(4).unwrap_or_else(|| {
let mut file = OpenOptions::new().truncate(false).open(args.get(4).unwrap_or_else(|| {
print_args(args);
panic!("unreachable")
}))
.expect("file not writable");
if begin != 0 {
println!("Skipping to {}...", begin);
file.seek(SeekFrom::Start(begin)).expect("unable to skip");
println!("Done.");
}
let mut sc = SafeReadWrite::new(connection);
let mut bytes_received: u64 = 0;
loop {
@ -358,8 +372,8 @@ fn print_args(args: &Vec<String>) {
println!(
"No arguments. Needed: \n\
| {} helper <bind-port>\n\
| {} sender <helper-address>:<helper-port> <phrase> <filename> [bitrate]\n\
| {} receiver <helper-address>:<helper-port> <phrase> <filename> [bitrate]\n",
| {} sender <helper-address>:<helper-port> <phrase> <filename> [bitrate] [skip]\n\
| {} receiver <helper-address>:<helper-port> <phrase> <filename> [bitrate] [skip]\n",
f, f, f
);
panic!("No arguments");