     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59

    //! Pieces pertaining to the HTTP message protocol.

    cfg_http1! {
        pub(crate) mod h1;

        pub(crate) use self::h1::Conn;

        #[cfg(feature = "client")]
        pub(crate) use self::h1::dispatch;
        #[cfg(feature = "server")]
        pub(crate) use self::h1::ServerTransaction;
    }

    cfg_http2! {
        pub(crate) mod h2;
    }

    /// An Incoming Message head. Includes request/status line, and headers.
    #[derive(Debug, Default)]
    pub(crate) struct MessageHead<S> {
        /// HTTP version of the message.
        pub(crate) version: http::Version,
        /// Subject (request line or status line) of Incoming message.
        pub(crate) subject: S,
        /// Headers of the Incoming message.
        pub(crate) headers: http::HeaderMap,
        /// Extensions.
        extensions: http::Extensions,
    }

    /// An incoming request message.
    #[cfg(feature = "http1")]
    pub(crate) type RequestHead = MessageHead<RequestLine>;

    #[derive(Debug, Default, PartialEq)]
    #[cfg(feature = "http1")]
    pub(crate) struct RequestLine(pub(crate) http::Method, pub(crate) http::Uri);

    /// An incoming response message.
    #[cfg(all(feature = "http1", feature = "client"))]
    pub(crate) type ResponseHead = MessageHead<http::StatusCode>;

    #[derive(Debug)]
    #[cfg(feature = "http1")]
    pub(crate) enum BodyLength {
        /// Content-Length
        Known(u64),
        /// Transfer-Encoding: chunked (if h1)
        Unknown,
    }

    /// Status of when a Disaptcher future completes.
    pub(crate) enum Dispatched {
        /// Dispatcher completely shutdown connection.
        Shutdown,
        /// Dispatcher has pending upgrade, and so did not shutdown.
        #[cfg(feature = "http1")]
        Upgrade(crate::upgrade::Pending),
    }