mirror of
https://github.com/rustdesk/rustdesk-server.git
synced 2026-05-25 23:59:15 +00:00
relay for local addr in case in different sub net
This commit is contained in:
Submodule libs/hbb_common updated: afce320583...e4313f5f0f
@@ -196,7 +196,7 @@ impl RendezvousServer {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Some(rendezvous_message::Union::local_addr(la)) => {
|
Some(rendezvous_message::Union::local_addr(la)) => {
|
||||||
allow_err!(rs.handle_local_addr(&la, addr, None).await);
|
allow_err!(rs.handle_local_addr(la, addr, None).await);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
@@ -231,13 +231,11 @@ impl RendezvousServer {
|
|||||||
self.update_addr(rp.id, addr, socket).await?;
|
self.update_addr(rp.id, addr, socket).await?;
|
||||||
if self.serial > rp.serial {
|
if self.serial > rp.serial {
|
||||||
let mut msg_out = RendezvousMessage::new();
|
let mut msg_out = RendezvousMessage::new();
|
||||||
let mut mi = MiscInfo::new();
|
msg_out.set_configure_update(ConfigUpdate {
|
||||||
mi.set_configure_update(ConfigUpdate {
|
|
||||||
serial: self.serial,
|
serial: self.serial,
|
||||||
rendezvous_servers: self.rendezvous_servers.clone(),
|
rendezvous_servers: self.rendezvous_servers.clone(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
msg_out.set_misc_info(mi);
|
|
||||||
socket.send(&msg_out, addr).await?;
|
socket.send(&msg_out, addr).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -286,28 +284,25 @@ impl RendezvousServer {
|
|||||||
self.handle_hole_sent(phs, addr, Some(socket)).await?;
|
self.handle_hole_sent(phs, addr, Some(socket)).await?;
|
||||||
}
|
}
|
||||||
Some(rendezvous_message::Union::local_addr(la)) => {
|
Some(rendezvous_message::Union::local_addr(la)) => {
|
||||||
self.handle_local_addr(&la, addr, Some(socket)).await?;
|
self.handle_local_addr(la, addr, Some(socket)).await?;
|
||||||
}
|
}
|
||||||
Some(rendezvous_message::Union::misc_info(mi)) => match mi.union {
|
Some(rendezvous_message::Union::configure_update(mut cu)) => {
|
||||||
Some(misc_info::Union::configure_update(mut cu)) => {
|
if addr.ip() == std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))
|
||||||
if addr.ip() == std::net::IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))
|
&& cu.serial > self.serial
|
||||||
&& cu.serial > self.serial
|
{
|
||||||
{
|
self.serial = cu.serial;
|
||||||
self.serial = cu.serial;
|
self.rendezvous_servers = cu
|
||||||
self.rendezvous_servers = cu
|
.rendezvous_servers
|
||||||
.rendezvous_servers
|
.drain(..)
|
||||||
.drain(..)
|
.filter(|x| test_if_valid_server(x).is_ok())
|
||||||
.filter(|x| test_if_valid_server(x).is_ok())
|
.collect();
|
||||||
.collect();
|
log::info!(
|
||||||
log::info!(
|
"configure updated: serial={} rendezvous-servers={:?}",
|
||||||
"configure updated: serial={} rendezvous-servers={:?}",
|
self.serial,
|
||||||
self.serial,
|
self.rendezvous_servers
|
||||||
self.rendezvous_servers
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_ => {}
|
}
|
||||||
},
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -408,7 +403,7 @@ impl RendezvousServer {
|
|||||||
#[inline]
|
#[inline]
|
||||||
async fn handle_local_addr<'a>(
|
async fn handle_local_addr<'a>(
|
||||||
&mut self,
|
&mut self,
|
||||||
la: &LocalAddr,
|
la: LocalAddr,
|
||||||
addr: SocketAddr,
|
addr: SocketAddr,
|
||||||
socket: Option<&'a mut FramedSocket>,
|
socket: Option<&'a mut FramedSocket>,
|
||||||
) -> ResultType<()> {
|
) -> ResultType<()> {
|
||||||
@@ -421,8 +416,13 @@ impl RendezvousServer {
|
|||||||
&addr
|
&addr
|
||||||
);
|
);
|
||||||
let mut msg_out = RendezvousMessage::new();
|
let mut msg_out = RendezvousMessage::new();
|
||||||
|
let mut relay_server = la.relay_server;
|
||||||
|
if relay_server.is_empty() {
|
||||||
|
relay_server = self.relay_server.clone();
|
||||||
|
}
|
||||||
msg_out.set_punch_hole_response(PunchHoleResponse {
|
msg_out.set_punch_hole_response(PunchHoleResponse {
|
||||||
socket_addr: la.local_addr.clone(),
|
socket_addr: la.local_addr.clone(),
|
||||||
|
relay_server,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
if let Some(socket) = socket {
|
if let Some(socket) = socket {
|
||||||
|
|||||||
Reference in New Issue
Block a user