From 1156e17e652e16b2fadeef4e20c76cd4f6b35059 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Mon, 25 Jun 2018 17:16:09 -0700 Subject: [PATCH] chore(error): add specific user error for responding with 1xx status code --- src/error.rs | 12 ++++++++---- src/proto/h1/role.rs | 3 +-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/error.rs b/src/error.rs index 7c915186..8f6e67e8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -61,6 +61,8 @@ pub(crate) enum Kind { UnsupportedVersion, /// User tried to create a CONNECT Request with the Client. UnsupportedRequestMethod, + /// User tried to respond with a 1xx (not 101) response code. + UnsupportedStatusCode, /// User tried to send a Request with Client with non-absolute URI. AbsoluteUriRequired, @@ -119,6 +121,7 @@ impl Error { Kind::Closed | Kind::UnsupportedVersion | Kind::UnsupportedRequestMethod | + Kind::UnsupportedStatusCode | Kind::AbsoluteUriRequired | Kind::NoUpgrade | Kind::Execute => true, @@ -178,10 +181,6 @@ impl Error { Error::new(Kind::Parse(Parse::Header), None) } - pub(crate) fn new_status() -> Error { - Error::new(Kind::Parse(Parse::Status), None) - } - pub(crate) fn new_version_h2() -> Error { Error::new(Kind::Parse(Parse::VersionH2), None) } @@ -227,6 +226,10 @@ impl Error { Error::new(Kind::UnsupportedRequestMethod, None) } + pub(crate) fn new_user_unsupported_status_code() -> Error { + Error::new(Kind::UnsupportedStatusCode, None) + } + pub(crate) fn new_user_absolute_uri_required() -> Error { Error::new(Kind::AbsoluteUriRequired, None) } @@ -310,6 +313,7 @@ impl StdError for Error { Kind::Http2 => "http2 general error", Kind::UnsupportedVersion => "request has unsupported HTTP version", Kind::UnsupportedRequestMethod => "request has unsupported HTTP method", + Kind::UnsupportedStatusCode => "response has 1xx status code, not supported by server", Kind::AbsoluteUriRequired => "client requires absolute-form URIs", Kind::NoUpgrade => "no upgrade available", Kind::ManualUpgrade => "upgrade expected but low level API in use", diff --git a/src/proto/h1/role.rs b/src/proto/h1/role.rs index 8d13be03..10c89945 100644 --- a/src/proto/h1/role.rs +++ b/src/proto/h1/role.rs @@ -212,8 +212,7 @@ impl Http1Transaction for Server { *msg.head = MessageHead::default(); msg.head.subject = StatusCode::INTERNAL_SERVER_ERROR; msg.body = None; - //TODO: change this to a more descriptive error than just a parse error - (Err(::Error::new_status()), true) + (Err(::Error::new_user_unsupported_status_code()), true) } else { (Ok(()), !msg.keep_alive) };