Skip to content

Commit

Permalink
fix(awc): ws host req header includes port
Browse files Browse the repository at this point in the history
  • Loading branch information
robjtede committed Aug 10, 2024
1 parent e0918fb commit 5ad92c0
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
4 changes: 3 additions & 1 deletion awc/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 2,13 @@

## Unreleased

- Fix WebSocket `Host` request header value when using a non-default port.

## 3.5.0

- Add `rustls-0_23`, `rustls-0_23-webpki-roots`, and `rustls-0_23-native-roots` crate features.
- Add `awc::Connector::rustls_0_23()` constructor.
- Fix `rustls-0_22-native-roots` root store lookup
- Fix `rustls-0_22-native-roots` root store lookup.
- Update `brotli` dependency to `6`.
- Minimum supported Rust version (MSRV) is now 1.72.

Expand Down
27 changes: 25 additions & 2 deletions awc/src/ws.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,8 257,9 @@ impl WebsocketsRequest {
return Err(e.into());
}

// validate uri
// validate URI
let uri = &self.head.uri;

if uri.host().is_none() {
return Err(InvalidUrl::MissingHost.into());
} else if uri.scheme().is_none() {
Expand All @@ -273,9 274,12 @@ impl WebsocketsRequest {
}

if !self.head.headers.contains_key(header::HOST) {
let hostname = uri.host().unwrap();
let port = uri.port();

self.head.headers.insert(
header::HOST,
HeaderValue::from_str(uri.host().unwrap()).unwrap(),
HeaderValue::from_str(&Host { hostname, port }.to_string()).unwrap(),
);
}

Expand Down Expand Up @@ -434,6 438,25 @@ impl fmt::Debug for WebsocketsRequest {
}
}

/// Formatter for host (hostname port) header values.
struct Host<'a> {
hostname: &'a str,
port: Option<http::uri::Port<&'a str>>,
}

impl<'a> fmt::Display for Host<'a> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.hostname)?;

if let Some(port) = &self.port {
f.write_str(":")?;
f.write_str(port.as_str())?;
}

Ok(())
}
}

#[cfg(test)]
mod tests {
use super::*;
Expand Down

0 comments on commit 5ad92c0

Please sign in to comment.