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

ircd: Split out allow methods list generator.

This commit is contained in:
Jason Volk 2018-03-11 10:17:37 -07:00
parent a2be4d3ee5
commit ba6832b420
2 changed files with 22 additions and 12 deletions

View file

@ -35,6 +35,8 @@ struct ircd::resource
std::map<string_view, method *> methods;
unique_const_iterator<decltype(resources)> resources_it;
string_view allow_methods_list(const mutable_buffer &buf);
private:
virtual void handle_request(client &, method &, resource::request &);

View file

@ -312,10 +312,7 @@ ircd::resource::handle_request(client &client,
resource::request &request)
try
{
const auto response
{
method(client, request)
};
method(client, request);
}
catch(const json::not_found &e)
{
@ -360,9 +357,26 @@ try
return *methods.at(name);
}
catch(const std::out_of_range &e)
{
char buf[128];
const http::header headers[]
{
{ "Allow", allow_methods_list(buf) }
};
throw http::error
{
http::METHOD_NOT_ALLOWED, {}, headers
};
}
ircd::string_view
ircd::resource::allow_methods_list(const mutable_buffer &buf)
{
size_t len(0);
char buf[128]; buf[0] = '\0';
if(likely(size(buf)))
buf[len] = '\0';
auto it(begin(methods));
if(it != end(methods))
{
@ -374,13 +388,7 @@ catch(const std::out_of_range &e)
}
}
throw http::error
{
http::METHOD_NOT_ALLOWED, {},
{
{ "Allow", string_view{buf, len} }
}
};
return { data(buf), len };
}
ircd::resource::method::method(struct resource &resource,