Tidy up HTTP reason_string (API Change):

fix #182

reason_string() is now located in <beast/http/message.hpp>
and returns a string view rather than char const*.
This commit is contained in:
Vinnie Falco
2017-05-07 16:11:12 -07:00
parent d9562ff525
commit 4461f5153c
10 changed files with 80 additions and 94 deletions

View File

@ -21,6 +21,7 @@ API Changes:
* Rename to static_buffer, static_buffer_n
* Rename to buffered_read_stream
* Harmonize concepts and identifiers with net-ts
* Tidy up HTTP reason_string
--------------------------------------------------------------------------------

View File

@ -19,8 +19,6 @@
#include <beast/http/message.hpp>
#include <beast/http/message_parser.hpp>
#include <beast/http/read.hpp>
#include <beast/http/read.hpp>
#include <beast/http/reason.hpp>
#include <beast/http/rfc7230.hpp>
#include <beast/http/string_body.hpp>
#include <beast/http/write.hpp>

View File

@ -9,6 +9,7 @@
#define BEAST_HTTP_IMPL_MESSAGE_IPP
#include <beast/core/error.hpp>
#include <beast/core/string_view.hpp>
#include <beast/http/concepts.hpp>
#include <beast/http/rfc7230.hpp>
#include <beast/core/detail/ci_char_traits.hpp>
@ -257,6 +258,71 @@ prepare(message<isRequest, Body, Fields>& msg,
"invalid version for Connection: upgrade", __FILE__, __LINE__);
}
namespace detail {
template<class = void>
string_view
reason_string(int status)
{
switch(status)
{
case 100: return "Continue";
case 101: return "Switching Protocols";
case 200: return "OK";
case 201: return "Created";
case 202: return "Accepted";
case 203: return "Non-Authoritative Information";
case 204: return "No Content";
case 205: return "Reset Content";
case 206: return "Partial Content";
case 300: return "Multiple Choices";
case 301: return "Moved Permanently";
case 302: return "Found";
case 303: return "See Other";
case 304: return "Not Modified";
case 305: return "Use Proxy";
case 307: return "Temporary Redirect";
case 400: return "Bad Request";
case 401: return "Unauthorized";
case 402: return "Payment Required";
case 403: return "Forbidden";
case 404: return "Not Found";
case 405: return "Method Not Allowed";
case 406: return "Not Acceptable";
case 407: return "Proxy Authentication Required";
case 408: return "Request Timeout";
case 409: return "Conflict";
case 410: return "Gone";
case 411: return "Length Required";
case 412: return "Precondition Failed";
case 413: return "Request Entity Too Large";
case 414: return "Request-URI Too Long";
case 415: return "Unsupported Media Type";
case 416: return "Requested Range Not Satisfiable";
case 417: return "Expectation Failed";
case 500: return "Internal Server Error";
case 501: return "Not Implemented";
case 502: return "Bad Gateway";
case 503: return "Service Unavailable";
case 504: return "Gateway Timeout";
case 505: return "HTTP Version Not Supported";
case 306: return "<reserved>";
default:
break;
}
return "<unknown-status>";
}
} // detail
inline
string_view const
reason_string(int status)
{
return detail::reason_string(status);
}
} // http
} // beast

View File

@ -533,6 +533,10 @@ void
prepare(message<isRequest, Body, Fields>& msg,
Options&&... options);
/** Returns the text for a known HTTP status code. */
string_view const
reason_string(int status);
} // http
} // beast

View File

@ -9,75 +9,16 @@
#define BEAST_HTTP_REASON_HPP
#include <beast/config.hpp>
#include <beast/core/string_view.hpp>
namespace beast {
namespace http {
namespace detail {
template<class = void>
char const*
reason_string(int status)
{
switch(status)
{
case 100: return "Continue";
case 101: return "Switching Protocols";
case 200: return "OK";
case 201: return "Created";
case 202: return "Accepted";
case 203: return "Non-Authoritative Information";
case 204: return "No Content";
case 205: return "Reset Content";
case 206: return "Partial Content";
case 300: return "Multiple Choices";
case 301: return "Moved Permanently";
case 302: return "Found";
case 303: return "See Other";
case 304: return "Not Modified";
case 305: return "Use Proxy";
case 307: return "Temporary Redirect";
case 400: return "Bad Request";
case 401: return "Unauthorized";
case 402: return "Payment Required";
case 403: return "Forbidden";
case 404: return "Not Found";
case 405: return "Method Not Allowed";
case 406: return "Not Acceptable";
case 407: return "Proxy Authentication Required";
case 408: return "Request Timeout";
case 409: return "Conflict";
case 410: return "Gone";
case 411: return "Length Required";
case 412: return "Precondition Failed";
case 413: return "Request Entity Too Large";
case 414: return "Request-URI Too Long";
case 415: return "Unsupported Media Type";
case 416: return "Requested Range Not Satisfiable";
case 417: return "Expectation Failed";
case 500: return "Internal Server Error";
case 501: return "Not Implemented";
case 502: return "Bad Gateway";
case 503: return "Service Unavailable";
case 504: return "Gateway Timeout";
case 505: return "HTTP Version Not Supported";
case 306: return "<reserved>";
default:
break;
}
return "<unknown-status>";
}
} // detail
/** Returns the text for a known status code integer. */
inline
char const*
reason_string(int status)
{
return detail::reason_string(status);
}
} // http
} // beast

View File

@ -14,7 +14,6 @@
#include <beast/version.hpp>
#include <beast/http/read.hpp>
#include <beast/http/write.hpp>
#include <beast/http/reason.hpp>
#include <beast/http/rfc7230.hpp>
#include <beast/core/buffer_cat.hpp>
#include <beast/core/buffer_concepts.hpp>

View File

@ -57,7 +57,6 @@ unit-test http-tests :
http/message.cpp
http/message_parser.cpp
http/read.cpp
http/reason.cpp
http/rfc7230.cpp
http/string_body.cpp
http/write.cpp

View File

@ -20,7 +20,6 @@ add_executable (http-tests
message.cpp
message_parser.cpp
read.cpp
reason.cpp
rfc7230.cpp
string_body.cpp
write.cpp

View File

@ -296,6 +296,13 @@ public:
}();
}
void
testReasonString()
{
for(int i = 1; i <= 999; ++i)
BEAST_EXPECT(! reason_string(i).empty());
}
void
run() override
{
@ -305,6 +312,7 @@ public:
testPrepare();
testSwap();
testSpecialMembers();
testReasonString();
}
};

View File

@ -1,29 +0,0 @@
//
// Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// Test that header file is self-contained.
#include <beast/http/reason.hpp>
#include <beast/unit_test/suite.hpp>
namespace beast {
namespace http {
class reason_test : public unit_test::suite
{
public:
void run() override
{
for(int i = 1; i <= 999; ++i)
BEAST_EXPECT(reason_string(i) != nullptr);
}
};
BEAST_DEFINE_TESTSUITE(reason,http,beast);
} // http
} // beast