修复连接tcp地址的问题

This commit is contained in:
lubeilin
2023-12-26 22:27:16 +08:00
parent 364012f9dd
commit 94d6caef7e
4 changed files with 25 additions and 25 deletions
+2 -13
View File
@@ -1,8 +1,8 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::io; use std::io;
use std::net::TcpStream;
use std::net::UdpSocket; use std::net::UdpSocket;
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; 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;
@@ -581,7 +581,7 @@ impl Config {
token: String, token: String,
device_id: String, device_id: String,
name: String, name: String,
mut server_address: SocketAddr, server_address: SocketAddr,
server_address_str: String, server_address_str: String,
mut stun_server: Vec<String>, mut stun_server: Vec<String>,
in_ips: Vec<(u32, u32, Ipv4Addr)>, in_ips: Vec<(u32, u32, Ipv4Addr)>,
@@ -606,17 +606,6 @@ impl Config {
x.push_str(":3478"); x.push_str(":3478");
} }
} }
match server_address {
SocketAddr::V4(ipv4) => {
server_address = SocketAddr::V6(SocketAddrV6::new(
ipv4.ip().to_ipv6_mapped(),
ipv4.port(),
0,
0,
))
}
SocketAddr::V6(_) => {}
}
Self { Self {
tap, tap,
token, token,
+11 -1
View File
@@ -1,4 +1,4 @@
use std::net::SocketAddr; use std::net::{SocketAddr, SocketAddrV6};
use crate::channel::channel::Context; use crate::channel::channel::Context;
use crate::channel::RouteKey; use crate::channel::RouteKey;
@@ -168,6 +168,16 @@ fn send_recv(
} }
Ok(len) Ok(len)
} else { } else {
let server_address = if let SocketAddr::V4(ipv4) = server_address {
SocketAddr::V6(SocketAddrV6::new(
ipv4.ip().to_ipv6_mapped(),
ipv4.port(),
0,
0,
))
} else {
server_address
};
if let Err(e) = main_channel.send_to(send_buf, server_address) { if let Err(e) = main_channel.send_to(send_buf, server_address) {
return Err(HandshakeEnum::Other(format!("send error:{}", e))); return Err(HandshakeEnum::Other(format!("send error:{}", e)));
} }
+2 -10
View File
@@ -1,5 +1,5 @@
use std::io; use std::io;
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV6, ToSocketAddrs}; use std::net::{Ipv4Addr, ToSocketAddrs};
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
@@ -138,17 +138,9 @@ async fn start_heartbeat_main_(
let src = current_dev.virtual_ip(); let src = current_dev.virtual_ip();
if count % 40 == 19 { if count % 40 == 19 {
if let Ok(mut addr) = server_address_str.to_socket_addrs() { if let Ok(mut addr) = server_address_str.to_socket_addrs() {
if let Some(mut addr) = addr.next() { if let Some(addr) = addr.next() {
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 {
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!(
"服务端地址变化,旧地址:{},新地址:{}", "服务端地址变化,旧地址:{},新地址:{}",
+10 -1
View File
@@ -1,6 +1,6 @@
use crossbeam_utils::atomic::AtomicCell; use crossbeam_utils::atomic::AtomicCell;
use std::io::{Read, Write}; use std::io::{Read, Write};
use std::net::{Ipv4Addr, SocketAddr}; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV6};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use crate::channel::sender::ChannelSender; use crate::channel::sender::ChannelSender;
@@ -82,6 +82,15 @@ pub fn registration(
} }
&mut recv_buf[4..len] &mut recv_buf[4..len]
} else { } else {
let server_address = match server_address {
SocketAddr::V4(ipv4) => SocketAddr::V6(SocketAddrV6::new(
ipv4.ip().to_ipv6_mapped(),
ipv4.port(),
0,
0,
)),
SocketAddr::V6(_) => server_address,
};
if let Err(e) = main_channel.send_to(buf, server_address) { if let Err(e) = main_channel.send_to(buf, server_address) {
return Err(ReqEnum::Other(format!("send error:{}", e))); return Err(ReqEnum::Other(format!("send error:{}", e)));
} }