Skip to content

Commit e2f272b

Browse files
committed
fix: guess default ports for HTTP/HTTPS
1 parent 8422075 commit e2f272b

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

  • protocol/src/stream/streams/http_tunnel

protocol/src/stream/streams/http_tunnel/proxy.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,12 @@ pub async fn run_proxy_mode(
3232
ctx: &HttpAccessConnContext,
3333
req: Request<hyper::body::Incoming>,
3434
) -> ReturnType {
35+
let scheme = || req.uri().scheme_str();
36+
let port = req.uri().port_u16();
37+
let port = port.or_else(|| scheme().and_then(http_default_port));
3538
let dst_addr = {
3639
let host = req.uri().host().ok_or(TunnelError::HttpNoHost)?;
37-
let port = req.uri().port_u16().ok_or(TunnelError::HttpNoPort)?;
40+
let port = port.ok_or(TunnelError::HttpNoPort)?;
3841
let addr = InternetAddr::from_host_and_port(host, port)?;
3942
StreamAddr {
4043
address: addr,
@@ -44,6 +47,15 @@ pub async fn run_proxy_mode(
4447
dispatch(dst_addr, req, ctx).await
4548
}
4649

50+
fn http_default_port(scheme: &str) -> Option<u16> {
51+
let scheme = scheme.to_lowercase();
52+
Some(match scheme.as_str() {
53+
"http" => 80,
54+
"https" => 443,
55+
_ => return None,
56+
})
57+
}
58+
4759
#[instrument(skip_all, fields(addr = ?dst_addr))]
4860
async fn dispatch(
4961
dst_addr: StreamAddr,

0 commit comments

Comments
 (0)