C and C++ web framework.
http://rapida.vilor.one/docs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.1 KiB
140 lines
3.1 KiB
2 years ago
|
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
||
|
/* Copyright 2022 Ivan Polyakov */
|
||
|
|
||
|
#ifndef RAPIDA_ROUTE_HXX_ENTRY
|
||
|
#define RAPIDA_ROUTE_HXX_ENTRY
|
||
|
|
||
|
#include "Request.hxx"
|
||
|
#include "Response.hxx"
|
||
|
|
||
|
namespace rpd {
|
||
|
/*!
|
||
|
* \brief Base class for routes.
|
||
|
*/
|
||
|
class Route {
|
||
|
public:
|
||
|
/*!
|
||
|
* \brief Default constructor.
|
||
|
*
|
||
|
* Creates a new route to handle roquests.
|
||
|
*/
|
||
|
Route() { }
|
||
|
|
||
|
/*!
|
||
|
* \brief Client request handler.
|
||
|
*
|
||
|
* Reads the request method and calls handler for this method.
|
||
|
* \see handle_get for GET requests.
|
||
|
* \see handle_post for POST requests.
|
||
|
* \see handle_put for PUT requests.
|
||
|
* etc.
|
||
|
*
|
||
|
* \note This method will be automatically called.
|
||
|
* You don't need to use it.
|
||
|
*
|
||
|
* \param req Request instance.
|
||
|
* \param res Response instance.
|
||
|
* \param route C rpd_route instance.
|
||
|
*/
|
||
|
static void handle_request(rpd_req *req, rpd_res *res, void *route);
|
||
|
|
||
|
/*!
|
||
|
* \brief Destructor.
|
||
|
*/
|
||
|
virtual ~Route() { }
|
||
|
|
||
|
protected:
|
||
|
/*!
|
||
|
* \brief GET request handler.
|
||
|
*
|
||
|
* Derived class should override this method.
|
||
|
*
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_get(const Request &req, Response &res) = 0;
|
||
|
|
||
|
/*!
|
||
|
* \brief HEAD request handler.
|
||
|
*
|
||
|
* Derived class should override this method.
|
||
|
*
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_head(const Request &req, Response &res) = 0;
|
||
|
|
||
|
/*!
|
||
|
* \brief POST request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_post(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief PUT request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_put(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief DELETE request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_delete(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief CONNECT request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_connect(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief OPTIONS request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_options(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief TRACE request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_trace(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* \brief PATCH request handler.
|
||
|
* \param req Request.
|
||
|
* \param res Response.
|
||
|
*/
|
||
|
virtual void handle_patch(const Request &req, Response &res)
|
||
|
{
|
||
|
res.status(rpd_res_st_not_implemented);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
#endif // RAPIDA_ROUTE_HXX_ENTRY
|