18#include <boost/pointer_cast.hpp>
30struct HttpCommandHooks {
31 int hook_index_http_auth_;
32 int hook_index_http_response_;
61 HttpResponsePtr response = createStockHttpResponseInternal(request, status_code);
67HttpCommandResponseCreator::
74 HttpVersion http_version(request->context()->http_version_major_,
75 request->context()->http_version_minor_);
79 http_version.major_ = 1;
80 http_version.minor_ = 0;
92HttpCommandResponseCreator::createDynamicHttpResponse(
HttpRequestPtr request) {
98 headers = config_->getHttpHeaders();
101 http_response = auth->checkAuth(*
this, request);
106 bool auth_failed =
false;
113 bool reset_handle =
false;
117 ScopedCalloutHandleState callout_handle_state(callout_handle);
120 callout_handle->setArgument(
"request", request);
121 callout_handle->setArgument(
"response", http_response);
126 callout_handle->getArgument(
"request", request);
127 callout_handle->getArgument(
"response", http_response);
139 if (!auth_failed && !headers.empty()) {
141 if (http_response->isFinalized()) {
143 http_response->reset();
144 http_response->finalize();
147 return (http_response);
152 request->resetCalloutHandle();
162 boost::dynamic_pointer_cast<PostHttpRequestJson>(request);
182 HttpStatusCode::INTERNAL_SERVER_ERROR));
193 response_list->add(boost::const_pointer_cast<Element>(response));
194 response = response_list;
198 http_response = boost::dynamic_pointer_cast<
199 HttpResponseJson>(createStockHttpResponseInternal(request, HttpStatusCode::OK));
200 http_response->setBodyAsJson(response);
201 http_response->finalize();
207 ScopedCalloutHandleState callout_handle_state(callout_handle);
210 callout_handle->setArgument(
"request", request);
211 callout_handle->setArgument(
"response", http_response);
216 callout_handle->getArgument(
"response", http_response);
221 return (http_response);
225HttpCommandResponseCreator::checkService(
ConstElementPtr command)
const {
242 if (services->empty()) {
245 if (services->size() != 1) {
252 string name = service->stringValue();
257 string msg =
"unsupported service '" + name +
"', expected '";
@ NEXT_STEP_CONTINUE
continue normally
static ElementPtr createList(const Position &pos=ZERO_POSITION())
Creates an empty ListElement type ElementPtr.
virtual isc::data::ConstElementPtr processCommand(const isc::data::ConstElementPtr &cmd)
Triggers command processing.
static CommandMgr & instance()
CommandMgr is a singleton class.
static std::string SUPPORTED_SERVICE
Supported service.
static bool EMULATE_AGENT_RESPONSE
Emulation flag.
virtual http::HttpRequestPtr createNewHttpRequest() const
Create a new request.
virtual http::HttpResponsePtr createStockHttpResponse(const http::HttpRequestPtr &request, const http::HttpStatusCode &status_code) const
Creates stock HTTP response.
static int registerHook(const std::string &name)
Register Hook.
static bool calloutsPresent(int index)
Are callouts present?
static void callCallouts(int index, CalloutHandle &handle)
Calls the callouts for a given hook.
Represents HTTP response with JSON content.
Represents HTTP POST request with JSON body.
This file contains several functions and constants that are used for handling commands and responses ...
const int CONTROL_RESULT_ERROR
Status code indicating a general failure.
ConstElementPtr createAnswer()
Creates a standard config/command level success answer message (i.e.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
HttpStatusCode
HTTP status codes (cf RFC 2068).
void copyHttpHeaders(const CfgHttpHeaders &headers, const HTTP_MSG &message)
Copy config HTTP headers to message.
boost::shared_ptr< PostHttpRequestJson > PostHttpRequestJsonPtr
Pointer to PostHttpRequestJson.
boost::shared_ptr< HttpAuthConfig > HttpAuthConfigPtr
Type of shared pointers to HTTP authentication configuration.
boost::shared_ptr< HttpResponseJson > HttpResponseJsonPtr
Pointer to the HttpResponseJson object.
boost::shared_ptr< HttpResponse > HttpResponsePtr
Pointer to the HttpResponse object.
boost::shared_ptr< HttpRequest > HttpRequestPtr
Pointer to the HttpRequest object.
std::vector< CfgHttpHeader > CfgHttpHeaders
Collection of config HTTP headers.
Defines the logger used by the top-level component of kea-lfc.