This commit is contained in:
nora 2023-03-07 14:12:35 +01:00
parent 189f24e53b
commit 944f82360f
34 changed files with 95 additions and 134 deletions

View file

@ -6,14 +6,13 @@ use bytes::Bytes;
use futures_channel::mpsc; use futures_channel::mpsc;
use futures_channel::oneshot; use futures_channel::oneshot;
use futures_core::Stream; use futures_core::Stream;
#[cfg(feature = "stream")]
use futures_util::TryStreamExt;
use http::HeaderMap; use http::HeaderMap;
use http_body::{Body as HttpBody, SizeHint}; use http_body::{Body as HttpBody, SizeHint};
use super::DecodedLength; use super::DecodedLength;
#[cfg(feature = "stream")] #[cfg(feature = "stream")]
use crate::common::sync_wrapper::SyncWrapper; use crate::common::sync_wrapper::SyncWrapper;
use crate::common::Future;
#[cfg(all(feature = "client", any(feature = "http1", feature = "http2")))] #[cfg(all(feature = "client", any(feature = "http1", feature = "http2")))]
use crate::common::Never; use crate::common::Never;
use crate::common::{task, watch, Pin, Poll}; use crate::common::{task, watch, Pin, Poll};

View file

@ -25,13 +25,6 @@ mod aggregate;
mod body; mod body;
mod length; mod length;
mod to_bytes; mod to_bytes;
/// An optimization to try to take a full body if immediately available.
///
/// This is currently limited to *only* `hyper::Body`s.
#[cfg(feature = "http1")]
pub(crate) fn take_full_data<T: HttpBody + 'static>(body: &mut T) -> Option<T::Data> {
loop {}
}
fn _assert_send_sync() { fn _assert_send_sync() {
loop {} loop {}
} }

View file

@ -1,4 +1,4 @@
use bytes::{Buf, BufMut, Bytes}; use bytes::{Bytes};
use super::HttpBody; use super::HttpBody;
/// Concatenate the buffers from a body into a single `Bytes` asynchronously. /// Concatenate the buffers from a body into a single `Bytes` asynchronously.
/// ///

View file

@ -1,17 +1,17 @@
use std::error::Error as StdError; use std::error::Error as StdError;
use std::fmt; use std::fmt;
use std::mem;
use std::time::Duration; use std::time::Duration;
use futures_channel::oneshot;
use futures_util::future::{self, Either, FutureExt as _, TryFutureExt as _}; use futures_util::future::{self, Either, FutureExt as _, TryFutureExt as _};
use http::header::{HeaderValue, HOST};
use http::uri::{Port, Scheme}; use http::uri::{Port, Scheme};
use http::{Method, Request, Response, Uri, Version}; use http::{Request, Response, Uri, Version};
use tracing::{debug, trace, warn}; use tracing::{debug, trace};
use super::conn; use super::conn;
use super::connect::{self, sealed::Connect, Alpn, Connected, Connection}; use super::connect::{self, sealed::Connect, Alpn, Connected, Connection};
use super::pool::{ use super::pool::{
self, CheckoutIsClosedError, Key as PoolKey, Pool, Poolable, Pooled, Reservation, self, Key as PoolKey, Pool, Poolable, Pooled, Reservation,
}; };
#[cfg(feature = "tcp")] #[cfg(feature = "tcp")]
use super::HttpConnector; use super::HttpConnector;

View file

@ -57,7 +57,7 @@ use std::error::Error as StdError;
use std::fmt; use std::fmt;
#[cfg(not(all(feature = "http1", feature = "http2")))] #[cfg(not(all(feature = "http1", feature = "http2")))]
use std::marker::PhantomData; use std::marker::PhantomData;
use std::sync::Arc;
#[cfg(all(feature = "runtime", feature = "http2"))] #[cfg(all(feature = "runtime", feature = "http2"))]
use std::time::Duration; use std::time::Duration;
use bytes::Bytes; use bytes::Bytes;
@ -77,8 +77,7 @@ use crate::common::{
}; };
use crate::proto; use crate::proto;
use crate::rt::Executor; use crate::rt::Executor;
#[cfg(feature = "http1")]
use crate::upgrade::Upgraded;
use crate::{Body, Request, Response}; use crate::{Body, Request, Response};
#[cfg(feature = "http1")] #[cfg(feature = "http1")]
type Http1Dispatcher<T, B> = proto::dispatch::Dispatcher< type Http1Dispatcher<T, B> = proto::dispatch::Dispatcher<

