MCPcopy Create free account
hub / github.com/PABannier/bark.cpp / process_request

Method process_request

examples/server/httplib.h:6452–6584  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6450}
6451
6452inline bool
6453Server::process_request(Stream &strm, bool close_connection,
6454 bool &connection_closed,
6455 const std::function<void(Request &)> &setup_request) {
6456 std::array<char, 2048> buf{};
6457
6458 detail::stream_line_reader line_reader(strm, buf.data(), buf.size());
6459
6460 // Connection has been closed on client
6461 if (!line_reader.getline()) { return false; }
6462
6463 Request req;
6464
6465 Response res;
6466 res.version = "HTTP/1.1";
6467 res.headers = default_headers_;
6468
6469#ifdef _WIN32
6470 // TODO: Increase FD_SETSIZE statically (libzmq), dynamically (MySQL).
6471#else
6472#ifndef CPPHTTPLIB_USE_POLL
6473 // Socket file descriptor exceeded FD_SETSIZE...
6474 if (strm.socket() >= FD_SETSIZE) {
6475 Headers dummy;
6476 detail::read_headers(strm, dummy);
6477 res.status = 500;
6478 return write_response(strm, close_connection, req, res);
6479 }
6480#endif
6481#endif
6482
6483 // Check if the request URI doesn't exceed the limit
6484 if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) {
6485 Headers dummy;
6486 detail::read_headers(strm, dummy);
6487 res.status = 414;
6488 return write_response(strm, close_connection, req, res);
6489 }
6490
6491 // Request line and headers
6492 if (!parse_request_line(line_reader.ptr(), req) ||
6493 !detail::read_headers(strm, req.headers)) {
6494 res.status = 400;
6495 return write_response(strm, close_connection, req, res);
6496 }
6497
6498 if (req.get_header_value("Connection") == "close") {
6499 connection_closed = true;
6500 }
6501
6502 if (req.version == "HTTP/1.0" &&
6503 req.get_header_value("Connection") != "Keep-Alive") {
6504 connection_closed = true;
6505 }
6506
6507 strm.get_remote_ip_and_port(req.remote_addr, req.remote_port);
6508 req.set_header("REMOTE_ADDR", req.remote_addr);
6509 req.set_header("REMOTE_PORT", std::to_string(req.remote_port));

Callers

nothing calls this directly

Calls 15

read_headersFunction · 0.85
parse_range_headerFunction · 0.85
status_messageFunction · 0.85
read_contentFunction · 0.85
dataMethod · 0.80
getlineMethod · 0.80
socketMethod · 0.80
ptrMethod · 0.80
get_header_valueMethod · 0.80
set_headerMethod · 0.80
get_local_ip_and_portMethod · 0.80

Tested by

no test coverage detected