Skip to content

Commit

Permalink
LibHTTP: Implement getting the correct reason phrase from HttpResponse
Browse files Browse the repository at this point in the history
This adds a reason_phrase() getter and a static reason_phrase_for_code()
to the HttpResponse class.

It also changes the class to use east const style.
  • Loading branch information
MaxWipfli authored and awesomekling committed Jun 11, 2021
1 parent 977b350 commit 631faec
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 1 deletion.
59 changes: 59 additions & 0 deletions Userland/Libraries/LibHTTP/HttpResponse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,63 @@ HttpResponse::~HttpResponse()
{
}

StringView HttpResponse::reason_phrase_for_code(int code)
{
VERIFY(code >= 100 && code <= 599);

static HashMap<int, StringView> s_reason_phrases = {
{ 100, "Continue"sv },
{ 101, "Switching Protocols"sv },
{ 200, "OK"sv },
{ 201, "Created"sv },
{ 202, "Accepted"sv },
{ 203, "Non-Authoritative Information"sv },
{ 204, "No Content"sv },
{ 205, "Reset Content"sv },
{ 206, "Partial Content"sv },
{ 300, "Multiple Choices"sv },
{ 301, "Moved Permanently"sv },
{ 302, "Found"sv },
{ 303, "See Other"sv },
{ 304, "Not Modified"sv },
{ 305, "Use Proxy"sv },
{ 307, "Temporary Redirect"sv },
{ 400, "Bad Request"sv },
{ 401, "Unauthorized"sv },
{ 402, "Payment Required"sv },
{ 403, "Forbidden"sv },
{ 404, "Not Found"sv },
{ 405, "Method Not Allowed"sv },
{ 406, "Not Acceptable"sv },
{ 407, "Proxy Authentication Required"sv },
{ 408, "Request Timeout"sv },
{ 409, "Conflict"sv },
{ 410, "Gone"sv },
{ 411, "Length Required"sv },
{ 412, "Precondition Failed"sv },
{ 413, "Payload Too Large"sv },
{ 414, "URI Too Long"sv },
{ 415, "Unsupported Media Type"sv },
{ 416, "Range Not Satisfiable"sv },
{ 417, "Expectation Failed"sv },
{ 426, "Upgrade Required"sv },
{ 500, "Internal Server Error"sv },
{ 501, "Not Implemented"sv },
{ 502, "Bad Gateway"sv },
{ 503, "Service Unavailable"sv },
{ 504, "Gateway Timeout"sv },
{ 505, "HTTP Version Not Supported"sv }
};

if (s_reason_phrases.contains(code))
return s_reason_phrases.ensure(code);

// NOTE: "A client MUST understand the class of any status code, as indicated by the first
// digit, and treat an unrecognized status code as being equivalent to the x00 status
// code of that class." (RFC 7231, section 6)
auto generic_code = (code / 100) * 100;
VERIFY(s_reason_phrases.contains(generic_code));
return s_reason_phrases.ensure(generic_code);
}

}
5 changes: 4 additions & 1 deletion Userland/Libraries/LibHTTP/HttpResponse.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ class HttpResponse : public Core::NetworkResponse {
}

int code() const { return m_code; }
const HashMap<String, String, CaseInsensitiveStringTraits>& headers() const { return m_headers; }
StringView reason_phrase() const { return reason_phrase_for_code(m_code); }
HashMap<String, String, CaseInsensitiveStringTraits> const& headers() const { return m_headers; }

static StringView reason_phrase_for_code(int code);

private:
HttpResponse(int code, HashMap<String, String, CaseInsensitiveStringTraits>&&);
Expand Down

0 comments on commit 631faec

Please sign in to comment.