MXS-1220: Make HTTP request handler parameters const

The HttpRequest can be const as the request itself will not be modified.
This commit is contained in:
Markus Mäkelä
2017-04-20 19:29:34 +03:00
committed by Markus Mäkelä
parent 043ed95bdf
commit 47d819b008
2 changed files with 37 additions and 33 deletions

View File

@ -29,7 +29,7 @@
#include "filter.h" #include "filter.h"
#include "session.h" #include "session.h"
typedef HttpResponse (*ResourceCallback)(HttpRequest& request); typedef HttpResponse (*ResourceCallback)(const HttpRequest& request);
class Resource class Resource
{ {
@ -47,7 +47,7 @@ public:
* *
* @return True if this request matches this resource * @return True if this request matches this resource
*/ */
bool match(HttpRequest& request); bool match(const HttpRequest& request) const;
/** /**
* @brief Handle a HTTP request * @brief Handle a HTTP request
@ -56,11 +56,11 @@ public:
* *
* @return Response to the request * @return Response to the request
*/ */
HttpResponse call(HttpRequest& request); HttpResponse call(const HttpRequest& request) const;
private: private:
bool matching_variable_path(const std::string& path, const std::string& target); bool matching_variable_path(const std::string& path, const std::string& target) const;
ResourceCallback m_cb; /**< Resource handler callback */ ResourceCallback m_cb; /**< Resource handler callback */
std::deque<std::string> m_path; /**< Path components */ std::deque<std::string> m_path; /**< Path components */
@ -73,4 +73,4 @@ private:
* *
* @return Response to request * @return Response to request
*/ */
HttpResponse resource_handle_request(HttpRequest& request); HttpResponse resource_handle_request(const HttpRequest& request);

View File

@ -31,7 +31,7 @@ using std::string;
using mxs::SpinLock; using mxs::SpinLock;
using mxs::SpinLockGuard; using mxs::SpinLockGuard;
Resource::Resource(ResourceCallback cb, int components, ...): Resource::Resource(ResourceCallback cb, int components, ...) :
m_cb(cb) m_cb(cb)
{ {
va_list args; va_list args;
@ -45,9 +45,11 @@ Resource::Resource(ResourceCallback cb, int components, ...):
va_end(args); va_end(args);
} }
Resource::~Resource() { } Resource::~Resource()
{
}
bool Resource::match(HttpRequest& request) bool Resource::match(const HttpRequest& request) const
{ {
bool rval = false; bool rval = false;
@ -69,12 +71,12 @@ bool Resource::match(HttpRequest& request)
return rval; return rval;
} }
HttpResponse Resource::call(HttpRequest& request) HttpResponse Resource::call(const HttpRequest& request) const
{ {
return m_cb(request); return m_cb(request);
}; };
bool Resource::matching_variable_path(const string& path, const string& target) bool Resource::matching_variable_path(const string& path, const string& target) const
{ {
bool rval = false; bool rval = false;
@ -103,7 +105,7 @@ bool Resource::matching_variable_path(const string& path, const string& target)
return rval; return rval;
} }
HttpResponse cb_create_server(HttpRequest& request) HttpResponse cb_create_server(const HttpRequest& request)
{ {
json_t* json = request.get_json(); json_t* json = request.get_json();
@ -120,7 +122,7 @@ HttpResponse cb_create_server(HttpRequest& request)
return HttpResponse(MHD_HTTP_BAD_REQUEST); return HttpResponse(MHD_HTTP_BAD_REQUEST);
} }
HttpResponse cb_alter_server(HttpRequest& request) HttpResponse cb_alter_server(const HttpRequest& request)
{ {
json_t* json = request.get_json(); json_t* json = request.get_json();
@ -137,7 +139,7 @@ HttpResponse cb_alter_server(HttpRequest& request)
return HttpResponse(MHD_HTTP_BAD_REQUEST); return HttpResponse(MHD_HTTP_BAD_REQUEST);
} }
HttpResponse cb_create_monitor(HttpRequest& request) HttpResponse cb_create_monitor(const HttpRequest& request)
{ {
json_t* json = request.get_json(); json_t* json = request.get_json();
@ -154,12 +156,12 @@ HttpResponse cb_create_monitor(HttpRequest& request)
return HttpResponse(MHD_HTTP_BAD_REQUEST); return HttpResponse(MHD_HTTP_BAD_REQUEST);
} }
HttpResponse cb_all_servers(HttpRequest& request) HttpResponse cb_all_servers(const HttpRequest& request)
{ {
return HttpResponse(MHD_HTTP_OK, server_list_to_json(request.host())); return HttpResponse(MHD_HTTP_OK, server_list_to_json(request.host()));
} }
HttpResponse cb_get_server(HttpRequest& request) HttpResponse cb_get_server(const HttpRequest& request)
{ {
SERVER* server = server_find_by_unique_name(request.uri_part(1).c_str()); SERVER* server = server_find_by_unique_name(request.uri_part(1).c_str());
@ -171,12 +173,12 @@ HttpResponse cb_get_server(HttpRequest& request)
return HttpResponse(MHD_HTTP_NOT_FOUND); return HttpResponse(MHD_HTTP_NOT_FOUND);
} }
HttpResponse cb_all_services(HttpRequest& request) HttpResponse cb_all_services(const HttpRequest& request)
{ {
return HttpResponse(MHD_HTTP_OK, service_list_to_json(request.host())); return HttpResponse(MHD_HTTP_OK, service_list_to_json(request.host()));
} }
HttpResponse cb_get_service(HttpRequest& request) HttpResponse cb_get_service(const HttpRequest& request)
{ {
SERVICE* service = service_find(request.uri_part(1).c_str()); SERVICE* service = service_find(request.uri_part(1).c_str());
@ -188,12 +190,12 @@ HttpResponse cb_get_service(HttpRequest& request)
return HttpResponse(MHD_HTTP_NOT_FOUND); return HttpResponse(MHD_HTTP_NOT_FOUND);
} }
HttpResponse cb_all_filters(HttpRequest& request) HttpResponse cb_all_filters(const HttpRequest& request)
{ {
return HttpResponse(MHD_HTTP_OK, filter_list_to_json(request.host())); return HttpResponse(MHD_HTTP_OK, filter_list_to_json(request.host()));
} }
HttpResponse cb_get_filter(HttpRequest& request) HttpResponse cb_get_filter(const HttpRequest& request)
{ {
MXS_FILTER_DEF* filter = filter_def_find(request.uri_part(1).c_str()); MXS_FILTER_DEF* filter = filter_def_find(request.uri_part(1).c_str());
@ -205,12 +207,12 @@ HttpResponse cb_get_filter(HttpRequest& request)
return HttpResponse(MHD_HTTP_NOT_FOUND); return HttpResponse(MHD_HTTP_NOT_FOUND);
} }
HttpResponse cb_all_monitors(HttpRequest& request) HttpResponse cb_all_monitors(const HttpRequest& request)
{ {
return HttpResponse(MHD_HTTP_OK, monitor_list_to_json(request.host())); return HttpResponse(MHD_HTTP_OK, monitor_list_to_json(request.host()));
} }
HttpResponse cb_get_monitor(HttpRequest& request) HttpResponse cb_get_monitor(const HttpRequest& request)
{ {
MXS_MONITOR* monitor = monitor_find(request.uri_part(1).c_str()); MXS_MONITOR* monitor = monitor_find(request.uri_part(1).c_str());
@ -222,13 +224,13 @@ HttpResponse cb_get_monitor(HttpRequest& request)
return HttpResponse(MHD_HTTP_NOT_FOUND); return HttpResponse(MHD_HTTP_NOT_FOUND);
} }
HttpResponse cb_all_sessions(HttpRequest& request) HttpResponse cb_all_sessions(const HttpRequest& request)
{ {
// TODO: Implement this // TODO: Implement this
return HttpResponse(MHD_HTTP_OK); return HttpResponse(MHD_HTTP_OK);
} }
HttpResponse cb_get_session(HttpRequest& request) HttpResponse cb_get_session(const HttpRequest& request)
{ {
int id = atoi(request.uri_part(1).c_str()); int id = atoi(request.uri_part(1).c_str());
MXS_SESSION* session = session_get_by_id(id); MXS_SESSION* session = session_get_by_id(id);
@ -243,19 +245,19 @@ HttpResponse cb_get_session(HttpRequest& request)
return HttpResponse(MHD_HTTP_NOT_FOUND); return HttpResponse(MHD_HTTP_NOT_FOUND);
} }
HttpResponse cb_maxscale(HttpRequest& request) HttpResponse cb_maxscale(const HttpRequest& request)
{ {
// TODO: Show logs // TODO: Show logs
return HttpResponse(MHD_HTTP_OK); return HttpResponse(MHD_HTTP_OK);
} }
HttpResponse cb_logs(HttpRequest& request) HttpResponse cb_logs(const HttpRequest& request)
{ {
// TODO: Show logs // TODO: Show logs
return HttpResponse(MHD_HTTP_OK); return HttpResponse(MHD_HTTP_OK);
} }
HttpResponse cb_flush(HttpRequest& request) HttpResponse cb_flush(const HttpRequest& request)
{ {
// Flush logs // Flush logs
if (mxs_log_rotate() == 0) if (mxs_log_rotate() == 0)
@ -268,19 +270,19 @@ HttpResponse cb_flush(HttpRequest& request)
} }
} }
HttpResponse cb_threads(HttpRequest& request) HttpResponse cb_threads(const HttpRequest& request)
{ {
// TODO: Show thread status // TODO: Show thread status
return HttpResponse(MHD_HTTP_OK); return HttpResponse(MHD_HTTP_OK);
} }
HttpResponse cb_tasks(HttpRequest& request) HttpResponse cb_tasks(const HttpRequest& request)
{ {
// TODO: Show housekeeper tasks // TODO: Show housekeeper tasks
return HttpResponse(MHD_HTTP_OK); return HttpResponse(MHD_HTTP_OK);
} }
HttpResponse cb_modules(HttpRequest& request) HttpResponse cb_modules(const HttpRequest& request)
{ {
// TODO: Show modules // TODO: Show modules
return HttpResponse(MHD_HTTP_OK); return HttpResponse(MHD_HTTP_OK);
@ -288,6 +290,8 @@ HttpResponse cb_modules(HttpRequest& request)
class RootResource class RootResource
{ {
RootResource(const RootResource&);
RootResource& operator=(const RootResource&);
public: public:
typedef std::shared_ptr<Resource> SResource; typedef std::shared_ptr<Resource> SResource;
typedef list<SResource> ResourceList; typedef list<SResource> ResourceList;
@ -369,7 +373,7 @@ private:
static RootResource resources; /**< Core resource set */ static RootResource resources; /**< Core resource set */
static SpinLock resource_lock; static SpinLock resource_lock;
HttpResponse resource_handle_request(HttpRequest& request) HttpResponse resource_handle_request(const HttpRequest& request)
{ {
SpinLockGuard guard(resource_lock); SpinLockGuard guard(resource_lock);
return resources.process_request(request); return resources.process_request(request);