expose ServiceConfig::write_date_header

This commit is contained in:
Rob Ede 2022-02-04 19:43:54 +00:00
parent 4b1a24b56f
commit 3eb44ab7bf
No known key found for this signature in database
GPG Key ID: 97C636207D3EF933
4 changed files with 15 additions and 10 deletions

View File

@ -6,12 +6,13 @@
### Changed ### Changed
- `error::DispatcherError` enum is now marked `#[non_exhaustive]`. [#2624] - `error::DispatcherError` enum is now marked `#[non_exhaustive]`. [#2624]
- Expose `ServiceConfig::write_date_header`. [#2625]
### Fixed ### Fixed
- Issue where handlers that took payload but then dropped without reading it to EOF it would cause keep-alive connections to become stuck. [#2624] - Issue where handlers that took payload but then dropped without reading it to EOF it would cause keep-alive connections to become stuck. [#2624]
[#2624]: https://github.com/actix/actix-web/pull/2624 [#2624]: https://github.com/actix/actix-web/pull/2624
[#????]: https://github.com/actix/actix-web/pull/???? [#2625]: https://github.com/actix/actix-web/pull/2625
## 3.0.0-rc.1 - 2022-01-31 ## 3.0.0-rc.1 - 2022-01-31

View File

@ -104,8 +104,12 @@ impl ServiceConfig {
self.0.date_service.now() self.0.date_service.now()
} }
pub(crate) fn write_date_header(&self, dst: &mut BytesMut, camel_case: bool) { /// Writes date header to `dst` buffer.
let mut buf: [u8; 39] = [0; 39]; ///
/// Low-level method that utilizes the built-in efficient date service, requiring fewer syscalls
/// than normal. Note that a CRLF (`\r\n`) is included in what is written.
pub fn write_date_header(&self, dst: &mut BytesMut, camel_case: bool) {
let mut buf: [u8; 37] = [0; 37];
buf[..6].copy_from_slice(if camel_case { b"Date: " } else { b"date: " }); buf[..6].copy_from_slice(if camel_case { b"Date: " } else { b"date: " });
@ -113,7 +117,7 @@ impl ServiceConfig {
.date_service .date_service
.with_date(|date| buf[6..35].copy_from_slice(&date.bytes)); .with_date(|date| buf[6..35].copy_from_slice(&date.bytes));
buf[35..].copy_from_slice(b"\r\n\r\n"); buf[35..].copy_from_slice(b"\r\n");
dst.extend_from_slice(&buf); dst.extend_from_slice(&buf);
} }

View File

@ -210,14 +210,14 @@ pub(crate) trait MessageType: Sized {
dst.advance_mut(pos); dst.advance_mut(pos);
} }
// optimized date header, set_date writes \r\n
if !has_date { if !has_date {
// optimized date header, write_date_header writes its own \r\n
config.write_date_header(dst, camel_case); config.write_date_header(dst, camel_case);
} else {
// msg eof
dst.extend_from_slice(b"\r\n");
} }
// end-of-headers marker
dst.extend_from_slice(b"\r\n");
Ok(()) Ok(())
} }

View File

@ -2,9 +2,9 @@
## Unreleased - 2021-xx-xx ## Unreleased - 2021-xx-xx
### Added ### Added
- Implement `Responder` for `Vec<u8>`. [#????] - Implement `Responder` for `Vec<u8>`. [#2625]
[#????]: https://github.com/actix/actix-web/pull/???? [#2625]: https://github.com/actix/actix-web/pull/2625
## 4.0.0-rc.2 - 2022-02-02 ## 4.0.0-rc.2 - 2022-02-02
### Added ### Added