2016-11-29 16:23:38 +01:00
|
|
|
/*
|
2016-09-06 01:10:30 +02:00
|
|
|
* Copyright (C) 2016 Charybdis Development Team
|
|
|
|
* Copyright (C) 2016 Jason Volk <jason@zemos.net>
|
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice is present in all copies.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
|
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
|
|
|
|
2017-08-23 23:10:28 +02:00
|
|
|
#include <ircd/m.h>
|
2016-09-06 01:10:30 +02:00
|
|
|
|
2017-08-23 23:10:28 +02:00
|
|
|
ircd::m::session::session(const host_port &host_port)
|
|
|
|
:client{host_port}
|
2017-03-21 03:30:07 +01:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2017-08-23 23:51:34 +02:00
|
|
|
ircd::json::object
|
2017-08-23 23:10:28 +02:00
|
|
|
ircd::m::session::operator()(parse::buffer &pb,
|
|
|
|
request &r)
|
2016-09-06 01:10:30 +02:00
|
|
|
{
|
2017-08-23 23:10:28 +02:00
|
|
|
parse::capstan pc
|
2017-03-21 03:30:07 +01:00
|
|
|
{
|
2017-08-23 23:10:28 +02:00
|
|
|
pb, read_closure(*this)
|
2017-03-21 03:30:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
http::request
|
|
|
|
{
|
2017-08-23 23:10:28 +02:00
|
|
|
host(remote_addr(*this)),
|
|
|
|
r.method,
|
|
|
|
r.path,
|
|
|
|
r.query,
|
|
|
|
std::string(r),
|
|
|
|
write_closure(*this),
|
2017-03-21 03:30:07 +01:00
|
|
|
{
|
|
|
|
{ "Content-Type"s, "application/json"s }
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2017-08-23 23:10:28 +02:00
|
|
|
http::code status;
|
2017-08-23 23:51:34 +02:00
|
|
|
json::object object;
|
2017-03-21 03:30:07 +01:00
|
|
|
http::response
|
|
|
|
{
|
2017-08-23 23:10:28 +02:00
|
|
|
pc,
|
|
|
|
nullptr,
|
2017-08-23 23:51:34 +02:00
|
|
|
[&pc, &status, &object](const http::response::head &head)
|
2017-03-21 03:30:07 +01:00
|
|
|
{
|
2017-08-23 23:10:28 +02:00
|
|
|
status = http::status(head.status);
|
2017-08-23 23:51:34 +02:00
|
|
|
object = http::response::content{pc, head};
|
2017-03-21 03:30:07 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2017-08-23 23:10:28 +02:00
|
|
|
if(status < 200 || status >= 300)
|
2017-08-23 23:51:34 +02:00
|
|
|
throw m::error(status, object);
|
2017-03-21 03:30:07 +01:00
|
|
|
|
2017-08-23 23:51:34 +02:00
|
|
|
return object;
|
2016-09-06 01:10:30 +02:00
|
|
|
}
|