chore(error): add specific user error for responding with 1xx status code

This commit is contained in:
Sean McArthur
2018-06-25 17:16:09 -07:00
parent 91b08d09e4
commit 1156e17e65
2 changed files with 9 additions and 6 deletions

View File

@@ -61,6 +61,8 @@ pub(crate) enum Kind {
UnsupportedVersion, UnsupportedVersion,
/// User tried to create a CONNECT Request with the Client. /// User tried to create a CONNECT Request with the Client.
UnsupportedRequestMethod, 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. /// User tried to send a Request with Client with non-absolute URI.
AbsoluteUriRequired, AbsoluteUriRequired,
@@ -119,6 +121,7 @@ impl Error {
Kind::Closed | Kind::Closed |
Kind::UnsupportedVersion | Kind::UnsupportedVersion |
Kind::UnsupportedRequestMethod | Kind::UnsupportedRequestMethod |
Kind::UnsupportedStatusCode |
Kind::AbsoluteUriRequired | Kind::AbsoluteUriRequired |
Kind::NoUpgrade | Kind::NoUpgrade |
Kind::Execute => true, Kind::Execute => true,
@@ -178,10 +181,6 @@ impl Error {
Error::new(Kind::Parse(Parse::Header), None) 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 { pub(crate) fn new_version_h2() -> Error {
Error::new(Kind::Parse(Parse::VersionH2), None) Error::new(Kind::Parse(Parse::VersionH2), None)
} }
@@ -227,6 +226,10 @@ impl Error {
Error::new(Kind::UnsupportedRequestMethod, None) 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 { pub(crate) fn new_user_absolute_uri_required() -> Error {
Error::new(Kind::AbsoluteUriRequired, None) Error::new(Kind::AbsoluteUriRequired, None)
} }
@@ -310,6 +313,7 @@ impl StdError for Error {
Kind::Http2 => "http2 general error", Kind::Http2 => "http2 general error",
Kind::UnsupportedVersion => "request has unsupported HTTP version", Kind::UnsupportedVersion => "request has unsupported HTTP version",
Kind::UnsupportedRequestMethod => "request has unsupported HTTP method", 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::AbsoluteUriRequired => "client requires absolute-form URIs",
Kind::NoUpgrade => "no upgrade available", Kind::NoUpgrade => "no upgrade available",
Kind::ManualUpgrade => "upgrade expected but low level API in use", Kind::ManualUpgrade => "upgrade expected but low level API in use",

View File

@@ -212,8 +212,7 @@ impl Http1Transaction for Server {
*msg.head = MessageHead::default(); *msg.head = MessageHead::default();
msg.head.subject = StatusCode::INTERNAL_SERVER_ERROR; msg.head.subject = StatusCode::INTERNAL_SERVER_ERROR;
msg.body = None; msg.body = None;
//TODO: change this to a more descriptive error than just a parse error (Err(::Error::new_user_unsupported_status_code()), true)
(Err(::Error::new_status()), true)
} else { } else {
(Ok(()), !msg.keep_alive) (Ok(()), !msg.keep_alive)
}; };