From b10c721179bbf02f8e09a9b69c2671a71c47ac7d Mon Sep 17 00:00:00 2001 From: alex Date: Thu, 26 Mar 2026 10:52:16 +0800 Subject: [PATCH] changed encryptor to ArcSwap --- src/bin/punchnet/main.rs | 2 +- src/network/node.rs | 6 ++++-- src/network/packet.rs | 3 ++- src/network/tun_linux.rs | 3 ++- src/network/tuntap.rs | 3 ++- src/tcp/quic.rs | 11 +++++++---- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/bin/punchnet/main.rs b/src/bin/punchnet/main.rs index be8fec6..7a611f2 100755 --- a/src/bin/punchnet/main.rs +++ b/src/bin/punchnet/main.rs @@ -117,7 +117,7 @@ async fn daemonize_me( let (tx, rx) = std::sync::mpsc::channel(); - let hostname = "118.178.229.213".to_owned(); + let hostname = "root.punchsky.com".to_owned(); let host = format!("{}:80", hostname); let mut server = String::new(); if let Ok(addrs) = host.to_socket_addrs() { diff --git a/src/network/node.rs b/src/network/node.rs index 77858f9..6e78940 100755 --- a/src/network/node.rs +++ b/src/network/node.rs @@ -1,3 +1,4 @@ +use arc_swap::ArcSwap; use dashmap::DashMap; use quinn::Endpoint; use rsa::RsaPrivateKey; @@ -163,7 +164,7 @@ impl IdentityID { pub struct Node { packet_id: AtomicU32, - pub encryptor: RwLock, + pub encryptor: ArcSwap, pub network_id: AtomicU32, pub network_domain: RwLock, @@ -390,7 +391,8 @@ impl Node { Self { packet_id: AtomicU32::new(1), - encryptor: RwLock::new(MyEncryptor::new()), + encryptor: ArcSwap::from(Arc::new(MyEncryptor::new())), + // encryptor: RwLock::new(MyEncryptor::new()), network_id: AtomicU32::new(0), hostname: RwLock::new(hostname), diff --git a/src/network/packet.rs b/src/network/packet.rs index e56475e..688b2ea 100755 --- a/src/network/packet.rs +++ b/src/network/packet.rs @@ -861,7 +861,8 @@ async fn handle_tun_packet( // test_aes(key.as_slice()); - let origin = eee.encryptor.read().unwrap().decrypt(&payload); + let origin = eee.encryptor.load().decrypt(&payload); + // let origin = eee.encryptor.read().unwrap().decrypt(&payload); // let origin = aes_decrypt(&payload); if let Err(_e) = origin { error!("failed to decrypt original data"); diff --git a/src/network/tun_linux.rs b/src/network/tun_linux.rs index 2c40322..b0a1a6b 100755 --- a/src/network/tun_linux.rs +++ b/src/network/tun_linux.rs @@ -321,7 +321,8 @@ impl TunTapPacketHandler for Iface { } let size = data.len(); - let Ok(encrypted) = edge.encryptor.read().unwrap().encrypt(&data) else { + let Ok(encrypted) = edge.encryptor.load().encrypt(&data) else { + // let Ok(encrypted) = edge.encryptor.read().unwrap().encrypt(&data) else { // let Ok(encrypted) = aes_encrypt(encrypt_key, &data) else { error!("failed to encrypt packet request"); return Ok(()); diff --git a/src/network/tuntap.rs b/src/network/tuntap.rs index d53b816..67a8476 100755 --- a/src/network/tuntap.rs +++ b/src/network/tuntap.rs @@ -88,7 +88,8 @@ impl ArpWaitList { let pkt_size = packet.len(); - let Ok(encrypted) = edge.encryptor.read().unwrap().encrypt(&packet) else { + let Ok(encrypted) = edge.encryptor.load().encrypt(&packet) else { + // let Ok(encrypted) = edge.encryptor.read().unwrap().encrypt(&packet) else { // let Ok(encrypted) = aes_encrypt(&encrypt_key, &packet) else { error!("failed to encrypt packet request"); return; diff --git a/src/tcp/quic.rs b/src/tcp/quic.rs index ef2f129..8ec79ad 100644 --- a/src/tcp/quic.rs +++ b/src/tcp/quic.rs @@ -133,10 +133,12 @@ async fn handle_tcp_message(msg: SdlanTcp) { match ack.algorithm.to_ascii_lowercase().as_str() { "chacha20" => { - *edge.encryptor.write().unwrap() = MyEncryptor::ChaChao20(Chacha20Encryptor::new(key, ack.region_id)); + edge.encryptor.store(Arc::new(MyEncryptor::ChaChao20(Chacha20Encryptor::new(key, ack.region_id)))) + // *edge.encryptor.write().unwrap() = MyEncryptor::ChaChao20(Chacha20Encryptor::new(key, ack.region_id)); } "aes" => { - *edge.encryptor.write().unwrap() = MyEncryptor::Aes(AesEncryptor::new(key)); + edge.encryptor.store(Arc::new(MyEncryptor::Aes(AesEncryptor::new(key)))) + // *edge.encryptor.write().unwrap() = MyEncryptor::Aes(AesEncryptor::new(key)); } _other => { @@ -330,7 +332,8 @@ async fn handle_tcp_message(msg: SdlanTcp) { }); */ edge.set_authorized(false); - *edge.encryptor.write().unwrap() = MyEncryptor::Invalid; + edge.encryptor.store(Arc::new(MyEncryptor::Invalid)); + // *edge.encryptor.write().unwrap() = MyEncryptor::Invalid; // std::process::exit(0); } PacketType::Command => { @@ -689,7 +692,7 @@ impl ReadWriteActor { async fn on_disconnected_callback() { let edge = get_edge(); edge.set_authorized(false); - *edge.encryptor.write().unwrap() = MyEncryptor::Invalid; + edge.encryptor.store(Arc::new(MyEncryptor::Invalid)); } async fn on_connected_callback(local_ip: Option, stream: &mut SendStream, _pkt_id: Option) {