mirror of
https://github.com/rustdesk/rustdesk-server.git
synced 2025-07-03 16:25:27 +00:00
prototyping forward request
This commit is contained in:
parent
b32a948347
commit
1d19007a46
@ -1 +1 @@
|
|||||||
Subproject commit 8209a1f2d1d11b7019e224fdc161f138415f6d53
|
Subproject commit 6ccb0d96e7bb37ea43df5c53e07983d6c07804e5
|
@ -1,5 +1,6 @@
|
|||||||
use hbb_common::{
|
use hbb_common::{
|
||||||
env_logger, log,
|
env_logger::*,
|
||||||
|
log,
|
||||||
protobuf::Message as _,
|
protobuf::Message as _,
|
||||||
rendezvous_proto::*,
|
rendezvous_proto::*,
|
||||||
sleep,
|
sleep,
|
||||||
@ -18,7 +19,7 @@ lazy_static::lazy_static! {
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> ResultType<()> {
|
async fn main() -> ResultType<()> {
|
||||||
env_logger::init();
|
init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info"));
|
||||||
let addr = "0.0.0.0:21117";
|
let addr = "0.0.0.0:21117";
|
||||||
log::info!("Listening on {}", addr);
|
log::info!("Listening on {}", addr);
|
||||||
let mut listener = new_listener(addr, true).await?;
|
let mut listener = new_listener(addr, true).await?;
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
// https://tools.ietf.org/rfc/rfc5128.txt
|
// https://tools.ietf.org/rfc/rfc5128.txt
|
||||||
// https://blog.csdn.net/bytxl/article/details/44344855
|
// https://blog.csdn.net/bytxl/article/details/44344855
|
||||||
|
|
||||||
use hbb_common::{env_logger, log, tokio, ResultType};
|
use hbb_common::{env_logger::*, log, tokio, ResultType};
|
||||||
use hbbs::*;
|
use hbbs::*;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> ResultType<()> {
|
async fn main() -> ResultType<()> {
|
||||||
env_logger::init();
|
init_from_env(Env::default().filter_or(DEFAULT_FILTER_ENV, "info"));
|
||||||
let addr = "0.0.0.0:21116";
|
let addr = "0.0.0.0:21116";
|
||||||
log::info!("Listening on {}", addr);
|
log::info!("Listening on {}", addr);
|
||||||
RendezvousServer::start(&addr).await?;
|
RendezvousServer::start(&addr).await?;
|
||||||
|
@ -157,8 +157,27 @@ impl RendezvousServer {
|
|||||||
Some(rendezvous_message::Union::punch_hole_request(ph)) => {
|
Some(rendezvous_message::Union::punch_hole_request(ph)) => {
|
||||||
allow_err!(rs.handle_tcp_punch_hole_request(addr, ph.id).await);
|
allow_err!(rs.handle_tcp_punch_hole_request(addr, ph.id).await);
|
||||||
}
|
}
|
||||||
|
Some(rendezvous_message::Union::request_forward(mut rf)) => {
|
||||||
|
if !rs.pm.is_in_memory(&rf.id) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let mut msg_out = RendezvousMessage::new();
|
||||||
|
rf.socket_addr = AddrMangle::encode(addr);
|
||||||
|
msg_out.set_request_forward(rf);
|
||||||
|
rs.tx.send((msg_out, addr)).ok();
|
||||||
|
}
|
||||||
|
Some(rendezvous_message::Union::request_forward_response(rfr)) => {
|
||||||
|
let addr_b = AddrMangle::decode(&rfr.socket_addr);
|
||||||
|
let sender_b= rs.tcp_punch.lock().unwrap().remove(&addr_b);
|
||||||
|
if let Some(mut sender_b) = sender_b {
|
||||||
|
if let Ok(bytes) = rfr.write_to_bytes() {
|
||||||
|
allow_err!(sender_b.send(Bytes::from(bytes)).await);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
|
Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
|
||||||
allow_err!(rs.handle_hole_sent(&phs, addr, None).await);
|
allow_err!(rs.handle_hole_sent(phs, addr, None).await);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Some(rendezvous_message::Union::local_addr(la)) => {
|
Some(rendezvous_message::Union::local_addr(la)) => {
|
||||||
@ -233,8 +252,15 @@ impl RendezvousServer {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Some(rendezvous_message::Union::request_forward(rf)) => {
|
||||||
|
if self.pm.is_in_memory(&rf.id) {
|
||||||
|
let mut msg_out = RendezvousMessage::new();
|
||||||
|
msg_out.set_request_forward(rf);
|
||||||
|
socket.send(&msg_out, addr).await?
|
||||||
|
}
|
||||||
|
}
|
||||||
Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
|
Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
|
||||||
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?;
|
||||||
@ -304,7 +330,7 @@ impl RendezvousServer {
|
|||||||
#[inline]
|
#[inline]
|
||||||
async fn handle_hole_sent<'a>(
|
async fn handle_hole_sent<'a>(
|
||||||
&mut self,
|
&mut self,
|
||||||
phs: &PunchHoleSent,
|
phs: PunchHoleSent,
|
||||||
addr: SocketAddr,
|
addr: SocketAddr,
|
||||||
socket: Option<&'a mut FramedSocket>,
|
socket: Option<&'a mut FramedSocket>,
|
||||||
) -> ResultType<()> {
|
) -> ResultType<()> {
|
||||||
@ -321,9 +347,11 @@ impl RendezvousServer {
|
|||||||
Some(peer) => peer.pk,
|
Some(peer) => peer.pk,
|
||||||
_ => Vec::new(),
|
_ => Vec::new(),
|
||||||
};
|
};
|
||||||
|
let forward_server = phs.forward_server;
|
||||||
msg_out.set_punch_hole_response(PunchHoleResponse {
|
msg_out.set_punch_hole_response(PunchHoleResponse {
|
||||||
socket_addr: AddrMangle::encode(addr),
|
socket_addr: AddrMangle::encode(addr),
|
||||||
pk,
|
pk,
|
||||||
|
forward_server,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
if let Some(socket) = socket {
|
if let Some(socket) = socket {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user