Compare commits

11 Commits

Author SHA1 Message Date
PoliEcho 1d9bfb8896 Update README.md 2025-08-10 10:47:01 +00:00
PoliEcho 2b31e112f9 Update README.md 2025-08-10 10:44:33 +00:00
PoliEcho f60ea7fd14 Update README.md 2025-08-10 10:41:02 +00:00
PoliEcho 2bfd0b686b Update README.md 2025-08-10 10:37:19 +00:00
PoliEcho b0dfffff63 Update README.md 2025-08-03 18:55:04 +00:00
PoliEcho 64e6bb1343 resize logo 2025-08-03 20:54:17 +02:00
PoliEcho dea308d73d add logo 2025-08-03 20:50:00 +02:00
PoliEcho 934a053713 bug fixes 2025-08-03 20:23:23 +02:00
PoliEcho a955710350 some more heartbeat modifications 2025-08-03 18:34:31 +02:00
PoliEcho 23dea395d3 Merge branch 'master' of https://git.pupes.org/PoliEcho/pea_2_pea 2025-08-03 15:51:16 +02:00
PoliEcho 6ede42a096 v1.1 2025-08-03 15:49:43 +02:00
7 changed files with 512 additions and 13 deletions
+2
View File
@@ -46,6 +46,8 @@ ar = "/usr/bin/x86_64-w64-mingw32-ar"
linker = "/usr/bin/i686-w64-mingw32-gcc" linker = "/usr/bin/i686-w64-mingw32-gcc"
ar = "/usr/bin/i686-w64-mingw32-ar" ar = "/usr/bin/i686-w64-mingw32-ar"
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
[features] [features]
no-timeout = [] no-timeout = []
+6 -1
View File
@@ -1,3 +1,4 @@
<img src="https://git.pupes.org/PoliEcho/pea_2_pea/raw/branch/master/logo.svg" alt="Pea 2 Pea logo" width="196"></img>
# Pea 2 Pea # Pea 2 Pea
very simple P2P VPN(Virtual Network yes, Private maybe), very simple P2P VPN(Virtual Network yes, Private maybe),
this program is intended to help you play LAN games over internet and as proof of concept this program is intended to help you play LAN games over internet and as proof of concept
@@ -6,10 +7,14 @@ at least for now
> [!WARNING] > [!WARNING]
> Piercing NAT may fail based on network configuration > Piercing NAT may fail based on network configuration minor bug fixes
> [!WARNING]
> windows client does not work thanks to some tappers library issues
## how to run ## how to run
> install rustc and cargo or rustup, you will need 2024 edition > install rustc and cargo or rustup, you will need 2024 edition
> <b><span style='color: red;'>if using windows you need to get</span></b> [wintun](https://www.wintun.net/) <b><span style='color: red;'>driver</span></b>
> build using > build using
> ```bash > ```bash
> # to build > # to build
+445
View File
@@ -0,0 +1,445 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="484.58453"
height="248.42142"
viewBox="0 0 128.21298 65.728168"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="logo.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.1099334"
inkscape:cx="196.40818"
inkscape:cy="60.814458"
inkscape:window-width="1918"
inkscape:window-height="1038"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(3.9106348,-31.359329)">
<circle
style="fill:#008000;stroke:none;stroke-width:2.91042"
id="path1"
cx="46.719666"
cy="57.45282"
r="5" />
<circle
style="fill:#008000;stroke:none;stroke-width:2.91042"
id="path2"
cx="83.68927"
cy="58.152664"
r="5" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2"
width="16.013054"
height="7.4165721"
x="31.945221"
y="27.088457"
transform="rotate(19.028307)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3"
width="16.013054"
height="7.4165721"
x="29.191198"
y="-95.819298"
transform="rotate(130.89504)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3-6"
width="16.013054"
height="7.4165721"
x="-26.219568"
y="-85.876183"
transform="rotate(130.89504)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3-6-2"
width="16.013054"
height="7.4165721"
x="118.05431"
y="23.204641"
transform="rotate(22.124773)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3-6-5"
width="16.013054"
height="7.4165721"
x="88.477242"
y="56.328484"
transform="rotate(-9.8371144)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3-6-5-9"
width="16.013054"
height="7.4165721"
x="92.291519"
y="-31.192705"
transform="rotate(63.042937)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3-1"
width="16.013054"
height="7.4165721"
x="-35.023296"
y="-86.497765"
transform="rotate(-171.92112)" />
<rect
style="fill:#aa4400;stroke:#000000;stroke-width:0.264583;stroke-dasharray:none"
id="rect2-3-1-3"
width="16.013054"
height="7.4165721"
x="17.492208"
y="-55.955021"
transform="rotate(142.51624)" />
<g
id="g4">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4"
width="7.0014291"
height="0.67321438"
x="39.931004"
y="105.02441"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2"
width="7.0014291"
height="0.67321438"
x="41.63229"
y="100.16535"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4"
width="7.0014291"
height="0.67321438"
x="41.926292"
y="95.885963"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-0"
width="7.0014291"
height="0.67321438"
x="38.900993"
y="91.293457"
transform="rotate(-23.434102)" />
</g>
<g
id="g4-6"
transform="rotate(65.73685,101.19056,61.333303)">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3"
width="7.0014291"
height="0.67321438"
x="39.931004"
y="105.02441"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-2"
width="7.0014291"
height="0.67321438"
x="41.63229"
y="100.16535"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06"
width="7.0014291"
height="0.67321438"
x="41.926292"
y="95.885963"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-0-1"
width="7.0014291"
height="0.67321438"
x="38.900993"
y="91.293457"
transform="rotate(-23.434102)" />
</g>
<g
id="g4-6-6"
transform="rotate(-113.69404,61.903716,91.125325)">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5"
width="7.0014291"
height="0.67321438"
x="39.931004"
y="105.02441"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-2-6"
width="7.0014291"
height="0.67321438"
x="41.63229"
y="100.16535"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-9"
width="7.0014291"
height="0.67321438"
x="41.926292"
y="95.885963"
transform="rotate(-23.434102)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-0-1-3"
width="7.0014291"
height="0.67321438"
x="38.900993"
y="91.293457"
transform="rotate(-23.434102)" />
</g>
<g
id="g5">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5-5-3-8"
width="7.0014291"
height="0.67321438"
x="-8.7603998"
y="127.93809"
transform="rotate(176.53385,-1.1221414,92.265355)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5-5-3-8-4"
width="7.0014291"
height="0.67321438"
x="-7.19274"
y="122.34638"
transform="rotate(176.53385,-1.1221414,92.265355)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5-5-3-8-8"
width="7.0014291"
height="0.67321438"
x="-9.5258064"
y="118.47264"
transform="rotate(176.53385,-1.1221414,92.265355)" />
</g>
<g
id="g5-4"
transform="translate(1.5735268,24.969803)">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5-5-3-8-9"
width="7.0014291"
height="0.67321438"
x="-8.7603998"
y="127.93809"
transform="rotate(176.53385,-1.1221414,92.265355)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5-5-3-8-4-5"
width="7.0014291"
height="0.67321438"
x="-7.19274"
y="122.34638"
transform="rotate(176.53385,-1.1221414,92.265355)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-3-5-5-3-8-8-0"
width="7.0014291"
height="0.67321438"
x="-9.5258064"
y="118.47264"
transform="rotate(176.53385,-1.1221414,92.265355)" />
</g>
<g
id="g6">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6"
width="7.0014291"
height="0.67321438"
x="120.58088"
y="1.4029152"
transform="rotate(17.66615)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-9"
width="7.0014291"
height="0.67321438"
x="121.73305"
y="4.3680196"
transform="rotate(17.66615)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7"
width="7.0014291"
height="0.67321438"
x="120.06847"
y="10.63729"
transform="rotate(17.66615)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-77"
width="7.0014291"
height="0.67321438"
x="123.14556"
y="7.7831545"
transform="rotate(17.66615)" />
</g>
<g
id="g1">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5"
width="7.0014291"
height="0.67321438"
x="104.35145"
y="90.858383"
transform="rotate(-6.8426428)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-8"
width="7.0014291"
height="0.67321438"
x="106.21098"
y="87.927322"
transform="rotate(-6.8426428)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-9"
width="7.0014291"
height="0.67321438"
x="102.55393"
y="81.353195"
transform="rotate(-6.8426428)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-0"
width="7.0014291"
height="0.67321438"
x="107.95219"
y="84.665787"
transform="rotate(-6.8426428)" />
</g>
<g
id="g2">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3"
width="7.0014291"
height="0.67321438"
x="7.5878925"
y="56.102978"
transform="rotate(-18.642383)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1"
width="7.0014291"
height="0.67321438"
x="4.4349847"
y="53.472279"
transform="rotate(-18.642383)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-3"
width="7.0014291"
height="0.67321438"
x="1.2183968"
y="50.885269"
transform="rotate(-18.642383)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6"
width="7.0014291"
height="0.67321438"
x="-0.33573198"
y="41.308918"
transform="rotate(-18.642383)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112354;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-2"
width="7.0014291"
height="0.67321438"
x="-3.9510856"
y="46.704735"
transform="rotate(-18.642383)" />
</g>
<g
id="g3">
<rect
style="fill:#000000;stroke:none;stroke-width:0.112299;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6-5"
width="6.997993"
height="0.67288405"
x="22.438622"
y="68.204086"
transform="rotate(-11.251809)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112299;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6-5-9"
width="6.997993"
height="0.67288405"
x="21.747293"
y="64.102196"
transform="rotate(-11.251809)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112299;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6-5-2"
width="6.997993"
height="0.67288405"
x="23.246773"
y="60.863266"
transform="rotate(-11.251809)" />
</g>
<rect
style="fill:#000000;stroke:none;stroke-width:0.112299;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6-5-2-4"
width="6.997993"
height="0.67288405"
x="97.801979"
y="36.583424"
transform="rotate(11.279343)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112299;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6-5-2-4-6"
width="6.997993"
height="0.67288405"
x="100.02957"
y="39.268402"
transform="rotate(13.217335)" />
<rect
style="fill:#000000;stroke:none;stroke-width:0.112299;stroke-dasharray:none"
id="rect4-2-4-06-6-7-5-3-1-6-5-2-4-0"
width="6.997993"
height="0.67288405"
x="99.277161"
y="39.332554"
transform="rotate(11.279343)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

+30 -7
View File
@@ -21,7 +21,8 @@ use crate::types::Network;
struct Cli { struct Cli {
#[arg(short = 'r', long = "registrar")] #[arg(short = 'r', long = "registrar")]
#[arg(help = "registrar ip address or hostname")] #[arg(help = "registrar ip address or hostname")]
registrar: String, #[arg(required_unless_present = "version")]
registrar: Option<String>,
#[arg(short = 'p', long = "registrar-port")] #[arg(short = 'p', long = "registrar-port")]
#[arg(help = format!("optional Port number for the registrar service (1-65535) Default: {}", SERVER_PORT))] #[arg(help = format!("optional Port number for the registrar service (1-65535) Default: {}", SERVER_PORT))]
@@ -29,7 +30,8 @@ struct Cli {
#[arg(short = 'n', long = "network-id")] #[arg(short = 'n', long = "network-id")]
#[arg(help = "your virtual network id that allows other people to connect to you")] #[arg(help = "your virtual network id that allows other people to connect to you")]
network_id: String, #[arg(required_unless_present = "version")]
network_id: Option<String>,
#[arg(short = 'P', long = "password")] #[arg(short = 'P', long = "password")]
#[arg( #[arg(
@@ -52,9 +54,19 @@ struct Cli {
symmetric_nat_bypass_mode: bool, symmetric_nat_bypass_mode: bool,
} }
fn print_version() {
println!("Pea 2 Pea {}", VERSION);
}
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
let cli = <Cli as clap::Parser>::parse(); let cli = <Cli as clap::Parser>::parse();
if cli.network_id.len() > 0xff { if cli.version {
print_version();
exit(0);
}
let network_id = cli.network_id.unwrap();
let registrar = cli.registrar.unwrap();
if network_id.len() > 0xff {
eprintln!("network id cannot have more then 255 charactes"); eprintln!("network id cannot have more then 255 charactes");
exit(7); // posix for E2BIG exit(7); // posix for E2BIG
} }
@@ -81,11 +93,11 @@ fn main() -> std::io::Result<()> {
})(); })();
#[allow(non_snake_case)] // i think this is valid snake case but rustc doesnt think so #[allow(non_snake_case)] // i think this is valid snake case but rustc doesnt think so
let server_SocketAddr: core::net::SocketAddr = format!("{}:{}", cli.registrar, server_port) let server_SocketAddr: core::net::SocketAddr = format!("{}:{}", registrar, server_port)
.parse() .parse()
.expect(&format!( .expect(&format!(
"{}:{} is invalid sock addr", "{}:{} is invalid sock addr",
cli.registrar, server_port registrar, server_port
)); ));
// query here // query here
@@ -134,7 +146,7 @@ fn main() -> std::io::Result<()> {
&mut buf, &mut buf,
&server_SocketAddr, &server_SocketAddr,
&socket, &socket,
&cli.network_id, &network_id,
&cli.password, &cli.password,
) { ) {
Ok(n) => { Ok(n) => {
@@ -161,7 +173,7 @@ fn main() -> std::io::Result<()> {
None => false, None => false,
}, },
encryption_key, encryption_key,
cli.network_id, network_id,
salt, salt,
Vec::with_capacity(1), Vec::with_capacity(1),
); );
@@ -174,6 +186,17 @@ fn main() -> std::io::Result<()> {
&iv, &iv,
) )
.unwrap(); .unwrap();
let _ = net::send_heartbeat(
// send heart beat to start periodic heart beat
&mut buf,
&server_SocketAddr,
socket.clone(),
&tmp_v_net,
&public_sock_addr,
&iv,
);
tmp_v_net tmp_v_net
} }
Err(e) => { Err(e) => {
+4
View File
@@ -727,6 +727,9 @@ pub async fn handle_incoming_connection(
"[SUCCESS]".green() "[SUCCESS]".green()
); );
} }
x if x == ServerMethods::HEARTBEAT as u8 => {
println!("{} heart beat recive confirmed", "[OK]".green());
}
_ => { _ => {
eprintln!( eprintln!(
"{} unknown method ID: 0x{:02x}, Droping!", "{} unknown method ID: 0x{:02x}, Droping!",
@@ -738,6 +741,7 @@ pub async fn handle_incoming_connection(
} }
pub fn periodic_heart_beat(socket: Arc<UdpSocket>, send_buf: Box<[u8]>, dst: SocketAddr) { pub fn periodic_heart_beat(socket: Arc<UdpSocket>, send_buf: Box<[u8]>, dst: SocketAddr) {
println!("{} periodic heartbeat started", "[LOG]".blue());
loop { loop {
std::thread::sleep(std::time::Duration::from_secs(30)); std::thread::sleep(std::time::Duration::from_secs(30));
println!("{} sending heartbeat to server", "[LOG]".blue()); println!("{} sending heartbeat to server", "[LOG]".blue());
+1 -1
View File
@@ -4,7 +4,7 @@ pub const SERVER_PORT: u16 = 3543;
pub const UDP_BUFFER_SIZE: usize = 65527; pub const UDP_BUFFER_SIZE: usize = 65527;
pub const IP_BUFFER_SIZE: usize = 65535; pub const IP_BUFFER_SIZE: usize = 65535;
pub const DEFAULT_TIMEOUT: u64 = 30; pub const DEFAULT_TIMEOUT: u64 = 30;
pub const VERSION: &str = "v1.0"; pub const VERSION: &str = "v1.1.1";
pub const BLOCK_SIZE: usize = 16; pub const BLOCK_SIZE: usize = 16;
pub const STANDARD_RETRY_MAX: usize = 10; pub const STANDARD_RETRY_MAX: usize = 10;
+24 -4
View File
@@ -64,7 +64,7 @@ pub async fn handle_request(
let registration = match registration_vector let registration = match registration_vector
.iter() .iter()
.find(|elem| elem.map(|s| &s.net_id == &net_id)) // find if id exists .find(|elem| elem.map(|s| &s.net_id == &net_id && !s.invalid)) // find if id exists
{ {
Some(registration) => registration, Some(registration) => registration,
None => {futures::executor::block_on(send_with_count(socket, &src ,&[ServerResponse::ID_DOESNT_EXIST as u8])); None => {futures::executor::block_on(send_with_count(socket, &src ,&[ServerResponse::ID_DOESNT_EXIST as u8]));
@@ -163,7 +163,7 @@ pub async fn handle_request(
match registration_vector match registration_vector
.iter() .iter()
.find(|elem| elem.map(|s| &s.net_id == &net_id)) // find if id exists .find(|elem| elem.map(|s| &s.net_id == &net_id && !s.invalid)) // find if id exists
{ {
Some(_) => { Some(_) => {
futures::executor::block_on(send_with_count(socket, &src, &[ServerResponse::ID_EXISTS as u8])); futures::executor::block_on(send_with_count(socket, &src, &[ServerResponse::ID_EXISTS as u8]));
@@ -216,7 +216,25 @@ pub async fn handle_request(
.collect::<String>(), .collect::<String>(),
); );
registration_vector.push(types::Registration::new( let mut first_invalid_registration: Option<usize> = None;
for (i, reg) in registration_vector.iter().enumerate() {
if reg.map(|r| r.invalid) {
first_invalid_registration = Some(i);
break;
}
}
match first_invalid_registration {
Some(i) => registration_vector[i].update(|r|{*r = types::Registration::new(
net_id.clone(),
client_sock_addr.clone(),
encrypted,
chrono::Utc::now().timestamp(),
salt,
iv,
src
);}),
None => {registration_vector.push(types::Registration::new(
net_id, net_id,
client_sock_addr, client_sock_addr,
encrypted, encrypted,
@@ -224,7 +242,9 @@ pub async fn handle_request(
salt, salt,
iv, iv,
src src
)); ));},
};
send_with_count(socket, &src, &[ServerMethods::REGISTER as u8]).await; send_with_count(socket, &src, &[ServerMethods::REGISTER as u8]).await;
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
println!("network registered"); println!("network registered");