mirror of https://github.com/fafhrd91/actix-web
rename ctype to conn_type
This commit is contained in:
parent
66620a1012
commit
2062030415
|
@ -273,12 +273,12 @@ impl TestServer {
|
||||||
self.client.headers()
|
self.client.headers()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gracefully stop HTTP server.
|
/// Stop HTTP server.
|
||||||
///
|
///
|
||||||
/// Waits for spawned `Server` and `System` to shutdown gracefully.
|
/// Waits for spawned `Server` and `System` to force shutdown.
|
||||||
pub async fn stop(&mut self) {
|
pub async fn stop(&mut self) {
|
||||||
// signal server to stop
|
// signal server to stop
|
||||||
self.server.stop(true).await;
|
self.server.stop(false).await;
|
||||||
|
|
||||||
// also signal system to stop
|
// also signal system to stop
|
||||||
// though this is handled by `ServerBuilder::exit_system` too
|
// though this is handled by `ServerBuilder::exit_system` too
|
||||||
|
|
|
@ -32,6 +32,8 @@ pub enum AnyBody<B = BoxBody> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AnyBody {
|
impl AnyBody {
|
||||||
|
// TODO: a None body constructor
|
||||||
|
|
||||||
/// Constructs a new, empty body.
|
/// Constructs a new, empty body.
|
||||||
pub fn empty() -> Self {
|
pub fn empty() -> Self {
|
||||||
Self::Bytes(Bytes::new())
|
Self::Bytes(Bytes::new())
|
||||||
|
|
|
@ -20,8 +20,10 @@ pub(crate) const DATE_VALUE_LENGTH: usize = 29;
|
||||||
pub enum KeepAlive {
|
pub enum KeepAlive {
|
||||||
/// Keep alive in seconds
|
/// Keep alive in seconds
|
||||||
Timeout(usize),
|
Timeout(usize),
|
||||||
|
|
||||||
/// Rely on OS to shutdown tcp connection
|
/// Rely on OS to shutdown tcp connection
|
||||||
Os,
|
Os,
|
||||||
|
|
||||||
/// Disabled
|
/// Disabled
|
||||||
Disabled,
|
Disabled,
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,7 @@ impl Decoder for ClientCodec {
|
||||||
debug_assert!(!self.inner.payload.is_some(), "Payload decoder is set");
|
debug_assert!(!self.inner.payload.is_some(), "Payload decoder is set");
|
||||||
|
|
||||||
if let Some((req, payload)) = self.inner.decoder.decode(src)? {
|
if let Some((req, payload)) = self.inner.decoder.decode(src)? {
|
||||||
if let Some(ctype) = req.ctype() {
|
if let Some(ctype) = req.conn_type() {
|
||||||
// do not use peer's keep-alive
|
// do not use peer's keep-alive
|
||||||
self.inner.ctype = if ctype == ConnectionType::KeepAlive {
|
self.inner.ctype = if ctype == ConnectionType::KeepAlive {
|
||||||
self.inner.ctype
|
self.inner.ctype
|
||||||
|
|
|
@ -29,7 +29,7 @@ pub struct Codec {
|
||||||
decoder: decoder::MessageDecoder<Request>,
|
decoder: decoder::MessageDecoder<Request>,
|
||||||
payload: Option<PayloadDecoder>,
|
payload: Option<PayloadDecoder>,
|
||||||
version: Version,
|
version: Version,
|
||||||
ctype: ConnectionType,
|
conn_type: ConnectionType,
|
||||||
|
|
||||||
// encoder part
|
// encoder part
|
||||||
flags: Flags,
|
flags: Flags,
|
||||||
|
@ -65,7 +65,7 @@ impl Codec {
|
||||||
decoder: decoder::MessageDecoder::default(),
|
decoder: decoder::MessageDecoder::default(),
|
||||||
payload: None,
|
payload: None,
|
||||||
version: Version::HTTP_11,
|
version: Version::HTTP_11,
|
||||||
ctype: ConnectionType::Close,
|
conn_type: ConnectionType::Close,
|
||||||
encoder: encoder::MessageEncoder::default(),
|
encoder: encoder::MessageEncoder::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,13 +73,13 @@ impl Codec {
|
||||||
/// Check if request is upgrade.
|
/// Check if request is upgrade.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn upgrade(&self) -> bool {
|
pub fn upgrade(&self) -> bool {
|
||||||
self.ctype == ConnectionType::Upgrade
|
self.conn_type == ConnectionType::Upgrade
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if last response is keep-alive.
|
/// Check if last response is keep-alive.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn keepalive(&self) -> bool {
|
pub fn keepalive(&self) -> bool {
|
||||||
self.ctype == ConnectionType::KeepAlive
|
self.conn_type == ConnectionType::KeepAlive
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if keep-alive enabled on server level.
|
/// Check if keep-alive enabled on server level.
|
||||||
|
@ -124,11 +124,11 @@ impl Decoder for Codec {
|
||||||
let head = req.head();
|
let head = req.head();
|
||||||
self.flags.set(Flags::HEAD, head.method == Method::HEAD);
|
self.flags.set(Flags::HEAD, head.method == Method::HEAD);
|
||||||
self.version = head.version;
|
self.version = head.version;
|
||||||
self.ctype = head.connection_type();
|
self.conn_type = head.connection_type();
|
||||||
if self.ctype == ConnectionType::KeepAlive
|
if self.conn_type == ConnectionType::KeepAlive
|
||||||
&& !self.flags.contains(Flags::KEEPALIVE_ENABLED)
|
&& !self.flags.contains(Flags::KEEPALIVE_ENABLED)
|
||||||
{
|
{
|
||||||
self.ctype = ConnectionType::Close
|
self.conn_type = ConnectionType::Close
|
||||||
}
|
}
|
||||||
match payload {
|
match payload {
|
||||||
PayloadType::None => self.payload = None,
|
PayloadType::None => self.payload = None,
|
||||||
|
@ -159,14 +159,14 @@ impl Encoder<Message<(Response<()>, BodySize)>> for Codec {
|
||||||
res.head_mut().version = self.version;
|
res.head_mut().version = self.version;
|
||||||
|
|
||||||
// connection status
|
// connection status
|
||||||
self.ctype = if let Some(ct) = res.head().ctype() {
|
self.conn_type = if let Some(ct) = res.head().conn_type() {
|
||||||
if ct == ConnectionType::KeepAlive {
|
if ct == ConnectionType::KeepAlive {
|
||||||
self.ctype
|
self.conn_type
|
||||||
} else {
|
} else {
|
||||||
ct
|
ct
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.ctype
|
self.conn_type
|
||||||
};
|
};
|
||||||
|
|
||||||
// encode message
|
// encode message
|
||||||
|
@ -177,10 +177,9 @@ impl Encoder<Message<(Response<()>, BodySize)>> for Codec {
|
||||||
self.flags.contains(Flags::STREAM),
|
self.flags.contains(Flags::STREAM),
|
||||||
self.version,
|
self.version,
|
||||||
length,
|
length,
|
||||||
self.ctype,
|
self.conn_type,
|
||||||
&self.config,
|
&self.config,
|
||||||
)?;
|
)?;
|
||||||
// self.headers_size = (dst.len() - len) as u32;
|
|
||||||
}
|
}
|
||||||
Message::Chunk(Some(bytes)) => {
|
Message::Chunk(Some(bytes)) => {
|
||||||
self.encoder.encode_chunk(bytes.as_ref(), dst)?;
|
self.encoder.encode_chunk(bytes.as_ref(), dst)?;
|
||||||
|
@ -189,6 +188,7 @@ impl Encoder<Message<(Response<()>, BodySize)>> for Codec {
|
||||||
self.encoder.encode_eof(dst)?;
|
self.encoder.encode_eof(dst)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ pub(crate) trait MessageType: Sized {
|
||||||
dst: &mut BytesMut,
|
dst: &mut BytesMut,
|
||||||
version: Version,
|
version: Version,
|
||||||
mut length: BodySize,
|
mut length: BodySize,
|
||||||
ctype: ConnectionType,
|
conn_type: ConnectionType,
|
||||||
config: &ServiceConfig,
|
config: &ServiceConfig,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
let chunked = self.chunked();
|
let chunked = self.chunked();
|
||||||
|
@ -71,7 +71,7 @@ pub(crate) trait MessageType: Sized {
|
||||||
| StatusCode::PROCESSING
|
| StatusCode::PROCESSING
|
||||||
| StatusCode::NO_CONTENT => {
|
| StatusCode::NO_CONTENT => {
|
||||||
// skip content-length and transfer-encoding headers
|
// skip content-length and transfer-encoding headers
|
||||||
// See https://tools.ietf.org/html/rfc7230#section-3.3.1
|
// see https://tools.ietf.org/html/rfc7230#section-3.3.1
|
||||||
// and https://tools.ietf.org/html/rfc7230#section-3.3.2
|
// and https://tools.ietf.org/html/rfc7230#section-3.3.2
|
||||||
skip_len = true;
|
skip_len = true;
|
||||||
length = BodySize::None
|
length = BodySize::None
|
||||||
|
@ -79,6 +79,7 @@ pub(crate) trait MessageType: Sized {
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
match length {
|
match length {
|
||||||
BodySize::Stream => {
|
BodySize::Stream => {
|
||||||
if chunked {
|
if chunked {
|
||||||
|
@ -102,7 +103,7 @@ pub(crate) trait MessageType: Sized {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connection
|
// Connection
|
||||||
match ctype {
|
match conn_type {
|
||||||
ConnectionType::Upgrade => dst.put_slice(b"connection: upgrade\r\n"),
|
ConnectionType::Upgrade => dst.put_slice(b"connection: upgrade\r\n"),
|
||||||
ConnectionType::KeepAlive if version < Version::HTTP_11 => {
|
ConnectionType::KeepAlive if version < Version::HTTP_11 => {
|
||||||
if camel_case {
|
if camel_case {
|
||||||
|
@ -327,7 +328,7 @@ impl<T: MessageType> MessageEncoder<T> {
|
||||||
stream: bool,
|
stream: bool,
|
||||||
version: Version,
|
version: Version,
|
||||||
length: BodySize,
|
length: BodySize,
|
||||||
ctype: ConnectionType,
|
conn_type: ConnectionType,
|
||||||
config: &ServiceConfig,
|
config: &ServiceConfig,
|
||||||
) -> io::Result<()> {
|
) -> io::Result<()> {
|
||||||
// transfer encoding
|
// transfer encoding
|
||||||
|
@ -349,7 +350,7 @@ impl<T: MessageType> MessageEncoder<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
message.encode_status(dst)?;
|
message.encode_status(dst)?;
|
||||||
message.encode_headers(dst, version, length, ctype, config)
|
message.encode_headers(dst, version, length, conn_type, config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,10 +364,12 @@ pub(crate) struct TransferEncoding {
|
||||||
enum TransferEncodingKind {
|
enum TransferEncodingKind {
|
||||||
/// An Encoder for when Transfer-Encoding includes `chunked`.
|
/// An Encoder for when Transfer-Encoding includes `chunked`.
|
||||||
Chunked(bool),
|
Chunked(bool),
|
||||||
|
|
||||||
/// An Encoder for when Content-Length is set.
|
/// An Encoder for when Content-Length is set.
|
||||||
///
|
///
|
||||||
/// Enforces that the body is not longer than the Content-Length header.
|
/// Enforces that the body is not longer than the Content-Length header.
|
||||||
Length(u64),
|
Length(u64),
|
||||||
|
|
||||||
/// An Encoder for when Content-Length is not known.
|
/// An Encoder for when Content-Length is not known.
|
||||||
///
|
///
|
||||||
/// Application decides when to stop writing.
|
/// Application decides when to stop writing.
|
||||||
|
|
|
@ -317,7 +317,7 @@ impl ResponseHead {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub(crate) fn ctype(&self) -> Option<ConnectionType> {
|
pub(crate) fn conn_type(&self) -> Option<ConnectionType> {
|
||||||
if self.flags.contains(Flags::CLOSE) {
|
if self.flags.contains(Flags::CLOSE) {
|
||||||
Some(ConnectionType::Close)
|
Some(ConnectionType::Close)
|
||||||
} else if self.flags.contains(Flags::KEEP_ALIVE) {
|
} else if self.flags.contains(Flags::KEEP_ALIVE) {
|
||||||
|
|
Loading…
Reference in New Issue