mirror of
https://github.com/rustdesk/hbb_common.git
synced 2026-10-22 16:27:44 +00:00
fix: return local address for direct WebSocket connections
This commit is contained in:
1 parent
0ccaaf2cf6
commit
423fb71085
2 files changed
+7
-4
No files matched your search
+2
-2
@@ -213,8 +213,8 @@ impl WsFramedStream {
|
|||||||
match stream {
|
match stream {
|
||||||
Either::Left(stream) => {
|
Either::Left(stream) => {
|
||||||
// MaybeTlsStream::get_ref() handles Plain, NativeTls and Rustls,
|
// MaybeTlsStream::get_ref() handles Plain, NativeTls and Rustls,
|
||||||
// returning the underlying TcpStream for peer_addr().
|
// returning the underlying TcpStream for local_addr().
|
||||||
let addr = stream.get_ref().get_ref().peer_addr()?;
|
let addr = stream.get_ref().get_ref().local_addr()?;
|
||||||
Ok((Either::Left(stream), addr))
|
Ok((Either::Left(stream), addr))
|
||||||
}
|
}
|
||||||
Either::Right((stream, addr)) => Ok((Either::Right(stream), addr)),
|
Either::Right((stream, addr)) => Ok((Either::Right(stream), addr)),
|
||||||
|
|||||||
@@ -243,19 +243,22 @@ async fn direct_round_trip(wss: bool) {
|
|||||||
let url = format!("{}://{addr}/ws/id", if wss { "wss" } else { "ws" });
|
let url = format!("{}://{addr}/ws/id", if wss { "wss" } else { "ws" });
|
||||||
upsert_tls_cache(&url, TlsType::Rustls, true);
|
upsert_tls_cache(&url, TlsType::Rustls, true);
|
||||||
let server = tokio::spawn(async move {
|
let server = tokio::spawn(async move {
|
||||||
let (stream, _) = listener.accept().await.unwrap();
|
let (stream, client_addr) = listener.accept().await.unwrap();
|
||||||
let mut stream = DynTcpStream(Box::new(stream));
|
let mut stream = DynTcpStream(Box::new(stream));
|
||||||
if wss {
|
if wss {
|
||||||
stream = DynTcpStream(Box::new(tls_acceptor().accept(stream).await.unwrap()));
|
stream = DynTcpStream(Box::new(tls_acceptor().accept(stream).await.unwrap()));
|
||||||
}
|
}
|
||||||
echo(stream, "/ws/id", &addr.to_string()).await;
|
echo(stream, "/ws/id", &addr.to_string()).await;
|
||||||
|
client_addr
|
||||||
});
|
});
|
||||||
let stream = socket_client::connect_tcp(url, TIMEOUT).await.unwrap();
|
let stream = socket_client::connect_tcp(url, TIMEOUT).await.unwrap();
|
||||||
|
let local_addr = stream.local_addr();
|
||||||
exchange(stream).await;
|
exchange(stream).await;
|
||||||
timeout(Duration::from_millis(TIMEOUT), server)
|
let client_addr = timeout(Duration::from_millis(TIMEOUT), server)
|
||||||
.await
|
.await
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
assert_eq!(local_addr, client_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn tcp_proxy_round_trip() {
|
async fn tcp_proxy_round_trip() {
|
||||||
|
|||||||
Reference in new issue
Block a user