1
0
mirror of https://github.com/actix/actix-extras.git synced 2025-09-02 13:06:38 +02:00
This commit is contained in:
Nikolay Kim
2018-08-31 18:56:21 -07:00
parent 0b42cae082
commit a2b170fec9
5 changed files with 71 additions and 70 deletions

View File

@@ -160,8 +160,9 @@ where
if let Some(HttpProtocol::Unknown(settings, addr, io, buf)) = self.proto.take() {
match kind {
ProtocolKind::Http1 => {
self.proto =
Some(HttpProtocol::H1(h1::Http1::new(settings, io, addr, buf, is_eof)));
self.proto = Some(HttpProtocol::H1(h1::Http1::new(
settings, io, addr, buf, is_eof,
)));
return self.poll();
}
ProtocolKind::Http2 => {

View File

@@ -94,7 +94,11 @@ where
buf: BytesMut, is_eof: bool,
) -> Self {
Http1 {
flags: if is_eof { Flags::READ_DISCONNECTED } else { Flags::KEEPALIVE },
flags: if is_eof {
Flags::READ_DISCONNECTED
} else {
Flags::KEEPALIVE
},
stream: H1Writer::new(stream, Rc::clone(&settings)),
decoder: H1Decoder::new(),
payload: None,
@@ -118,8 +122,11 @@ where
#[inline]
fn can_read(&self) -> bool {
if self.flags.intersects(Flags::ERROR | Flags::READ_DISCONNECTED) {
return false
if self
.flags
.intersects(Flags::ERROR | Flags::READ_DISCONNECTED)
{
return false;
}
if let Some(ref info) = self.payload {
@@ -171,8 +178,9 @@ where
// shutdown
if self.flags.contains(Flags::SHUTDOWN) {
if self.flags.intersects(
Flags::ERROR | Flags::READ_DISCONNECTED | Flags::WRITE_DISCONNECTED) {
return Ok(Async::Ready(()))
Flags::ERROR | Flags::READ_DISCONNECTED | Flags::WRITE_DISCONNECTED,
) {
return Ok(Async::Ready(()));
}
match self.stream.poll_completed(true) {
Ok(Async::NotReady) => return Ok(Async::NotReady),
@@ -240,7 +248,8 @@ where
let mut idx = 0;
while idx < self.tasks.len() {
// only one task can do io operation in http/1
if !io && !self.tasks[idx].flags.contains(EntryFlags::EOF)
if !io
&& !self.tasks[idx].flags.contains(EntryFlags::EOF)
&& !self.flags.contains(Flags::WRITE_DISCONNECTED)
{
// io is corrupted, send buffer
@@ -291,8 +300,9 @@ where
} else if !self.tasks[idx].flags.contains(EntryFlags::FINISHED) {
match self.tasks[idx].pipe.poll_completed() {
Ok(Async::NotReady) => (),
Ok(Async::Ready(_)) =>
self.tasks[idx].flags.insert(EntryFlags::FINISHED),
Ok(Async::Ready(_)) => {
self.tasks[idx].flags.insert(EntryFlags::FINISHED)
}
Err(err) => {
self.notify_disconnect();
self.tasks[idx].flags.insert(EntryFlags::ERROR);
@@ -319,9 +329,7 @@ where
// check stream state
if self.flags.contains(Flags::STARTED) {
match self.stream.poll_completed(false) {
Ok(Async::NotReady) => {
return Ok(Async::NotReady)
},
Ok(Async::NotReady) => return Ok(Async::NotReady),
Err(err) => {
debug!("Error sending data: {}", err);
self.notify_disconnect();
@@ -458,11 +466,13 @@ where
}
}
Ok(None) => {
if self.flags.contains(Flags::READ_DISCONNECTED) && self.tasks.is_empty() {
if self.flags.contains(Flags::READ_DISCONNECTED)
&& self.tasks.is_empty()
{
self.client_disconnect();
}
break
},
break;
}
Err(e) => {
self.flags.insert(Flags::ERROR);
if let Some(mut payload) = self.payload.take() {
@@ -631,7 +641,8 @@ mod tests {
#[test]
fn test_req_parse2() {
let buf = Buffer::new("");
let readbuf = BytesMut::from(Vec::<u8>::from(&b"GET /test HTTP/1.1\r\n\r\n"[..]));
let readbuf =
BytesMut::from(Vec::<u8>::from(&b"GET /test HTTP/1.1\r\n\r\n"[..]));
let settings = Rc::new(wrk_settings());
let mut h1 = Http1::new(Rc::clone(&settings), buf, None, readbuf, true);