Skip to content

Commit 6f18a97

Browse files
committed
v1.1.12
1 parent 3b386b6 commit 6f18a97

File tree

6 files changed

+44
-13
lines changed

6 files changed

+44
-13
lines changed

Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "hbbs"
3-
version = "1.1.11-1"
3+
version = "1.1.12"
44
authors = ["rustdesk <[email protected]>"]
55
edition = "2021"
66
build = "build.rs"

debian/changelog

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
rustdesk-server (1.1.12) UNRELEASED; urgency=medium
2+
* WS real ip
3+
* Bump s6-overlay to v3.2.0.0 and fix env warnings
4+
15
rustdesk-server (1.1.11-1) UNRELEASED; urgency=medium
26
* set reuse port to make restart friendly
37
* revert hbbr `-k` to not ruin back-compatibility

src/relay_server.rs

+19-8
Original file line numberDiff line numberDiff line change
@@ -392,19 +392,30 @@ async fn handle_connection(
392392

393393
async fn make_pair(
394394
stream: TcpStream,
395-
addr: SocketAddr,
395+
mut addr: SocketAddr,
396396
key: &str,
397397
limiter: Limiter,
398398
ws: bool,
399399
) -> ResultType<()> {
400400
if ws {
401-
make_pair_(
402-
tokio_tungstenite::accept_async(stream).await?,
403-
addr,
404-
key,
405-
limiter,
406-
)
407-
.await;
401+
use tokio_tungstenite::tungstenite::handshake::server::{Request, Response};
402+
let callback = |req: &Request, response: Response| {
403+
let headers = req.headers();
404+
let real_ip = headers
405+
.get("X-Real-IP")
406+
.or_else(|| headers.get("X-Forwarded-For"))
407+
.and_then(|header_value| header_value.to_str().ok());
408+
if let Some(ip) = real_ip {
409+
if ip.contains('.') {
410+
addr = format!("{ip}:0").parse().unwrap_or(addr);
411+
} else {
412+
addr = format!("[{ip}]:0").parse().unwrap_or(addr);
413+
}
414+
}
415+
Ok(response)
416+
};
417+
let ws_stream = tokio_tungstenite::accept_hdr_async(stream, callback).await?;
418+
make_pair_(ws_stream, addr, key, limiter).await;
408419
} else {
409420
make_pair_(FramedStream::from(stream, addr), addr, key, limiter).await;
410421
}

src/rendezvous_server.rs

+18-2
Original file line numberDiff line numberDiff line change
@@ -1106,13 +1106,29 @@ impl RendezvousServer {
11061106
async fn handle_listener_inner(
11071107
&mut self,
11081108
stream: TcpStream,
1109-
addr: SocketAddr,
1109+
mut addr: SocketAddr,
11101110
key: &str,
11111111
ws: bool,
11121112
) -> ResultType<()> {
11131113
let mut sink;
11141114
if ws {
1115-
let ws_stream = tokio_tungstenite::accept_async(stream).await?;
1115+
use tokio_tungstenite::tungstenite::handshake::server::{Request, Response};
1116+
let callback = |req: &Request, response: Response| {
1117+
let headers = req.headers();
1118+
let real_ip = headers
1119+
.get("X-Real-IP")
1120+
.or_else(|| headers.get("X-Forwarded-For"))
1121+
.and_then(|header_value| header_value.to_str().ok());
1122+
if let Some(ip) = real_ip {
1123+
if ip.contains('.') {
1124+
addr = format!("{ip}:0").parse().unwrap_or(addr);
1125+
} else {
1126+
addr = format!("[{ip}]:0").parse().unwrap_or(addr);
1127+
}
1128+
}
1129+
Ok(response)
1130+
};
1131+
let ws_stream = tokio_tungstenite::accept_hdr_async(stream, callback).await?;
11161132
let (a, mut b) = ws_stream.split();
11171133
sink = Some(Sink::Ws(a));
11181134
while let Ok(Some(Ok(msg))) = timeout(30_000, b.next()).await {

ui/setup.nsi

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
!define PRODUCT_NAME "rustdesk_server"
1616
!define PRODUCT_DESCRIPTION "Installer for ${PRODUCT_NAME}"
1717
!define COPYRIGHT "Copyright © 2021"
18-
!define VERSION "1.1.10"
18+
!define VERSION "1.1.12"
1919

2020
VIProductVersion "${VERSION}.0"
2121
VIAddVersionKey "ProductName" "${PRODUCT_NAME}"

0 commit comments

Comments
 (0)