View file

@ -24,7 +24,7 @@
use std::error::Error; use std::error::Error;
use std::future::Future; use std::future::Future;
use std::net::{ use std::net::{
Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6, ToSocketAddrs, Ipv4Addr, Ipv6Addr, SocketAddr,
}; };
use std::pin::Pin; use std::pin::Pin;
use std::str::FromStr; use std::str::FromStr;
@ -32,7 +32,7 @@ use std::task::{self, Poll};
use std::{fmt, io, vec}; use std::{fmt, io, vec};
use tokio::task::JoinHandle; use tokio::task::JoinHandle;
use tower_service::Service; use tower_service::Service;
use tracing::debug;
pub(super) use self::sealed::Resolve; pub(super) use self::sealed::Resolve;
/// A domain name to resolve into IP addresses. /// A domain name to resolve into IP addresses.
#[derive(Clone, Hash, Eq, PartialEq)] #[derive(Clone, Hash, Eq, PartialEq)]

View file

@ -8,13 +8,13 @@ use std::pin::Pin;
use std::sync::Arc; use std::sync::Arc;
use std::task::{self, Poll}; use std::task::{self, Poll};
use std::time::Duration; use std::time::Duration;
use futures_util::future::Either;
use http::uri::{Scheme, Uri}; use http::uri::{Uri};
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use tokio::net::{TcpSocket, TcpStream}; use tokio::net::{TcpSocket, TcpStream};
use tokio::time::Sleep; use tokio::time::Sleep;
use tracing::{debug, trace, warn}; use tracing::{warn};
use super::dns::{self, resolve, GaiResolver, Resolve}; use super::dns::{self, GaiResolver, Resolve};
use super::{Connected, Connection}; use super::{Connected, Connection};
/// A connector for the `http` scheme. /// A connector for the `http` scheme.
/// ///

View file

@ -1,9 +1,8 @@
#[cfg(feature = "http2")] #[cfg(feature = "http2")]
use std::future::Future; use std::future::Future;
use futures_util::FutureExt;
use tokio::sync::{mpsc, oneshot}; use tokio::sync::{mpsc, oneshot};
#[cfg(feature = "http2")]
use crate::common::Pin;
use crate::common::{task, Poll}; use crate::common::{task, Poll};
pub(crate) type RetryPromise<T, U> = oneshot::Receiver< pub(crate) type RetryPromise<T, U> = oneshot::Receiver<
Result<U, (crate::Error, Option<T>)>, Result<U, (crate::Error, Option<T>)>,

View file

@ -8,7 +8,7 @@ use std::time::{Duration, Instant};
use futures_channel::oneshot; use futures_channel::oneshot;
#[cfg(feature = "runtime")] #[cfg(feature = "runtime")]
use tokio::time::{Duration, Instant, Interval}; use tokio::time::{Duration, Instant, Interval};
use tracing::{debug, trace};
use super::client::Ver; use super::client::Ver;
use crate::common::{exec::Exec, task, Future, Pin, Poll, Unpin}; use crate::common::{exec::Exec, task, Future, Pin, Poll, Unpin};
#[allow(missing_debug_implementations)] #[allow(missing_debug_implementations)]

View file

