mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-09-03 09:35:41 +00:00
feat: add upnp support (#1449)
This commit is contained in:
@@ -5,7 +5,7 @@ use crate::{
|
||||
proto::{
|
||||
common::Void,
|
||||
peer_rpc::{
|
||||
DirectConnectorRpc, GetIpListRequest, GetIpListResponse, SendV6HolePunchPacketRequest,
|
||||
DirectConnectorRpc, GetIpListRequest, GetIpListResponse, SendUdpHolePunchPacketRequest,
|
||||
},
|
||||
rpc_types::{self, controller::BaseController},
|
||||
},
|
||||
@@ -50,29 +50,29 @@ impl DirectConnectorRpc for DirectConnectorManagerRpcServer {
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
async fn send_v6_hole_punch_packet(
|
||||
async fn send_udp_hole_punch_packet(
|
||||
&self,
|
||||
_: BaseController,
|
||||
req: SendV6HolePunchPacketRequest,
|
||||
req: SendUdpHolePunchPacketRequest,
|
||||
) -> rpc_types::error::Result<Void> {
|
||||
let listener_port = req.listener_port as u16;
|
||||
let SocketAddr::V6(connector_addr) = req
|
||||
let connector_addr: SocketAddr = req
|
||||
.connector_addr
|
||||
.ok_or(anyhow::anyhow!("connector_addr is required"))?
|
||||
.into()
|
||||
else {
|
||||
return Err(anyhow::anyhow!("connector_addr is not a v6 address").into());
|
||||
};
|
||||
.into();
|
||||
|
||||
tracing::info!(
|
||||
"Sending v6 hole punch packet to {} from listener port {}",
|
||||
"Sending udp hole punch packet to {} from listener port {}",
|
||||
connector_addr,
|
||||
listener_port
|
||||
);
|
||||
|
||||
// send 3 packets to the connector
|
||||
for _ in 0..3 {
|
||||
udp::send_v6_hole_punch_packet(listener_port, connector_addr).await?;
|
||||
match connector_addr {
|
||||
SocketAddr::V4(addr) => udp::send_v4_hole_punch_packet(listener_port, addr).await?,
|
||||
SocketAddr::V6(addr) => udp::send_v6_hole_punch_packet(listener_port, addr).await?,
|
||||
}
|
||||
tokio::time::sleep(std::time::Duration::from_millis(30)).await;
|
||||
}
|
||||
Ok(Default::default())
|
||||
|
||||
Reference in New Issue
Block a user