update port-forward

1. fix multi remote port override.
2. add connection.rs port-forward failed to close
This commit is contained in:
csf 2022-08-29 19:45:06 +08:00
parent 37617fa888
commit fcc62febb1
4 changed files with 14 additions and 6 deletions

View File

@ -568,7 +568,6 @@ impl Session {
self.send(Data::AddPortForward(pf)); self.send(Data::AddPortForward(pf));
} }
fn on_error(&self, err: &str) { fn on_error(&self, err: &str) {
self.msgbox("error", "Error", err); self.msgbox("error", "Error", err);
} }
@ -886,7 +885,6 @@ impl Connection {
video_format: CodecFormat::Unknown, video_format: CodecFormat::Unknown,
}; };
match Client::start(&session.id, &key, &token, conn_type, session.clone()).await { match Client::start(&session.id, &key, &token, conn_type, session.clone()).await {
Ok((mut peer, direct)) => { Ok((mut peer, direct)) => {
SERVER_KEYBOARD_ENABLED.store(true, Ordering::SeqCst); SERVER_KEYBOARD_ENABLED.store(true, Ordering::SeqCst);
@ -2414,7 +2412,6 @@ pub fn get_session_id(id: String) -> String {
}; };
} }
async fn start_one_port_forward( async fn start_one_port_forward(
handler: Session, handler: Session,
port: i32, port: i32,
@ -2424,7 +2421,6 @@ async fn start_one_port_forward(
key: &str, key: &str,
token: &str, token: &str,
) { ) {
handler.lc.write().unwrap().port_forward = (remote_host, remote_port);
if let Err(err) = crate::port_forward::listen( if let Err(err) = crate::port_forward::listen(
handler.id.clone(), handler.id.clone(),
String::new(), // TODO String::new(), // TODO
@ -2433,10 +2429,13 @@ async fn start_one_port_forward(
receiver, receiver,
key, key,
token, token,
handler.lc.clone(),
remote_host,
remote_port,
) )
.await .await
{ {
handler.on_error(&format!("Failed to listen on {}: {}", port, err)); handler.on_error(&format!("Failed to listen on {}: {}", port, err));
} }
log::info!("port forward (:{}) exit", port); log::info!("port forward (:{}) exit", port);
} }

View File

@ -1,3 +1,5 @@
use std::sync::{Arc, RwLock};
use crate::client::*; use crate::client::*;
use hbb_common::{ use hbb_common::{
allow_err, bail, allow_err, bail,
@ -48,6 +50,9 @@ pub async fn listen(
ui_receiver: mpsc::UnboundedReceiver<Data>, ui_receiver: mpsc::UnboundedReceiver<Data>,
key: &str, key: &str,
token: &str, token: &str,
lc: Arc<RwLock<LoginConfigHandler>>,
remote_host: String,
remote_port: i32,
) -> ResultType<()> { ) -> ResultType<()> {
let listener = tcp::new_listener(format!("0.0.0.0:{}", port), true).await?; let listener = tcp::new_listener(format!("0.0.0.0:{}", port), true).await?;
let addr = listener.local_addr()?; let addr = listener.local_addr()?;
@ -61,6 +66,7 @@ pub async fn listen(
tokio::select! { tokio::select! {
Ok((forward, addr)) = listener.accept() => { Ok((forward, addr)) = listener.accept() => {
log::info!("new connection from {:?}", addr); log::info!("new connection from {:?}", addr);
lc.write().unwrap().port_forward = (remote_host.clone(), remote_port);
let id = id.clone(); let id = id.clone();
let password = password.clone(); let password = password.clone();
let mut forward = Framed::new(forward, BytesCodec::new()); let mut forward = Framed::new(forward, BytesCodec::new());

View File

@ -949,6 +949,7 @@ impl Connection {
addr addr
)) ))
.await; .await;
return false;
} }
} }
} }

View File

@ -1253,7 +1253,6 @@ async fn start_one_port_forward(
key: &str, key: &str,
token: &str, token: &str,
) { ) {
handler.lc.write().unwrap().port_forward = (remote_host, remote_port);
if let Err(err) = crate::port_forward::listen( if let Err(err) = crate::port_forward::listen(
handler.id.clone(), handler.id.clone(),
handler.password.clone(), handler.password.clone(),
@ -1262,6 +1261,9 @@ async fn start_one_port_forward(
receiver, receiver,
key, key,
token, token,
handler.lc.clone(),
remote_host,
remote_port,
) )
.await .await
{ {