@ -4,7 +4,7 @@
use std::error::Error as StdError; use std::error::Error as StdError;
use std::future::Future; use std::future::Future;
use std::marker::PhantomData; use std::marker::PhantomData;
use tracing::debug;
use super::conn::{Builder, SendRequest}; use super::conn::{Builder, SendRequest};
use crate::{ use crate::{
body::HttpBody, common::{task, Pin, Poll}, body::HttpBody, common::{task, Pin, Poll},

View file

@ -1,6 +1,6 @@
use std::collections::VecDeque; use std::collections::VecDeque;
use std::io::IoSlice; use std::io::IoSlice;
use bytes::{Buf, BufMut, Bytes, BytesMut}; use bytes::{Buf, Bytes};
pub(crate) struct BufList<T> { pub(crate) struct BufList<T> {
bufs: VecDeque<T>, bufs: VecDeque<T>,
} }

View file

@ -1,10 +1,10 @@
use std::cell::RefCell; use std::cell::RefCell;
use std::fmt::{self, Write}; use std::fmt::{self};
use std::str; use std::str;
use std::time::{Duration, SystemTime}; use std::time::{SystemTime};
#[cfg(feature = "http2")] #[cfg(feature = "http2")]
use http::header::HeaderValue; use http::header::HeaderValue;
use httpdate::HttpDate;
pub(crate) const DATE_VALUE_LENGTH: usize = 29; pub(crate) const DATE_VALUE_LENGTH: usize = 29;
#[cfg(feature = "http1")] #[cfg(feature = "http1")]
pub(crate) fn extend(dst: &mut Vec<u8>) { pub(crate) fn extend(dst: &mut Vec<u8>) {

View file

@ -1,4 +1,4 @@
use std::mem;
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use tokio::sync::watch; use tokio::sync::watch;
use super::{task, Future, Pin, Poll}; use super::{task, Future, Pin, Poll};

View file

@ -1,6 +1,6 @@
use std::marker::Unpin; use std::marker::Unpin;
use std::{cmp, io}; use std::{io};
use bytes::{Buf, Bytes}; use bytes::{Bytes};
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
use crate::common::{task, Pin, Poll}; use crate::common::{task, Pin, Poll};
/// Combine a buffer with an IO, rewinding reads to use the buffer. /// Combine a buffer with an IO, rewinding reads to use the buffer.

View file

@ -5,7 +5,7 @@
//! - The value `0` is reserved for closed. //! - The value `0` is reserved for closed.
use futures_util::task::AtomicWaker; use futures_util::task::AtomicWaker;
use std::sync::{ use std::sync::{
atomic::{AtomicUsize, Ordering}, atomic::{AtomicUsize},
Arc, Arc,
}; };
use std::task; use std::task;

View file

@ -11,8 +11,7 @@ use std::collections::HashMap;
use std::fmt; use std::fmt;
#[cfg(any(feature = "http1", feature = "ffi"))] #[cfg(any(feature = "http1", feature = "ffi"))]
mod h1_reason_phrase; mod h1_reason_phrase;
#[cfg(any(feature = "http1", feature = "ffi"))]
pub(crate) use h1_reason_phrase::ReasonPhrase;
#[cfg(feature = "http2")] #[cfg(feature = "http2")]
/// Represents the `:protocol` pseudo-header used by /// Represents the `:protocol` pseudo-header used by
/// the [Extended CONNECT Protocol]. /// the [Extended CONNECT Protocol].

View file

@ -32,23 +32,7 @@ use bytes::Bytes;
/// its contents will be written in place of the canonical reason phrase when responding via HTTP/1. /// its contents will be written in place of the canonical reason phrase when responding via HTTP/1.
#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct ReasonPhrase(Bytes); pub(crate) struct ReasonPhrase(Bytes);
impl ReasonPhrase { impl ReasonPhrase {}
/// Gets the reason phrase as bytes.
pub(crate) fn as_bytes(&self) -> &[u8] {
loop {}
}
/// Converts a static byte slice to a reason phrase.
pub(crate) fn from_static(reason: &'static [u8]) -> Self {
loop {}
}
/// Converts a `Bytes` directly into a `ReasonPhrase` without validating.
///
/// Use with care; invalid bytes in a reason phrase can cause serious security problems if
/// emitted in a response.
pub(crate) unsafe fn from_bytes_unchecked(reason: Bytes) -> Self {
loop {}
}
}
impl TryFrom<&[u8]> for ReasonPhrase { impl TryFrom<&[u8]> for ReasonPhrase {
type Error = InvalidReasonPhrase; type Error = InvalidReasonPhrase;
fn try_from(reason: &[u8]) -> Result<Self, Self::Error> { fn try_from(reason: &[u8]) -> Result<Self, Self::Error> {
@ -98,12 +82,6 @@ impl std::fmt::Display for InvalidReasonPhrase {
} }
} }
impl std::error::Error for InvalidReasonPhrase {} impl std::error::Error for InvalidReasonPhrase {}
const fn is_valid_byte(b: u8) -> bool {
loop {}
}
const fn find_invalid_byte(bytes: &[u8]) -> Option<u8> {
loop {}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View file

@ -1,6 +1,5 @@
#[cfg(feature = "http1")]
use bytes::BytesMut;
use http::header::CONTENT_LENGTH;
use http::header::{HeaderValue, ValueIter}; use http::header::{HeaderValue, ValueIter};
use http::HeaderMap; use http::HeaderMap;
#[cfg(all(feature = "http2", feature = "client"))] #[cfg(all(feature = "http2", feature = "client"))]

View file

@ -4,18 +4,18 @@ use std::marker::PhantomData;
#[cfg(all(feature = "server", feature = "runtime"))] #[cfg(all(feature = "server", feature = "runtime"))]
use std::time::Duration; use std::time::Duration;
use bytes::{Buf, Bytes}; use bytes::{Buf, Bytes};
use http::header::{HeaderValue, CONNECTION};
use http::{HeaderMap, Method, Version}; use http::{HeaderMap, Method, Version};
use httparse::ParserConfig; use httparse::ParserConfig;
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
#[cfg(all(feature = "server", feature = "runtime"))] #[cfg(all(feature = "server", feature = "runtime"))]
use tokio::time::Sleep; use tokio::time::Sleep;
use tracing::{debug, error, trace};
use super::io::Buffered; use super::io::Buffered;
use super::{Decoder, Encode, EncodedBuf, Encoder, Http1Transaction, ParseContext, Wants}; use super::{Decoder, EncodedBuf, Encoder, Http1Transaction, Wants};
use crate::body::DecodedLength; use crate::body::DecodedLength;
use crate::common::{task, Pin, Poll, Unpin}; use crate::common::{task, Poll, Unpin};
use crate::headers::connection_keep_alive;
use crate::proto::{BodyLength, MessageHead}; use crate::proto::{BodyLength, MessageHead};
const H2_PREFACE: &[u8] = b"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"; const H2_PREFACE: &[u8] = b"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n";
/// This handles a connection, which will have been established over an /// This handles a connection, which will have been established over an

View file

@ -2,12 +2,12 @@ use std::error::Error as StdError;
use bytes::{Buf, Bytes}; use bytes::{Buf, Bytes};
use http::Request; use http::Request;
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
use tracing::{debug, trace}; use tracing::{trace};
use super::{Http1Transaction, Wants}; use super::{Http1Transaction};
use crate::body::{Body, DecodedLength, HttpBody}; use crate::body::{Body, HttpBody};
use crate::common::{task, Future, Pin, Poll, Unpin}; use crate::common::{task, Future, Pin, Poll, Unpin};
use crate::proto::{BodyLength, Conn, Dispatched, MessageHead, RequestHead}; use crate::proto::{Conn, Dispatched, MessageHead, RequestHead};
use crate::upgrade::OnUpgrade;
pub(crate) struct Dispatcher<D, Bs: HttpBody, I, T> { pub(crate) struct Dispatcher<D, Bs: HttpBody, I, T> {
conn: Conn<I, Bs::Data, T>, conn: Conn<I, Bs::Data, T>,
dispatch: D, dispatch: D,

View file

@ -2,7 +2,7 @@ use std::fmt;
use std::io::IoSlice; use std::io::IoSlice;
use bytes::buf::{Chain, Take}; use bytes::buf::{Chain, Take};
use bytes::Buf; use bytes::Buf;
use tracing::trace;
use super::io::WriteBuf; use super::io::WriteBuf;
type StaticBuf = &'static [u8]; type StaticBuf = &'static [u8];
/// Encoders to handle different Transfer-Encodings. /// Encoders to handle different Transfer-Encodings.

View file

@ -1,20 +1,20 @@
use std::cmp;
use std::fmt; use std::fmt;
#[cfg(all(feature = "server", feature = "runtime"))] #[cfg(all(feature = "server", feature = "runtime"))]
use std::future::Future; use std::future::Future;
use std::io::{self, IoSlice}; use std::io::{self, IoSlice};
use std::marker::Unpin; use std::marker::Unpin;
use std::mem::MaybeUninit;
#[cfg(all(feature = "server", feature = "runtime"))] #[cfg(all(feature = "server", feature = "runtime"))]
use std::time::Duration; use std::time::Duration;
use bytes::{Buf, BufMut, Bytes, BytesMut}; use bytes::{Buf, Bytes, BytesMut};
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::io::{AsyncRead, AsyncWrite};
#[cfg(all(feature = "server", feature = "runtime"))] #[cfg(all(feature = "server", feature = "runtime"))]
use tokio::time::Instant; use tokio::time::Instant;
use tracing::{debug, trace};
use super::{Http1Transaction, ParseContext, ParsedMessage}; use super::{Http1Transaction, ParseContext, ParsedMessage};
use crate::common::buf::BufList; use crate::common::buf::BufList;
use crate::common::{task, Pin, Poll}; use crate::common::{task, Poll};
/// The initial buffer size allocated before trying to read from IO. /// The initial buffer size allocated before trying to read from IO.
pub(crate) const INIT_BUFFER_SIZE: usize = 8192; pub(crate) const INIT_BUFFER_SIZE: usize = 8192;
/// The minimum value that can be set to max buffer size. /// The minimum value that can be set to max buffer size.

View file

@ -11,7 +11,7 @@ pub(crate) use self::conn::Conn;
pub(crate) use self::decode::Decoder; pub(crate) use self::decode::Decoder;
pub(crate) use self::dispatch::Dispatcher; pub(crate) use self::dispatch::Dispatcher;
pub(crate) use self::encode::{EncodedBuf, Encoder}; pub(crate) use self::encode::{EncodedBuf, Encoder};
pub(crate) use self::io::MINIMUM_MAX_BUFFER_SIZE;
mod conn; mod conn;
mod decode; mod decode;
pub(crate) mod dispatch; pub(crate) mod dispatch;

View file

@ -1,24 +1,22 @@
use std::fmt::{self, Write}; use std::fmt::{self};
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use bytes::Bytes;
use bytes::BytesMut; use bytes::BytesMut;
#[cfg(feature = "server")]
use http::header::ValueIter; use http::header::{HeaderName};
use http::header::{self, Entry, HeaderName, HeaderValue}; use http::{HeaderMap, Method, StatusCode};
use http::{HeaderMap, Method, StatusCode, Version};
#[cfg(all(feature = "server", feature = "runtime"))] #[cfg(all(feature = "server", feature = "runtime"))]
use tokio::time::Instant; use tokio::time::Instant;
use tracing::{debug, error, trace, trace_span, warn};
use crate::body::DecodedLength; use crate::body::DecodedLength;
#[cfg(feature = "server")]
use crate::common::date;
use crate::error::Parse; use crate::error::Parse;
use crate::ext::HeaderCaseMap; use crate::ext::HeaderCaseMap;
#[cfg(feature = "ffi")] #[cfg(feature = "ffi")]
use crate::ext::OriginalHeaderOrder; use crate::ext::OriginalHeaderOrder;
use crate::headers;
use crate::proto::h1::{ use crate::proto::h1::{
Encode, Encoder, Http1Transaction, ParseContext, ParseResult, ParsedMessage, Encode, Encoder, Http1Transaction, ParseContext, ParseResult,
}; };
use crate::proto::{BodyLength, MessageHead, RequestHead, RequestLine}; use crate::proto::{BodyLength, MessageHead, RequestHead, RequestLine};
const MAX_HEADERS: usize = 100; const MAX_HEADERS: usize = 100;

View file

@ -1,24 +1,24 @@
use std::error::Error as StdError; use std::error::Error as StdError;
#[cfg(feature = "runtime")] #[cfg(feature = "runtime")]
use std::time::Duration; use std::time::Duration;
use bytes::Bytes;
use futures_channel::{mpsc, oneshot}; use futures_channel::{mpsc, oneshot};
use futures_util::future::{self, Either, FutureExt as _, TryFutureExt as _};
use futures_util::stream::StreamExt as _;
use h2::client::{Builder, SendRequest}; use h2::client::{Builder, SendRequest};
use h2::SendStream; use h2::SendStream;
use http::{Method, StatusCode};
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
use tracing::{debug, trace, warn};
use super::{ping, H2Upgraded, PipeToSendStream, SendBuf}; use super::{ping, SendBuf};
use crate::body::HttpBody; use crate::body::HttpBody;
use crate::client::dispatch::Callback; use crate::client::dispatch::Callback;
use crate::common::{exec::Exec, task, Future, Never, Pin, Poll}; use crate::common::{exec::Exec, task, Future, Never, Pin, Poll};
use crate::ext::Protocol;
use crate::headers;
use crate::proto::h2::UpgradedSendStream;
use crate::proto::Dispatched; use crate::proto::Dispatched;
use crate::upgrade::Upgraded;
use crate::{Body, Request, Response}; use crate::{Body, Request, Response};
use h2::client::ResponseFuture; use h2::client::ResponseFuture;
type ClientRx<B> = crate::client::dispatch::Receiver<Request<B>, Response<Body>>; type ClientRx<B> = crate::client::dispatch::Receiver<Request<B>, Response<Body>>;

View file

@ -1,14 +1,14 @@
use bytes::{Buf, Bytes}; use bytes::{Buf, Bytes};
use h2::{Reason, RecvStream, SendStream}; use h2::{RecvStream, SendStream};
use http::header::{HeaderName, CONNECTION, TE, TRAILER, TRANSFER_ENCODING, UPGRADE};
use http::HeaderMap; use http::HeaderMap;
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use std::error::Error as StdError; use std::error::Error as StdError;
use std::io::{self, Cursor, IoSlice}; use std::io::{self, Cursor, IoSlice};
use std::mem;
use std::task::Context; use std::task::Context;
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
use tracing::{debug, trace, warn};
use crate::body::HttpBody; use crate::body::HttpBody;
use crate::common::{task, Future, Pin, Poll}; use crate::common::{task, Future, Pin, Poll};
use crate::proto::h2::ping::Recorder; use crate::proto::h2::ping::Recorder;

View file

@ -29,10 +29,10 @@ use std::task::{self, Poll};
use std::time::Duration; use std::time::Duration;
#[cfg(not(feature = "runtime"))] #[cfg(not(feature = "runtime"))]
use std::time::Instant; use std::time::Instant;
use h2::{Ping, PingPong}; use h2::{PingPong};
#[cfg(feature = "runtime")] #[cfg(feature = "runtime")]
use tokio::time::{Instant, Sleep}; use tokio::time::{Instant, Sleep};
use tracing::{debug, trace};
type WindowSize = u32; type WindowSize = u32;
pub(super) fn disabled() -> Recorder { pub(super) fn disabled() -> Recorder {
loop {} loop {}

View file

@ -2,24 +2,24 @@ use std::error::Error as StdError;
use std::marker::Unpin; use std::marker::Unpin;
#[cfg(feature = "runtime")] #[cfg(feature = "runtime")]
use std::time::Duration; use std::time::Duration;
use bytes::Bytes;
use h2::server::{Connection, Handshake, SendResponse}; use h2::server::{Connection, Handshake, SendResponse};
use h2::{Reason, RecvStream}; use h2::{RecvStream};
use http::{Method, Request};
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
use tracing::{debug, trace, warn};
use super::{ping, PipeToSendStream, SendBuf}; use super::{ping, PipeToSendStream, SendBuf};
use crate::body::HttpBody; use crate::body::HttpBody;
use crate::common::exec::ConnStreamExec; use crate::common::exec::ConnStreamExec;
use crate::common::{date, task, Future, Pin, Poll}; use crate::common::{task, Future, Pin, Poll};
use crate::ext::Protocol;
use crate::headers;
use crate::proto::h2::ping::Recorder; use crate::proto::h2::ping::Recorder;
use crate::proto::h2::{H2Upgraded, UpgradedSendStream};
use crate::proto::Dispatched; use crate::proto::Dispatched;
use crate::service::HttpService; use crate::service::HttpService;
use crate::upgrade::{OnUpgrade, Pending, Upgraded}; use crate::upgrade::{Pending};
use crate::{Body, Response}; use crate::{Body, Response};
const DEFAULT_CONN_WINDOW: u32 = 1024 * 1024; const DEFAULT_CONN_WINDOW: u32 = 1024 * 1024;
const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024; const DEFAULT_STREAM_WINDOW: u32 = 1024 * 1024;

View file

@ -53,10 +53,8 @@ use std::marker::PhantomData;
use std::time::Duration; use std::time::Duration;
#[cfg(feature = "http2")] #[cfg(feature = "http2")]
use crate::common::io::Rewind; use crate::common::io::Rewind;
#[cfg(all(feature = "http1", feature = "http2"))]
use crate::error::{Kind, Parse};
#[cfg(feature = "http1")]
use crate::upgrade::Upgraded;
cfg_feature! { cfg_feature! {
#![any(feature = "http1", feature = "http2")] use std::error::Error as StdError; use #![any(feature = "http1", feature = "http2")] use std::error::Error as StdError; use
std::fmt; use bytes::Bytes; use pin_project_lite::pin_project; use tokio::io:: { std::fmt; use bytes::Bytes; use pin_project_lite::pin_project; use tokio::io:: {

View file

@ -6,7 +6,7 @@ use std::net::{SocketAddr, TcpListener as StdTcpListener};
use std::time::Duration; use std::time::Duration;
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
use tracing::trace;
use super::accept::Accept; use super::accept::Accept;
#[cfg(all(feature = "tcp"))] #[cfg(all(feature = "tcp"))]
use super::tcp::AddrIncoming; use super::tcp::AddrIncoming;
@ -467,7 +467,7 @@ where
pub(crate) mod new_svc { pub(crate) mod new_svc {
use std::error::Error as StdError; use std::error::Error as StdError;
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
use tracing::debug;
use super::{Connecting, Watcher}; use super::{Connecting, Watcher};
use crate::body::{Body, HttpBody}; use crate::body::{Body, HttpBody};
use crate::common::exec::ConnStreamExec; use crate::common::exec::ConnStreamExec;

View file

@ -1,12 +1,12 @@
use std::error::Error as StdError; use std::error::Error as StdError;
use pin_project_lite::pin_project; use pin_project_lite::pin_project;
use tokio::io::{AsyncRead, AsyncWrite}; use tokio::io::{AsyncRead, AsyncWrite};
use tracing::debug;
use super::accept::Accept; use super::accept::Accept;
use super::conn::UpgradeableConnection; use super::conn::UpgradeableConnection;
use super::server::{Server, Watcher}; use super::server::{Server, Watcher};
use crate::body::{Body, HttpBody}; use crate::body::{Body, HttpBody};
use crate::common::drain::{self, Draining, Signal, Watch, Watching}; use crate::common::drain::{Draining, Signal, Watch, Watching};
use crate::common::exec::{ConnStreamExec, NewSvcExec}; use crate::common::exec::{ConnStreamExec, NewSvcExec};
use crate::common::{task, Future, Pin, Poll, Unpin}; use crate::common::{task, Future, Pin, Poll, Unpin};
use crate::service::{HttpService, MakeServiceRef}; use crate::service::{HttpService, MakeServiceRef};

View file

@ -5,8 +5,8 @@ use std::time::Duration;
use socket2::TcpKeepalive; use socket2::TcpKeepalive;
use tokio::net::TcpListener; use tokio::net::TcpListener;
use tokio::time::Sleep; use tokio::time::Sleep;
use tracing::{debug, error, trace};
use crate::common::{task, Future, Pin, Poll}; use crate::common::{task, Pin, Poll};
#[allow(unreachable_pub)] #[allow(unreachable_pub)]
pub use self::addr_stream::AddrStream; pub use self::addr_stream::AddrStream;
use super::accept::Accept; use super::accept::Accept;

View file

@ -49,7 +49,7 @@ pub(super) use self::make::MakeConnection;
#[cfg(all(any(feature = "http1", feature = "http2"), feature = "server"))] #[cfg(all(any(feature = "http1", feature = "http2"), feature = "server"))]
pub(super) use self::make::MakeServiceRef; pub(super) use self::make::MakeServiceRef;
#[cfg(all(any(feature = "http1", feature = "http2"), feature = "client"))] #[cfg(all(any(feature = "http1", feature = "http2"), feature = "client"))]
pub(super) use self::oneshot::{oneshot, Oneshot}; pub(super) use self::oneshot::{Oneshot};
pub use self::make::make_service_fn; pub use self::make::make_service_fn;
pub use self::util::service_fn; pub use self::util::service_fn;

View file

@ -46,8 +46,7 @@ use std::marker::Unpin;
use bytes::Bytes; use bytes::Bytes;
use tokio::io::{AsyncRead, AsyncWrite, ReadBuf}; use tokio::io::{AsyncRead, AsyncWrite, ReadBuf};
use tokio::sync::oneshot; use tokio::sync::oneshot;
#[cfg(any(feature = "http1", feature = "http2"))]
use tracing::trace;
use crate::common::io::Rewind; use crate::common::io::Rewind;
use crate::common::{task, Future, Pin, Poll}; use crate::common::{task, Future, Pin, Poll};
/// An upgraded HTTP connection. /// An upgraded HTTP connection.