0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-25 16:22:35 +01:00

ircd::resource: Simplify the resource entry interface.

This commit is contained in:
Jason Volk 2018-11-06 21:35:30 -08:00
parent fdff7428ce
commit 8b9b27d8bc
3 changed files with 15 additions and 23 deletions

View file

@ -38,10 +38,9 @@ struct ircd::resource
unique_const_iterator<decltype(resources)> resources_it;
string_view allow_methods_list(const mutable_buffer &buf) const;
method &operator[](const string_view &path) const;
public:
void operator()(client &, const http::request::head &, const string_view &content_partial);
method &operator[](const string_view &name) const;
resource(const string_view &path, struct opts);
resource(const string_view &path);

View file

@ -800,17 +800,24 @@ bool
ircd::client::resource_request(const http::request::head &head)
try
{
auto &resource
{
// throws HTTP 404 if not found.
ircd::resource::find(head.path)
};
auto &method
{
// throws HTTP 405 if not found.
resource[head.method]
};
const string_view content_partial
{
data(head_buffer) + head_length, content_consumed
};
auto &resource
{
ircd::resource::find(head.path)
};
resource(*this, head, content_partial);
method(*this, head, content_partial);
discard_unconsumed(head);
return true;
}

View file

@ -156,20 +156,6 @@ noexcept
};
}
void
ircd::resource::operator()(client &client,
const http::request::head &head,
const string_view &content_partial)
{
// Find the method or METHOD_NOT_ALLOWED
auto &method
{
operator[](head.method)
};
method(client, head, content_partial);
}
ircd::resource::method &
ircd::resource::operator[](const string_view &name)
const try
@ -178,7 +164,7 @@ const try
}
catch(const std::out_of_range &e)
{
char buf[128];
thread_local char buf[512];
const http::header headers[]
{
{ "Allow", allow_methods_list(buf) }