2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#include "web/http/server/SocketContext.h"
44#include "core/EventReceiver.h"
45#include "core/socket/stream/SocketConnection.h"
46#include "web/http/StatusCodes.h"
47#include "web/http/server/Response.h"
49#ifndef DOXYGEN_SHOULD_SKIP_THIS
51#include "log/Logger.h"
52#include "utils/Timeval.h"
59namespace web::http::
server {
63 const std::function<
void(
const std::shared_ptr<
Request>&,
const std::shared_ptr<
Response>&)>& onRequestReady)
82 [
this](
int status,
const std::string& reason) {
111 if (pendingRequest->
status == 0) {
120 const std::string connection = pendingRequest->
get("Connection");
121 if (!connection.empty()) {
149 <<
" " << pendingRequest->
url <<
" HTTP/" << pendingRequest->
httpMajor <<
"." << pendingRequest->
httpMinor;
151 <<
"HTTP/" + std::to_string(response
.httpMajor)
179 <<
"HTTP/" + std::to_string(response
.httpMajor)
198 if (!response.expired()) {
210 onConnectEventReceiver();
215 std::size_t consumed = 0;
230 onDisconnectEventReceiver();
static void atNextTick(const std::function< void(void)> &callBack)
virtual void setReadTimeout(const utils::Timeval &timeout)=0
const std::string & getConnectionName() const
SocketConnection * getSocketConnection() const
SocketContext(core::socket::stream::SocketConnection *socketConnection)
void shutdownWrite(bool forceClose=false)
static std::string reason(int status)
RequestParser(core::socket::stream::SocketContext *socketContext, const std::function< void()> &onRequestStart, const std::function< void(Request &&)> &onRequestParsed, const std::function< void(int, const std::string &)> &onRequestParseError)
Request(int status, const std::string &reason="")
const std::string & get(const std::string &key, int i=0) const
Response & status(int statusCode)
void send(const std::string &chunk)
std::string requestMethod
Response & set(const std::string &field, const std::string &value, bool overwrite=true)
ConnectionState connectionState
bool onSignal(int signum) override
std::list< std::function< void()> > onDisconnectEventReceiverList
void onConnected() override
void onDisconnected() override
void responseCompleted(const Response &response, bool success)
std::shared_ptr< Response > masterResponse
core::socket::stream::SocketContext Super
web::http::server::Response Response
std::size_t onReceivedFromPeer() override
void onWriteError(int errnum) override
std::list< std::function< void()> > onConnectEventReceiverList
void responseStarted(const Response &response)
void requestCompleted(const Response &response)
SocketContext(core::socket::stream::SocketConnection *socketConnection, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onRequestReady)
std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> onRequestReady
web::http::server::Request Request
SocketContext * onConnected(std::function< void()> onConnectEventReceiver)
SocketContext * onDisconnected(std::function< void()> onDisconnectEventReceiver)
std::list< std::shared_ptr< Request > > pendingRequests
bool ciContains(const std::string &str1, const std::string &str2)