1 //! Pieces pertaining to the HTTP message protocol. 2 3 cfg_http1! { 4 pub(crate) mod h1; 5 6 pub(crate) use self::h1::Conn; 7 8 #[cfg(feature = "client")] 9 pub(crate) use self::h1::dispatch; 10 #[cfg(feature = "server")] 11 pub(crate) use self::h1::ServerTransaction; 12 } 13 14 cfg_http2! { 15 pub(crate) mod h2; 16 } 17 18 /// An Incoming Message head. Includes request/status line, and headers. 19 #[derive(Debug, Default)] 20 pub(crate) struct MessageHead<S> { 21 /// HTTP version of the message. 22 pub(crate) version: http::Version, 23 /// Subject (request line or status line) of Incoming message. 24 pub(crate) subject: S, 25 /// Headers of the Incoming message. 26 pub(crate) headers: http::HeaderMap, 27 /// Extensions. 28 extensions: http::Extensions, 29 } 30 31 /// An incoming request message. 32 #[cfg(feature = "http1")] 33 pub(crate) type RequestHead = MessageHead<RequestLine>; 34 35 #[derive(Debug, Default, PartialEq)] 36 #[cfg(feature = "http1")] 37 pub(crate) struct RequestLine(pub(crate) http::Method, pub(crate) http::Uri); 38 39 /// An incoming response message. 40 #[cfg(all(feature = "http1", feature = "client"))] 41 pub(crate) type ResponseHead = MessageHead<http::StatusCode>; 42 43 #[derive(Debug)] 44 #[cfg(feature = "http1")] 45 pub(crate) enum BodyLength { 46 /// Content-Length 47 Known(u64), 48 /// Transfer-Encoding: chunked (if h1) 49 Unknown, 50 } 51 52 /// Status of when a Disaptcher future completes. 53 pub(crate) enum Dispatched { 54 /// Dispatcher completely shutdown connection. 55 Shutdown, 56 /// Dispatcher has pending upgrade, and so did not shutdown. 57 #[cfg(feature = "http1")] 58 Upgrade(crate::upgrade::Pending), 59 } 60 61 impl MessageHead<http::StatusCode> { into_response<B>(self, body: B) -> http::Response<B>62 fn into_response<B>(self, body: B) -> http::Response<B> { 63 let mut res = http::Response::new(body); 64 *res.status_mut() = self.subject; 65 *res.headers_mut() = self.headers; 66 *res.version_mut() = self.version; 67 *res.extensions_mut() = self.extensions; 68 res 69 } 70 } 71