void RequestDataParser::operator()(const HttpServer::request& request, BuildingResponse&, Params& params, function<void(RequestParser::Status)> callback) { { const char* get_params = strrchr(request.destination.c_str(), '?'); std::string uri = request.destination; // Setting Headers parameters { auto it = request.headers.begin(); auto end = request.headers.end(); for (; it != end ; ++it) { boost::network::http::request_header_narrow header = *it; params["headers"][header.name] = header.value; } } // Getting get parameters if (get_params != 0) { std::string str_params(get_params); uri.erase(uri.size() - str_params.size()); str_params.erase(0, 1); cgi2params(params.as_data(), str_params); } // Set URI and method for the posterity (is that even a word ?) params["uri"] = uri; params["method"] = request.method; } callback(RequestParser::Continue); }
void RequestJsonParser::body_received(const HttpServer::request& request, BuildingResponse&, Params& params, const string& body) { if (body.size() > 0) params.as_data().merge(DataTree().from_json(body)); }