This commit is contained in:
lubeilin
2023-12-26 21:47:01 +08:00
parent cf4b1f418f
commit 364012f9dd
5 changed files with 41 additions and 26 deletions
+7 -2
View File
@@ -1,8 +1,8 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::net::{SocketAddrV6, TcpStream};
use std::net::UdpSocket as StdUdpSocket; use std::net::UdpSocket as StdUdpSocket;
use std::net::{Ipv4Addr, Shutdown, SocketAddr}; use std::net::{Ipv4Addr, Shutdown, SocketAddr};
use std::net::{SocketAddrV6, TcpStream};
use std::sync::Arc; use std::sync::Arc;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use std::{io, thread}; use std::{io, thread};
@@ -114,7 +114,12 @@ impl Context {
#[inline] #[inline]
pub fn send_main_udp(&self, buf: &[u8], mut addr: SocketAddr) -> io::Result<usize> { pub fn send_main_udp(&self, buf: &[u8], mut addr: SocketAddr) -> io::Result<usize> {
if let SocketAddr::V4(ipv4) = addr { if let SocketAddr::V4(ipv4) = addr {
addr = SocketAddr::V6(SocketAddrV6::new(ipv4.ip().to_ipv6_mapped(), ipv4.port(),0,0)); addr = SocketAddr::V6(SocketAddrV6::new(
ipv4.ip().to_ipv6_mapped(),
ipv4.port(),
0,
0,
));
} }
self.inner.main_channel.send_to(buf, addr) self.inner.main_channel.send_to(buf, addr)
} }
+13 -8
View File
@@ -1,8 +1,8 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::io; use std::io;
use std::net::{SocketAddrV6, TcpStream};
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
use std::net::UdpSocket; use std::net::UdpSocket;
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
use std::net::{SocketAddrV6, TcpStream};
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
@@ -11,25 +11,25 @@ use parking_lot::{Mutex, RwLock};
use rand::Rng; use rand::Rng;
use tokio::sync::mpsc::channel; use tokio::sync::mpsc::channel;
use crate::channel::{Route, RouteKey};
use crate::channel::channel::{Channel, Context}; use crate::channel::channel::{Channel, Context};
use crate::channel::idle::Idle; use crate::channel::idle::Idle;
use crate::channel::punch::{NatInfo, Punch, PunchModel}; use crate::channel::punch::{NatInfo, Punch, PunchModel};
use crate::channel::sender::ChannelSender; use crate::channel::sender::ChannelSender;
use crate::channel::{Route, RouteKey};
use crate::cipher::{Cipher, CipherModel, RsaCipher}; use crate::cipher::{Cipher, CipherModel, RsaCipher};
use crate::core::status::VntStatusManger; use crate::core::status::VntStatusManger;
use crate::error::Error; use crate::error::Error;
use crate::external_route::{AllowExternalRoute, ExternalRoute}; use crate::external_route::{AllowExternalRoute, ExternalRoute};
use crate::handle::{
ConnectStatus, CurrentDeviceInfo, handshake_handler, heartbeat_handler, PeerDeviceInfo,
punch_handler, registration_handler,
};
use crate::handle::handshake_handler::HandshakeEnum; use crate::handle::handshake_handler::HandshakeEnum;
use crate::handle::recv_handler::ChannelDataHandler; use crate::handle::recv_handler::ChannelDataHandler;
use crate::handle::registration_handler::{RegResponse, ReqEnum}; use crate::handle::registration_handler::{RegResponse, ReqEnum};
#[cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))] #[cfg(any(target_os = "linux", target_os = "macos", target_os = "windows"))]
use crate::handle::tun_tap::tap_handler; use crate::handle::tun_tap::tap_handler;
use crate::handle::tun_tap::tun_handler; use crate::handle::tun_tap::tun_handler;
use crate::handle::{
handshake_handler, heartbeat_handler, punch_handler, registration_handler, ConnectStatus,
CurrentDeviceInfo, PeerDeviceInfo,
};
use crate::igmp_server::IgmpServer; use crate::igmp_server::IgmpServer;
use crate::nat::NatTest; use crate::nat::NatTest;
use crate::tun_tap_device; use crate::tun_tap_device;
@@ -608,7 +608,12 @@ impl Config {
} }
match server_address { match server_address {
SocketAddr::V4(ipv4) => { SocketAddr::V4(ipv4) => {
server_address = SocketAddr::V6(SocketAddrV6::new(ipv4.ip().to_ipv6_mapped(), ipv4.port(), 0, 0)) server_address = SocketAddr::V6(SocketAddrV6::new(
ipv4.ip().to_ipv6_mapped(),
ipv4.port(),
0,
0,
))
} }
SocketAddr::V6(_) => {} SocketAddr::V6(_) => {}
} }
+8 -3
View File
@@ -8,14 +8,14 @@ use parking_lot::Mutex;
use rand::prelude::SliceRandom; use rand::prelude::SliceRandom;
use crate::channel::idle::Idle; use crate::channel::idle::Idle;
use crate::channel::Route;
use crate::channel::sender::ChannelSender; use crate::channel::sender::ChannelSender;
use crate::channel::Route;
use crate::cipher::Cipher; use crate::cipher::Cipher;
use crate::core::status::VntWorker; use crate::core::status::VntWorker;
use crate::handle::{CurrentDeviceInfo, PeerDeviceInfo}; use crate::handle::{CurrentDeviceInfo, PeerDeviceInfo};
use crate::protocol::{control_packet, MAX_TTL, NetPacket, Protocol, Version};
use crate::protocol::body::ENCRYPTION_RESERVED; use crate::protocol::body::ENCRYPTION_RESERVED;
use crate::protocol::control_packet::PingPacket; use crate::protocol::control_packet::PingPacket;
use crate::protocol::{control_packet, NetPacket, Protocol, Version, MAX_TTL};
pub fn start_idle(mut worker: VntWorker, idle: Idle, sender: ChannelSender) { pub fn start_idle(mut worker: VntWorker, idle: Idle, sender: ChannelSender) {
tokio::spawn(async move { tokio::spawn(async move {
@@ -142,7 +142,12 @@ async fn start_heartbeat_main_(
if addr != current_dev.connect_server { if addr != current_dev.connect_server {
let mut tmp = current_dev.clone(); let mut tmp = current_dev.clone();
if let SocketAddr::V4(ipv4) = addr { if let SocketAddr::V4(ipv4) = addr {
addr = SocketAddr::V6(SocketAddrV6::new(ipv4.ip().to_ipv6_mapped(), ipv4.port(), 0, 0)) addr = SocketAddr::V6(SocketAddrV6::new(
ipv4.ip().to_ipv6_mapped(),
ipv4.port(),
0,
0,
))
} }
tmp.connect_server = addr; tmp.connect_server = addr;
log::info!( log::info!(