From: "Fabian Grünbichler" <f.gruenbichler@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox 12/13] http: rustfmt
Date: Fri, 14 May 2021 15:44:48 +0200 [thread overview]
Message-ID: <20210514134457.1447930-13-f.gruenbichler@proxmox.com> (raw)
In-Reply-To: <20210514134457.1447930-1-f.gruenbichler@proxmox.com>
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---
proxmox-http/src/http/client/connector.rs | 78 ++++++++++++-----------
proxmox-http/src/http/client/simple.rs | 45 ++++++-------
proxmox-http/src/http/helpers.rs | 11 ++--
proxmox-http/src/http/proxy_config.rs | 8 +--
proxmox-http/src/http/wrapper.rs | 65 +++++--------------
5 files changed, 89 insertions(+), 118 deletions(-)
diff --git a/proxmox-http/src/http/client/connector.rs b/proxmox-http/src/http/client/connector.rs
index a302dd1..d69fdf2 100644
--- a/proxmox-http/src/http/client/connector.rs
+++ b/proxmox-http/src/http/client/connector.rs
@@ -1,4 +1,4 @@
-use anyhow::{Error, format_err, bail};
+use anyhow::{bail, format_err, Error};
use std::os::unix::io::AsRawFd;
use std::pin::Pin;
use std::sync::Arc;
@@ -8,11 +8,7 @@ use futures::*;
use http::Uri;
use hyper::client::HttpConnector;
use openssl::ssl::SslConnector;
-use tokio::io::{
- AsyncRead,
- AsyncReadExt,
- AsyncWriteExt,
-};
+use tokio::io::{AsyncRead, AsyncReadExt, AsyncWriteExt};
use tokio::net::TcpStream;
use tokio_openssl::SslStream;
@@ -29,7 +25,11 @@ pub struct HttpsConnector {
}
impl HttpsConnector {
- pub fn with_connector(mut connector: HttpConnector, ssl_connector: SslConnector, tcp_keepalive: u32) -> Self {
+ pub fn with_connector(
+ mut connector: HttpConnector,
+ ssl_connector: SslConnector,
+ tcp_keepalive: u32,
+ ) -> Self {
connector.enforce_http(false);
Self {
connector,
@@ -61,21 +61,27 @@ impl HttpsConnector {
Ok(())
}
- async fn parse_connect_response<R: AsyncRead + Unpin>(
- stream: &mut R,
- ) -> Result<(), Error> {
-
+ async fn parse_connect_response<R: AsyncRead + Unpin>(stream: &mut R) -> Result<(), Error> {
let mut data: Vec<u8> = Vec::new();
let mut buffer = [0u8; 256];
const END_MARK: &[u8; 4] = b"\r\n\r\n";
'outer: loop {
let n = stream.read(&mut buffer[..]).await?;
- if n == 0 { break; }
- let search_start = if data.len() > END_MARK.len() { data.len() - END_MARK.len() + 1 } else { 0 };
+ if n == 0 {
+ break;
+ }
+ let search_start = if data.len() > END_MARK.len() {
+ data.len() - END_MARK.len() + 1
+ } else {
+ 0
+ };
data.extend(&buffer[..n]);
if data.len() >= END_MARK.len() {
- if let Some(pos) = data[search_start..].windows(END_MARK.len()).position(|w| w == END_MARK) {
+ if let Some(pos) = data[search_start..]
+ .windows(END_MARK.len())
+ .position(|w| w == END_MARK)
+ {
let response = String::from_utf8_lossy(&data);
let status_line = match response.split("\r\n").next() {
Some(status) => status,
@@ -89,7 +95,8 @@ impl HttpsConnector {
break 'outer;
}
}
- if data.len() > 1024*32 { // max 32K (random chosen limit)
+ if data.len() > 1024 * 32 {
+ // max 32K (random chosen limit)
bail!("too many bytes");
}
}
@@ -101,12 +108,11 @@ impl hyper::service::Service<Uri> for HttpsConnector {
type Response = MaybeTlsStream<TcpStream>;
type Error = Error;
#[allow(clippy::type_complexity)]
- type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send + 'static>>;
+ type Future =
+ Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>> + Send + 'static>>;
fn poll_ready(&mut self, ctx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
- self.connector
- .poll_ready(ctx)
- .map_err(|err| err.into())
+ self.connector.poll_ready(ctx).map_err(|err| err.into())
}
fn call(&mut self, dst: Uri) -> Self::Future {
@@ -123,7 +129,6 @@ impl hyper::service::Service<Uri> for HttpsConnector {
let keepalive = self.tcp_keepalive;
if let Some(ref proxy) = self.proxy {
-
let use_connect = is_https || proxy.force_connect;
let proxy_authority = match helpers::build_authority(&proxy.host, proxy.port) {
@@ -145,17 +150,16 @@ impl hyper::service::Service<Uri> for HttpsConnector {
if use_connect {
async move {
-
- let mut tcp_stream = connector
- .call(proxy_uri)
- .await
- .map_err(|err| format_err!("error connecting to {} - {}", proxy_authority, err))?;
+ let mut tcp_stream = connector.call(proxy_uri).await.map_err(|err| {
+ format_err!("error connecting to {} - {}", proxy_authority, err)
+ })?;
let _ = set_tcp_keepalive(tcp_stream.as_raw_fd(), keepalive);
let mut connect_request = format!("CONNECT {0}:{1} HTTP/1.1\r\n", host, port);
if let Some(authorization) = authorization {
- connect_request.push_str(&format!("Proxy-Authorization: {}\r\n", authorization));
+ connect_request
+ .push_str(&format!("Proxy-Authorization: {}\r\n", authorization));
}
connect_request.push_str(&format!("Host: {0}:{1}\r\n\r\n", host, port));
@@ -169,18 +173,19 @@ impl hyper::service::Service<Uri> for HttpsConnector {
} else {
Ok(MaybeTlsStream::Normal(tcp_stream))
}
- }.boxed()
+ }
+ .boxed()
} else {
- async move {
- let tcp_stream = connector
- .call(proxy_uri)
- .await
- .map_err(|err| format_err!("error connecting to {} - {}", proxy_authority, err))?;
+ async move {
+ let tcp_stream = connector.call(proxy_uri).await.map_err(|err| {
+ format_err!("error connecting to {} - {}", proxy_authority, err)
+ })?;
- let _ = set_tcp_keepalive(tcp_stream.as_raw_fd(), keepalive);
+ let _ = set_tcp_keepalive(tcp_stream.as_raw_fd(), keepalive);
- Ok(MaybeTlsStream::Proxied(tcp_stream))
- }.boxed()
+ Ok(MaybeTlsStream::Proxied(tcp_stream))
+ }
+ .boxed()
}
} else {
async move {
@@ -197,7 +202,8 @@ impl hyper::service::Service<Uri> for HttpsConnector {
} else {
Ok(MaybeTlsStream::Normal(tcp_stream))
}
- }.boxed()
+ }
+ .boxed()
}
}
}
diff --git a/proxmox-http/src/http/client/simple.rs b/proxmox-http/src/http/client/simple.rs
index 6783781..b6e6d5a 100644
--- a/proxmox-http/src/http/client/simple.rs
+++ b/proxmox-http/src/http/client/simple.rs
@@ -1,16 +1,13 @@
-use anyhow::{Error, format_err, bail};
+use anyhow::{bail, format_err, Error};
use std::collections::HashMap;
-use hyper::Body;
+use futures::*;
+use http::{HeaderValue, Request, Response};
use hyper::client::{Client, HttpConnector};
-use http::{Request, Response, HeaderValue};
+use hyper::Body;
use openssl::ssl::{SslConnector, SslMethod};
-use futures::*;
-use crate::http::{
- ProxyConfig,
- client::HttpsConnector,
-};
+use crate::http::{client::HttpsConnector, ProxyConfig};
/// Options for a SimpleHttp client.
#[derive(Default)]
@@ -27,7 +24,7 @@ impl SimpleHttpOptions {
fn get_proxy_authorization(&self) -> Option<String> {
if let Some(ref proxy_config) = self.proxy_config {
if !proxy_config.force_connect {
- return proxy_config.authorization.clone();
+ return proxy_config.authorization.clone();
}
}
@@ -55,7 +52,11 @@ impl SimpleHttp {
pub fn with_ssl_connector(ssl_connector: SslConnector, options: SimpleHttpOptions) -> Self {
let connector = HttpConnector::new();
- let mut https = HttpsConnector::with_connector(connector, ssl_connector, options.tcp_keepalive.unwrap_or(7200));
+ let mut https = HttpsConnector::with_connector(
+ connector,
+ ssl_connector,
+ options.tcp_keepalive.unwrap_or(7200),
+ );
if let Some(ref proxy_config) = options.proxy_config {
https.set_proxy(proxy_config.clone());
}
@@ -71,12 +72,10 @@ impl SimpleHttp {
fn add_proxy_headers(&self, request: &mut Request<Body>) -> Result<(), Error> {
if request.uri().scheme() != Some(&http::uri::Scheme::HTTPS) {
if let Some(ref authorization) = self.options.get_proxy_authorization() {
- request
- .headers_mut()
- .insert(
- http::header::PROXY_AUTHORIZATION,
- HeaderValue::from_str(authorization)?,
- );
+ request.headers_mut().insert(
+ http::header::PROXY_AUTHORIZATION,
+ HeaderValue::from_str(authorization)?,
+ );
}
}
Ok(())
@@ -89,13 +88,13 @@ impl SimpleHttp {
HeaderValue::from_str(Self::DEFAULT_USER_AGENT_STRING)?
};
- request.headers_mut().insert(hyper::header::USER_AGENT, user_agent);
+ request
+ .headers_mut()
+ .insert(hyper::header::USER_AGENT, user_agent);
self.add_proxy_headers(&mut request)?;
- self.client.request(request)
- .map_err(Error::from)
- .await
+ self.client.request(request).map_err(Error::from).await
}
pub async fn post(
@@ -104,7 +103,6 @@ impl SimpleHttp {
body: Option<String>,
content_type: Option<&str>,
) -> Result<Response<Body>, Error> {
-
let body = if let Some(body) = body {
Body::from(body)
} else {
@@ -126,10 +124,7 @@ impl SimpleHttp {
uri: &str,
extra_headers: Option<&HashMap<String, String>>,
) -> Result<String, Error> {
-
- let mut request = Request::builder()
- .method("GET")
- .uri(uri);
+ let mut request = Request::builder().method("GET").uri(uri);
if let Some(hs) = extra_headers {
for (h, v) in hs.iter() {
diff --git a/proxmox-http/src/http/helpers.rs b/proxmox-http/src/http/helpers.rs
index 3f663d2..ca67161 100644
--- a/proxmox-http/src/http/helpers.rs
+++ b/proxmox-http/src/http/helpers.rs
@@ -6,10 +6,11 @@ use http::uri::Authority;
pub fn build_authority(host: &str, port: u16) -> Result<Authority, Error> {
let bytes = host.as_bytes();
let len = bytes.len();
- let authority = if len > 3 && bytes.contains(&b':') && bytes[0] != b'[' && bytes[len-1] != b']' {
- format!("[{}]:{}", host, port).parse()?
- } else {
- format!("{}:{}", host, port).parse()?
- };
+ let authority =
+ if len > 3 && bytes.contains(&b':') && bytes[0] != b'[' && bytes[len - 1] != b']' {
+ format!("[{}]:{}", host, port).parse()?
+ } else {
+ format!("{}:{}", host, port).parse()?
+ };
Ok(authority)
}
diff --git a/proxmox-http/src/http/proxy_config.rs b/proxmox-http/src/http/proxy_config.rs
index 9eac3bd..3fe7cba 100644
--- a/proxmox-http/src/http/proxy_config.rs
+++ b/proxmox-http/src/http/proxy_config.rs
@@ -1,4 +1,4 @@
-use anyhow::{Error, format_err, bail};
+use anyhow::{bail, format_err, Error};
use http::Uri;
@@ -16,7 +16,6 @@ pub struct ProxyConfig {
impl ProxyConfig {
/// Parse proxy config from ALL_PROXY environment var
pub fn from_proxy_env() -> Result<Option<ProxyConfig>, Error> {
-
// We only support/use ALL_PROXY environment
match std::env::var_os("ALL_PROXY") {
@@ -70,7 +69,8 @@ impl ProxyConfig {
authorization,
force_connect: false,
})
- }).map_err(|err| format_err!("parse_proxy_url failed: {}", err))
+ })
+ .map_err(|err| format_err!("parse_proxy_url failed: {}", err))
}
/// Assemble canonical proxy string (including scheme and port)
@@ -78,7 +78,7 @@ impl ProxyConfig {
let authority = helpers::build_authority(&self.host, self.port)?;
Ok(match self.authorization {
None => format!("http://{}", authority),
- Some(ref authorization) => format!("http://{}@{}", authorization, authority)
+ Some(ref authorization) => format!("http://{}@{}", authorization, authority),
})
}
}
diff --git a/proxmox-http/src/http/wrapper.rs b/proxmox-http/src/http/wrapper.rs
index 3399b28..9ed4221 100644
--- a/proxmox-http/src/http/wrapper.rs
+++ b/proxmox-http/src/http/wrapper.rs
@@ -2,7 +2,7 @@ use std::io;
use std::pin::Pin;
use std::task::{Context, Poll};
-use hyper::client::connect::{Connection, Connected};
+use hyper::client::connect::{Connected, Connection};
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
use tokio_openssl::SslStream;
@@ -22,15 +22,9 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncRead for MaybeTlsStream<S> {
buf: &mut ReadBuf,
) -> Poll<Result<(), io::Error>> {
match self.get_mut() {
- MaybeTlsStream::Normal(ref mut s) => {
- Pin::new(s).poll_read(cx, buf)
- }
- MaybeTlsStream::Proxied(ref mut s) => {
- Pin::new(s).poll_read(cx, buf)
- }
- MaybeTlsStream::Secured(ref mut s) => {
- Pin::new(s).poll_read(cx, buf)
- }
+ MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_read(cx, buf),
+ MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_read(cx, buf),
+ MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_read(cx, buf),
}
}
}
@@ -42,15 +36,9 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for MaybeTlsStream<S> {
buf: &[u8],
) -> Poll<Result<usize, io::Error>> {
match self.get_mut() {
- MaybeTlsStream::Normal(ref mut s) => {
- Pin::new(s).poll_write(cx, buf)
- }
- MaybeTlsStream::Proxied(ref mut s) => {
- Pin::new(s).poll_write(cx, buf)
- }
- MaybeTlsStream::Secured(ref mut s) => {
- Pin::new(s).poll_write(cx, buf)
- }
+ MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_write(cx, buf),
+ MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_write(cx, buf),
+ MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_write(cx, buf),
}
}
@@ -60,15 +48,9 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for MaybeTlsStream<S> {
bufs: &[io::IoSlice<'_>],
) -> Poll<Result<usize, io::Error>> {
match self.get_mut() {
- MaybeTlsStream::Normal(ref mut s) => {
- Pin::new(s).poll_write_vectored(cx, bufs)
- }
- MaybeTlsStream::Proxied(ref mut s) => {
- Pin::new(s).poll_write_vectored(cx, bufs)
- }
- MaybeTlsStream::Secured(ref mut s) => {
- Pin::new(s).poll_write_vectored(cx, bufs)
- }
+ MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_write_vectored(cx, bufs),
+ MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_write_vectored(cx, bufs),
+ MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_write_vectored(cx, bufs),
}
}
@@ -82,36 +64,23 @@ impl<S: AsyncRead + AsyncWrite + Unpin> AsyncWrite for MaybeTlsStream<S> {
fn poll_flush(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), io::Error>> {
match self.get_mut() {
- MaybeTlsStream::Normal(ref mut s) => {
- Pin::new(s).poll_flush(cx)
- }
- MaybeTlsStream::Proxied(ref mut s) => {
- Pin::new(s).poll_flush(cx)
- }
- MaybeTlsStream::Secured(ref mut s) => {
- Pin::new(s).poll_flush(cx)
- }
+ MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_flush(cx),
+ MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_flush(cx),
+ MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_flush(cx),
}
}
fn poll_shutdown(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Result<(), io::Error>> {
match self.get_mut() {
- MaybeTlsStream::Normal(ref mut s) => {
- Pin::new(s).poll_shutdown(cx)
- }
- MaybeTlsStream::Proxied(ref mut s) => {
- Pin::new(s).poll_shutdown(cx)
- }
- MaybeTlsStream::Secured(ref mut s) => {
- Pin::new(s).poll_shutdown(cx)
- }
+ MaybeTlsStream::Normal(ref mut s) => Pin::new(s).poll_shutdown(cx),
+ MaybeTlsStream::Proxied(ref mut s) => Pin::new(s).poll_shutdown(cx),
+ MaybeTlsStream::Secured(ref mut s) => Pin::new(s).poll_shutdown(cx),
}
}
}
// we need this for the hyper http client
-impl <S: Connection + AsyncRead + AsyncWrite + Unpin> Connection for MaybeTlsStream<S>
-{
+impl<S: Connection + AsyncRead + AsyncWrite + Unpin> Connection for MaybeTlsStream<S> {
fn connected(&self) -> Connected {
match self {
MaybeTlsStream::Normal(s) => s.connected(),
--
2.20.1
next prev parent reply other threads:[~2021-05-14 13:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-14 13:44 [pbs-devel] [PATCH proxmox(-backup) 00/21] pull HTTP code into proxmox/proxmox-http Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 01/13] proxmox: add missing +router -> futures dep Fabian Grünbichler
2021-05-17 8:22 ` [pbs-devel] applied: " Dietmar Maurer
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 02/13] meta: add empty proxmox-http sub-crate Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 03/13] http: takeover websocket feature from proxmox Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 04/13] http: make clippy happy Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 05/13] proxmox: takeover socket helper from proxmox_backup Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 06/13] http: takeover MaybeTlsStream " Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 07/13] http: takeover build_authority helper " Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 08/13] http: takeover ProxyConfig " Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 09/13] http: takeover tools::http " Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 10/13] http: takeover simple HTTP client " Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 11/13] http: make clippy happy Fabian Grünbichler
2021-05-14 13:44 ` Fabian Grünbichler [this message]
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox 13/13] http: update d/control Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 1/8] move websocket to new 'proxmox_http' crate Fabian Grünbichler
2021-05-17 8:35 ` [pbs-devel] applied: " Dietmar Maurer
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 2/8] refactor: move socket helper to proxmox crate Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 3/8] move MaybeTlsStream wrapper to proxmox_http Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 4/8] HttpsConnector: make keepalive configurable Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 5/8] move ProxyConfig to proxmox_http Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 6/8] move tools::http " Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 7/8] SimpleHttp: factor out product-specific bits Fabian Grünbichler
2021-05-14 13:44 ` [pbs-devel] [PATCH proxmox-backup 8/8] move SimpleHttp to proxmox_http Fabian Grünbichler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210514134457.1447930-13-f.gruenbichler@proxmox.com \
--to=f.gruenbichler@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox