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