diff --git a/.gitignore b/.gitignore index 9c71cc9..ac797dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /Cargo.lock -/target \ No newline at end of file +/target +tmp \ No newline at end of file diff --git a/README.md b/README.md index 7965603..3ac738a 100644 --- a/README.md +++ b/README.md @@ -3,22 +3,22 @@ Note: this project is still in early-development, so expect breaking changes. # gday [![Crates.io Version](https://img.shields.io/crates/v/gday_server)](https://crates.io/crates/gday_server) -A command line tool for sending files. +Command line tool to securely send files (without a relay or port forwarding).
 peer_1: gday send msg.txt image.jpg
 <Asks for confirmation>
-Tell your mate to run "gday receive 1.188T.W3H.E".
+Tell your mate to run "gday get 1.188T.W3H.E".
 Transfer complete.
 
-peer_2: gday receive 1.188T.W3H.E
+peer_2: gday get 1.188T.W3H.E
 <Asks for confirmation>
 Transfer complete.
 
-[![asciicast](https://asciinema.org/a/662397.svg)](https://asciinema.org/a/662397) +[![asciicast](https://asciinema.org/a/1jjPVyccHweqgwA5V3un4tCnU.svg)](https://asciinema.org/a/1jjPVyccHweqgwA5V3un4tCnU) ## Installation @@ -32,11 +32,11 @@ and download the correct file for your platform. ### Cargo -`cargo install gday` +If you have `cargo`, run `cargo install gday`. ### Brew -`brew install manforowicz/tap/gday` +If you have `brew`, run `brew install manforowicz/tap/gday`. ## Features - File transfer is always direct, without relays. @@ -63,14 +63,14 @@ Note: This may not work on networks with very restrictive Usage: gday [OPTIONS] Commands: - send Send files - receive Receive files. Input the code your peer told you - help Print this message or the help of the given subcommand(s) + send Send files and/or directories + get Receive files + help Print this message or the help of the given subcommand(s) Options: -s, --server Use a custom gday server with this domain name - -p, --port Which server port to connect to - -u, --unencrypted Use unencrypted TCP instead of TLS to the custom server + -p, --port Connect to a custom server port + -u, --unencrypted Use raw TCP without TLS -v, --verbosity Verbosity. (trace, debug, info, warn, error) [default: warn] -h, --help Print help -V, --version Print version @@ -82,7 +82,7 @@ Options: No relays - Works beyond most LAN + Works beyond LAN Works through very strict NATs No port forwarding Encrypted diff --git a/gday/README.md b/gday/README.md index f54a6f9..0c6c774 100644 --- a/gday/README.md +++ b/gday/README.md @@ -3,22 +3,22 @@ Note: this project is still in early-development, so expect breaking changes. # gday [![Crates.io Version](https://img.shields.io/crates/v/gday_server)](https://crates.io/crates/gday_server) -A command line tool for sending files. +Command line tool to securely send files (without a relay or port forwarding).
 peer_1: gday send msg.txt image.jpg
 <Asks for confirmation>
-Tell your mate to run "gday receive 1.188T.W3H.E".
+Tell your mate to run "gday get 1.188T.W3H.E".
 Transfer complete.
 
-peer_2: gday receive 1.188T.W3H.E
+peer_2: gday get 1.188T.W3H.E
 <Asks for confirmation>
 Transfer complete.
 
-[![asciicast](https://asciinema.org/a/662397.svg)](https://asciinema.org/a/662397) +[![asciicast](https://asciinema.org/a/1jjPVyccHweqgwA5V3un4tCnU.svg)](https://asciinema.org/a/1jjPVyccHweqgwA5V3un4tCnU) ## Installation @@ -63,14 +63,14 @@ Note: This may not work on networks with very restrictive Usage: gday [OPTIONS] Commands: - send Send files - receive Receive files. Input the code your peer told you - help Print this message or the help of the given subcommand(s) + send Send files and/or directories + get Receive files + help Print this message or the help of the given subcommand(s) Options: -s, --server Use a custom gday server with this domain name - -p, --port Which server port to connect to - -u, --unencrypted Use unencrypted TCP instead of TLS to the custom server + -p, --port Connect to a custom server port + -u, --unencrypted Use raw TCP without TLS -v, --verbosity Verbosity. (trace, debug, info, warn, error) [default: warn] -h, --help Print help -V, --version Print version diff --git a/gday/src/dialog.rs b/gday/src/dialog.rs index 204e2df..1a6ccc9 100644 --- a/gday/src/dialog.rs +++ b/gday/src/dialog.rs @@ -5,7 +5,7 @@ use indicatif::HumanBytes; use owo_colors::OwoColorize; use std::{io::Write, path::Path}; -/// Confirms that the user wants to send these files. +/// Confirms that the user wants to send these `files``. /// /// If not, returns false. pub fn confirm_send(files: &FileOfferMsg) -> std::io::Result { @@ -35,19 +35,14 @@ pub fn confirm_send(files: &FileOfferMsg) -> std::io::Result { } } -/// Asks the user which of these offered `files` to accept. +/// Asks the user which of the files in `offer` to accept. /// /// `save_dir` is the directory where the files will later be saved. -/// -/// Returns a `Vec>`, where each -/// - `None` represents rejecting the file at this index, -/// - `Some(0)` represents fully accepting the file at this index, -/// - `Some(x)` represents resuming with the first `x` bytes skipped. pub fn ask_receive( offer: &FileOfferMsg, save_dir: &Path, ) -> Result { - println!("{}", "Your mate wants to send you:".bold(),); + println!("{}", "Your mate wants to send you:".bold()); // Print all the offered files. for file in &offer.files { @@ -60,7 +55,7 @@ pub fn ask_receive( print!( " {} {} {}", - "PARTIALLY DOWNLOADED.".red().bold(), + "CAN RESUME DOWNLOAD.".red().bold(), HumanBytes(remaining_len).red().bold(), "REMAINING".red().bold() ); diff --git a/gday/src/main.rs b/gday/src/main.rs index c759a0d..b6d4310 100644 --- a/gday/src/main.rs +++ b/gday/src/main.rs @@ -68,7 +68,7 @@ enum Command { }, /// Receive files. - Receive { + Get { /// Directory where to save the files. /// By default, saves them in the current directory. #[arg(short, long, default_value = ".")] @@ -157,10 +157,7 @@ fn run(args: crate::Args) -> Result<(), Box> { info!("Your contact is:\n{my_contact}"); - println!( - "Tell your mate to run \"gday receive {}\"", - peer_code.bold() - ); + println!("Tell your mate to run \"gday get {}\"", peer_code.bold()); // get peer's contact let peer_contact = contact_sharer.get_peer_contact()?; @@ -208,7 +205,7 @@ fn run(args: crate::Args) -> Result<(), Box> { } // receiving files - crate::Command::Receive { path, code } => { + crate::Command::Get { path, code } => { let code = PeerCode::from_str(&code)?; let (contact_sharer, my_contact) = ContactSharer::join_room(&mut server_connection, code.room_code)?; diff --git a/gday_hole_punch/src/hole_puncher.rs b/gday_hole_punch/src/hole_puncher.rs index addf592..8e71d5d 100644 --- a/gday_hole_punch/src/hole_puncher.rs +++ b/gday_hole_punch/src/hole_puncher.rs @@ -18,7 +18,7 @@ const RETRY_INTERVAL: Duration = Duration::from_millis(200); /// Tries to establish a TCP connection with the other peer by using /// [TCP hole punching](https://en.wikipedia.org/wiki/TCP_hole_punching). /// -/// - `local_contact` should be the `private` field of your [`FullContact`] +/// - `local_contact` should be the `local` field of your [`FullContact`] /// that [`crate::ContactSharer`] returned when you created or joined a room. /// Panics if both `v4` and `v6` are `None`. /// - `peer_contact` should be the [`FullContact`] returned by [`crate::ContactSharer::get_peer_contact()`]. diff --git a/gday_hole_punch/src/server_connector.rs b/gday_hole_punch/src/server_connector.rs index 1ecc21e..b082928 100644 --- a/gday_hole_punch/src/server_connector.rs +++ b/gday_hole_punch/src/server_connector.rs @@ -20,7 +20,7 @@ pub use gday_contact_exchange_protocol::DEFAULT_TLS_PORT; /// /// Having many server options helps make Gday decentralized! /// - Submit an issue on Gday's GitHub if you'd like to add your own! -/// - All of these serve with encrypted TLS over port 443. +/// - All of these serve encrypted TLS over port 443. pub const DEFAULT_SERVERS: &[ServerInfo] = &[ServerInfo { domain_name: "gday.manforowicz.com", id: 1, diff --git a/gday_server/README.md b/gday_server/README.md index cb27965..f53f6f0 100644 --- a/gday_server/README.md +++ b/gday_server/README.md @@ -2,6 +2,7 @@ Note: this crate is still in early-development, so expect breaking changes. # gday_server [![Crates.io Version](https://img.shields.io/crates/v/gday_server)](https://crates.io/crates/gday_server) +[![docs.rs](https://img.shields.io/docsrs/gday_server)](https://docs.rs/gday_server/) A server that runs the [gday_contact_exchange_protocol](https://docs.rs/gday_contact_exchange_protocol/). @@ -31,8 +32,8 @@ Options: -k, --key PEM file of private TLS server key -c, --certificate PEM file of signed TLS server certificate -u, --unencrypted Use unencrypted TCP instead of TLS - -a, --address
Custom socket address on which to listen. [default: `[::]:443` for TLS, `[::]:80` when --unencrypted] - -t, --timeout Number of seconds before a new room is deleted [default: 600] + -a, --address
Custom socket address on which to listen. [default: `[::]:2311` for TLS, `[::]:2310` when --unencrypted] + -t, --timeout Number of seconds before a new room is deleted [default: 3600] -r, --request-limit Max number of requests an IP address can send in a minute before they're rejected [default: 60] -v, --verbosity Log verbosity. (trace, debug, info, warn, error) [default: info] -h, --help Print help @@ -57,7 +58,7 @@ Here's how: 9. Submit an [issue](https://github.com/manforowicz/gday/issues), asking for your server to be added to the [default server list](https://docs.rs/gday_hole_punch/latest/gday_hole_punch/server_connector/constant.DEFAULT_SERVERS.html). ## Related -- [gday](https://crates.io/crates/gday_server) - Command line tool for sending files. +- [gday](https://crates.io/crates/gday) - Command line tool for sending files. ## Depends on - [gday_contact_exchange_protocol](https://docs.rs/gday_contact_exchange_protocol/) - Library with protocol for two peers to share their socket addresses via a server. diff --git a/other/demo/demo.sh b/other/demo.sh similarity index 77% rename from other/demo/demo.sh rename to other/demo.sh index 4b8360e..a8d97f0 100755 --- a/other/demo/demo.sh +++ b/other/demo.sh @@ -1,15 +1,16 @@ #!/usr/bin/env bash -# Custom script for starting a tmux 2-pane -# asciinema recording. +# Custom script for starting a tmux 2-pane asciinema recording. # Intended for recording gday demos. - -# Requires: asciinema, tmux, -# and 2 subdirectories called 'peer_1', 'peer_2' - -# Add gday to path using cargo install. - +# Requires: asciinema, tmux # Use ctrl+b to switch between panes. +# Use ctrl+d to end the recording. + +# Create the demo folders if they don't exist yet. +mkdir tmp +cd tmp +mkdir peer_1 +mkdir peer_2 # Start a new session detached tmux new-session -d -s demo_session diff --git a/other/demo/demo.cast b/other/demo/demo.cast deleted file mode 100644 index be822d1..0000000 --- a/other/demo/demo.cast +++ /dev/null @@ -1,94 +0,0 @@ -{"version": 2, "width": 158, "height": 28, "timestamp": 1717443152, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}} -[0.003457, "o", "\u001b[?1049h\u001b[22;0;0t\u001b[?1h\u001b=\u001b[H\u001b[2J\u001b[?12l\u001b[?25h\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?1006l\u001b[?1005l\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?2004l\u001b[1;1H\u001b[1;28r\u001b[>c\u001b[>q\u001b[4;1H"] -[0.003872, "o", "\u001b[?25l\u001b[1;80H\u001b[32m│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[39m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[1;79H\u001b[1K\u001b[Hexport PS1=\"\\033[1;92mpeer 1: \\033[0m\"\u001b[2;79H\u001b[1K\rcd peer_1\u001b[3;79H\u001b[1K\rclear\u001b[4;79H\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\u001b[1;81Hexport PS1=\"\\033[1;92mpeer 2: \\033[0m\"\u001b[K\u001b[2;81Hcd peer_2\u001b[K\u001b[3;81Hclear\u001b[K\u001b[4;81H\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\u001b[30m\u001b[42m\r\n[demo_sess0:bash* \"marcin-laptop-mx\" 12:32 03-Jun-24\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[4;1H"] -[0.003908, "o", "\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[?1006l\u001b[?1000l\u001b[?1002l\u001b[?1003l\u001b[?2004l\u001b[1;1H\u001b[1;28r\u001b[4;1H"] -[0.004091, "o", "\u001b[?25l\u001b[1;80H\u001b[32m│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[39m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[1;79H\u001b[1K\u001b[Hexport PS1=\"\\033[1;92mpeer 1: \\033[0m\"\u001b[2;79H\u001b[1K\rcd peer_1\u001b[3;79H\u001b[1K\rclear\u001b[4;79H\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\u001b[1;81Hexport PS1=\"\\033[1;92mpeer 2: \\033[0m\"\u001b[K\u001b[2;81Hcd peer_2\u001b[K\u001b[3;81Hclear\u001b[K\u001b[4;81H\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\u001b[30m\u001b[42m\r\n[demo_sess0:bash* \"marcin-laptop-mx\" 12:32 03-Jun-24\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[4;1H"] -[0.007334, "o", "\u001b[?7727h"] -[0.186101, "o", "(base) \u001b[35m\u001b[1mmarcin\u001b(B\u001b[m@\u001b[36m\u001b[1mmarcin-laptop-mx\u001b(B\u001b[m:\u001b[32m\u001b[1m~/Documents/gday/demo\r\n$\u001b(B\u001b[m \u001b[?2004h"] -[0.186272, "o", "\u001b[4;40H\"\u001b[39X\r\n\u001b[92m\u001b[1mpeer 1: \u001b(B\u001b[mcd peer_13[1;92mpeer 1: \\033[0m\" \r\n\u001b[?2004l\u001b[92m\u001b[1mpeer 1: \u001b(B\u001b[mclear\r\n"] -[0.187171, "o", "\u001b[1;27r\u001b[2;79H\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\n\u001b[1K\u001b[1d\u001b[1K\u001b[1;28r\u001b[1;1H"] -[0.187282, "o", "\u001b[92m\u001b[1mpeer 1: \u001b[?2004h\u001b(B\u001b[m"] -[0.187471, "o", "\u001b[4;81H(base) \u001b[35m\u001b[1mmarcin\u001b(B\u001b[m@\u001b[36m\u001b[1mmarcin-laptop-mx\u001b(B\u001b[m:\u001b[32m\u001b[1m~/Documents/gday/demo\u001b[1;9H\u001b(B\u001b[m\u001b[5;81H\u001b[32m\u001b[1m$\u001b(B\u001b[m \u001b[1;9H"] -[0.187527, "o", "\u001b[5;83Hexport PS1=\"\\033[1;92mpeer 2: \\033[0m\"\u001b[1;9H"] -[0.187565, "o", "\u001b[6;81H\u001b[92m\u001b[1mpeer 2: \u001b[1;9H\u001b(B\u001b[m"] -[0.187608, "o", "\u001b[6;89Hcd peer_2\u001b[1;9H"] -[0.187651, "o", "\u001b[7;81H\u001b[92m\u001b[1mpeer 2: \u001b[1;9H\u001b(B\u001b[m\u001b[7;89Hclear\u001b[1;9H"] -[0.188342, "o", "\u001b[1;27r\u001b[2;81H\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\n\u001b[K\u001b[1d\u001b[K\u001b[1;28r\u001b[1;9H"] -[0.188418, "o", "\u001b[72C\u001b[92m\u001b[1mpeer 2: \u001b[9G\u001b(B\u001b[m"] -[0.190535, "o", "\u001b[72C\u001b[92m\u001b[1mpeer 2: \u001b(B\u001b[m\u001b[K\u001b[H\u001b[92m\u001b[1mpeer 1: \u001b(B\u001b[m\u001b[71X"] -[0.674003, "o", "g"] -[0.85815, "o", "d"] -[0.944386, "o", "a"] -[1.111559, "o", "y"] -[1.207735, "o", " "] -[1.329879, "o", "s"] -[1.423399, "o", "e"] -[1.5715, "o", "n"] -[1.653048, "o", "d"] -[1.739105, "o", " "] -[1.965748, "o", "m"] -[2.087753, "o", "s"] -[2.181981, "o", "g"] -[2.318552, "o", "."] -[2.452878, "o", "t"] -[2.622832, "o", "x"] -[2.710562, "o", "t"] -[2.780506, "o", " "] -[2.900505, "o", "i"] -[2.947626, "o", "m"] -[3.053141, "o", "a"] -[3.13578, "o", "g"] -[3.211482, "o", "e"] -[3.354374, "o", "."] -[3.587126, "o", "j"] -[3.68871, "o", "p"] -[3.815933, "o", "g"] -[3.937013, "o", "\r\n\u001b[?2004l"] -[3.947995, "o", "\u001b[?25l\u001b[1;80H\u001b[32m│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[39m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[30m\u001b[42m\r\n[demo_sess0:gday* \"marcin-laptop-mx\" 12:32 03-Jun-24\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[2;1H"] -[4.012401, "o", "\u001b[1m2\u001b(B\u001b[m \u001b[1mfiles to send:\r\n\u001b(B\u001b[mmsg.txt (12 B)\r\nimage.jpg (11 B)\u001b[6;1H\u001b[1mTotal size: \u001b(B\u001b[m \u001b[1m23 B\r\n\u001b(B\u001b[mWould you like to send these? (y/n): "] -[4.605983, "o", "y"] -[4.795332, "o", "\r\n"] -[5.445093, "o", "\u001b[?25l\u001b[1;80H│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[32m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[1;89H\u001b[?2004h"] -[5.798947, "o", "\u001b[8;1HTell your mate to run \"gday receive \u001b[1m1.4FBD.ED15.2\u001b(B\u001b[m\"\u001b[1;89H"] -[5.799806, "o", "\u001b[?25l\u001b[9D│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[32m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[30m\u001b[42m\r\n[demo_sess0:bash* \"marcin-laptop-mx\" 12:32 03-Jun-24\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[1;89H"] -[6.086862, "o", "g"] -[6.431002, "o", "d"] -[6.503788, "o", "a"] -[6.601593, "o", "y"] -[6.710416, "o", " "] -[6.79049, "o", "r"] -[6.895468, "o", "e"] -[7.096879, "o", "c"] -[7.269312, "o", "e"] -[7.385552, "o", "i"] -[7.460456, "o", "v"] -[7.538639, "o", "e"] -[7.783294, "o", " "] -[8.067315, "o", "1"] -[8.175665, "o", "."] -[8.866609, "o", "4"] -[9.146886, "o", "f"] -[9.851508, "o", "b"] -[10.017667, "o", "d"] -[10.183992, "o", "."] -[10.581023, "o", "e"] -[11.112281, "o", "d"] -[11.864154, "o", "1"] -[11.928078, "o", "5"] -[12.369622, "o", "."] -[12.742728, "o", "2"] -[12.930025, "o", "\u001b[2;81H\u001b[?2004l"] -[13.582588, "o", "\u001b[9;1HWaiting for your mate to respond to your file offer.\u001b[2;81H\u001b[1mYour mate wants to send you\u001b(B\u001b[m \u001b[1m2\u001b(B\u001b[m \u001b[1mfiles:\u001b[3;81H\u001b(B\u001b[mmsg.txt (12 B)\u001b[4;81Himage.jpg (11 B)\u001b[6;81HSize of all offered files: \u001b[1m23 B\u001b[7;81H\u001b(B\u001b[mSize of files that have a new/changed path or size or were interrupted: \u001b[1m23 B\u001b[8;81HOptions:\u001b[9;81H1. Download only files with new path or size. Resume any interrupted downloads\u001b[10;81H.\u001b[11;81H2. Fully download all files.\u001b[12;81H3. Cancel.\u001b[13;81H\u001b(B\u001b[mNote: gday won't overwrite existing files (it suffixes any new files with the \u001b[14;81Hsame name).\u001b[15;81H\u001b[1mChoose an option (1, 2, or 3):\u001b(B\u001b[m "] -[13.58288, "o", "\u001b[?25l\u001b[1;80H│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[32m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[30m\u001b[42m\r\n[demo_sess0:gday* \"marcin-laptop-mx\" 12:32 03-Jun-24\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[15;112H"] -[15.315006, "o", "1"] -[15.799784, "o", "\u001b[16;81H"] -[15.799952, "o", "\u001b[10;1HYour mate accepted 2/2 files\u001b[16;81Hreceiving msg.txt [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0 B/23 B | 0 B/s | eta: 0s\u001b[11;1Hsending msg.txt [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0 B/23 B | 0 B/s | eta: 0s\u001b[16;158H"] -[15.800023, "o", "\u001b[11;1Hsending msg.txt [\u001b[62X█████████████░░░░░░░░░░░░░] 12 B/23 B | 143.24 KiB/s | eta: 0s\u001b[16;158H\u001b[11;1Hsending image.jpg [\u001b[60X████████████░░░░░░░░░░░░] 12 B/23 B | 125.27 KiB/s | eta: 0s\u001b[16;158H"] -[15.800063, "o", "\u001b[11;1Hsending image.jpg [\u001b[60X████████████████████████] 23 B/23 B | 147.09 KiB/s | eta: 0s\u001b[16;158H"] -[15.800103, "o", "\u001b[77Dreceiving msg.txt [\u001b[K████████████░░░░░░░░░░░░] 12 B/23 B | 53.24 KiB/s | eta: 0s\u001b[11;1HDone sending! [\u001b[64X████████████████████████████] 23 B/23 B | 121.08 KiB/s | eta: 0s\u001b[16;158H"] -[15.800157, "o", "\u001b[77Dreceiving image.jpg [\u001b[K███████████░░░░░░░░░░░] 12 B/23 B | 49.87 KiB/s | eta: 0s\u001b[16;81Hreceiving image.jpg [\u001b[K██████████████████████] 23 B/23 B | 58.20 KiB/s | eta: 0s"] -[15.800192, "o", "\u001b[16;81HDone downloading! [\u001b[K████████████████████████] 23 B/23 B | 62.49 KiB/s | eta: 0s"] -[15.800413, "o", "\u001b[12;1H\u001b[92m\u001b[1mpeer 1: \u001b[16;158H\u001b(B\u001b[m"] -[15.800539, "o", "\u001b[?2004h"] -[15.800574, "o", "\u001b[17;81H\u001b[92m\u001b[1mpeer 2: \u001b(B\u001b[m"] -[18.673528, "o", "\u001b[?25l\u001b[1;80H│\u001b[2;80H│\u001b[3;80H│\u001b[4;80H│\u001b[5;80H│\u001b[6;80H│\u001b[7;80H│\u001b[8;80H│\u001b[9;80H│\u001b[10;80H│\u001b[11;80H│\u001b[12;80H│\u001b[13;80H│\u001b[14;80H│\u001b[15;80H\u001b[32m│\u001b[16;80H│\u001b[17;80H│\u001b[18;80H│\u001b[19;80H│\u001b[20;80H│\u001b[21;80H│\u001b[22;80H│\u001b[23;80H│\u001b[24;80H│\u001b[25;80H│\u001b[26;80H│\u001b[27;80H│\u001b(B\u001b[m\u001b[30m\u001b[42m\r\n[demo_sess0:bash* \"marcin-laptop-mx\" 12:32 03-Jun-24\u001b(B\u001b[m\u001b[?12l\u001b[?25h\u001b[17;89H"] diff --git a/other/demo/peer_1/image.jpg b/other/demo/peer_1/image.jpg deleted file mode 100644 index 466c153..0000000 --- a/other/demo/peer_1/image.jpg +++ /dev/null @@ -1 +0,0 @@ -Hello there \ No newline at end of file diff --git a/other/demo/peer_1/msg.txt b/other/demo/peer_1/msg.txt deleted file mode 100644 index cd773cd..0000000 --- a/other/demo/peer_1/msg.txt +++ /dev/null @@ -1 +0,0 @@ -Hello there! \ No newline at end of file diff --git a/other/demo/peer_2/image.jpg b/other/demo/peer_2/image.jpg deleted file mode 100644 index 466c153..0000000 --- a/other/demo/peer_2/image.jpg +++ /dev/null @@ -1 +0,0 @@ -Hello there \ No newline at end of file diff --git a/other/demo/peer_2/msg.txt b/other/demo/peer_2/msg.txt deleted file mode 100644 index cd773cd..0000000 --- a/other/demo/peer_2/msg.txt +++ /dev/null @@ -1 +0,0 @@ -Hello there! \ No newline at end of file