mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
Beast.HTTP:
New classes are introduced to represent HTTP messages and their associated bodies. The parser interface is reworked to use CRTP, error codes, and trait checks. New classes: * basic_headers Models field/value pairs in a HTTP message. * message Models a HTTP message, body behavior defined by template argument. Parsed message carries metadata generated during parsing. * parser Produces parsed messages. * empty_body, string_body, basic_streambuf_body Classes used to represent content bodies in various ways. New functions: * read, async_read, write, async_write Read and write HTTP messages on a socket. New concepts: * Body: Represents the HTTP Content-Body. * Field: A HTTP header field. * FieldSequence: A forward sequence of fields. * Reader: Parses a Body from a stream of bytes. * Writer: Serializes a Body to buffers. basic_parser changes: * add write methods which throw exceptions instead * error_code passed via parameter instead of return value * fold private member calls into existing callbacks * basic_parser uses CRTP instead of virtual members * add documentation on Derived requirements for CRTP impl/http-parser changes: * joyent renamed to nodejs to reflect upstream changes
This commit is contained in:
@@ -171,7 +171,7 @@ OverlayImpl::~OverlayImpl ()
|
||||
|
||||
Handoff
|
||||
OverlayImpl::onHandoff (std::unique_ptr <beast::asio::ssl_bundle>&& ssl_bundle,
|
||||
beast::http::message&& request,
|
||||
http_request_type&& request,
|
||||
endpoint_type remote_endpoint)
|
||||
{
|
||||
auto const id = next_id_++;
|
||||
@@ -226,14 +226,14 @@ OverlayImpl::onHandoff (std::unique_ptr <beast::asio::ssl_bundle>&& ssl_bundle,
|
||||
handoff.moved = false;
|
||||
handoff.response = makeRedirectResponse(slot, request,
|
||||
remote_endpoint.address());
|
||||
handoff.keep_alive = request.keep_alive();
|
||||
handoff.keep_alive = is_keep_alive(request);
|
||||
return handoff;
|
||||
}
|
||||
}
|
||||
|
||||
handoff.moved = true;
|
||||
|
||||
auto hello = parseHello (request, journal);
|
||||
auto hello = parseHello (true, request.headers, journal);
|
||||
if(! hello)
|
||||
return handoff;
|
||||
|
||||
@@ -260,7 +260,7 @@ OverlayImpl::onHandoff (std::unique_ptr <beast::asio::ssl_bundle>&& ssl_bundle,
|
||||
handoff.moved = false;
|
||||
handoff.response = makeRedirectResponse(slot, request,
|
||||
remote_endpoint.address());
|
||||
handoff.keep_alive = request.keep_alive();
|
||||
handoff.keep_alive = is_keep_alive(request);
|
||||
return handoff;
|
||||
}
|
||||
|
||||
@@ -289,7 +289,19 @@ OverlayImpl::onHandoff (std::unique_ptr <beast::asio::ssl_bundle>&& ssl_bundle,
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
bool
|
||||
OverlayImpl::isPeerUpgrade(beast::http::message const& request)
|
||||
OverlayImpl::isPeerUpgrade(http_request_type const& request)
|
||||
{
|
||||
if (! is_upgrade(request))
|
||||
return false;
|
||||
auto const versions = parse_ProtocolVersions(
|
||||
request.headers["Upgrade"]);
|
||||
if (versions.size() == 0)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
OverlayImpl::isPeerUpgrade(beast::deprecated_http::message const& request)
|
||||
{
|
||||
if (! request.upgrade())
|
||||
return false;
|
||||
@@ -297,7 +309,7 @@ OverlayImpl::isPeerUpgrade(beast::http::message const& request)
|
||||
request.headers["Upgrade"]);
|
||||
if (versions.size() == 0)
|
||||
return false;
|
||||
if (! request.request() && request.status() != 101)
|
||||
if(! request.request() && request.status() != 101)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
@@ -312,7 +324,7 @@ OverlayImpl::makePrefix (std::uint32_t id)
|
||||
|
||||
std::shared_ptr<Writer>
|
||||
OverlayImpl::makeRedirectResponse (PeerFinder::Slot::ptr const& slot,
|
||||
beast::http::message const& request, address_type remote_address)
|
||||
http_request_type const& request, address_type remote_address)
|
||||
{
|
||||
Json::Value json(Json::objectValue);
|
||||
{
|
||||
@@ -322,13 +334,13 @@ OverlayImpl::makeRedirectResponse (PeerFinder::Slot::ptr const& slot,
|
||||
ips.append(_.address.to_string());
|
||||
}
|
||||
|
||||
beast::http::message m;
|
||||
beast::deprecated_http::message m;
|
||||
m.request(false);
|
||||
m.status(503);
|
||||
m.reason("Service Unavailable");
|
||||
m.headers.append("Remote-Address", remote_address.to_string());
|
||||
m.version(request.version());
|
||||
if (request.version() == std::make_pair(1, 0))
|
||||
m.headers.insert("Remote-Address", remote_address.to_string());
|
||||
m.version(std::make_pair(request.version / 10, request.version % 10));
|
||||
if (request.version == 10)
|
||||
{
|
||||
//?
|
||||
}
|
||||
@@ -829,16 +841,17 @@ OverlayImpl::json ()
|
||||
}
|
||||
|
||||
bool
|
||||
OverlayImpl::processRequest (beast::http::message const& req,
|
||||
OverlayImpl::processRequest (http_request_type const& req,
|
||||
Handoff& handoff)
|
||||
{
|
||||
if (req.url() != "/crawl")
|
||||
if (req.url != "/crawl")
|
||||
return false;
|
||||
|
||||
beast::http::message resp;
|
||||
beast::deprecated_http::message resp;
|
||||
resp.request(false);
|
||||
resp.status(200);
|
||||
resp.reason("OK");
|
||||
resp.version(std::make_pair(req.version / 10, req.version % 10));
|
||||
Json::Value v;
|
||||
v["overlay"] = crawl();
|
||||
handoff.response = make_JsonWriter(resp, v);
|
||||
|
||||
Reference in New Issue
Block a user