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/client/SocketContext.h"
44#include "core/EventReceiver.h"
45#include "core/socket/SocketAddress.h"
46#include "core/socket/stream/SocketConnection.h"
47#include "web/http/CookieOptions.h"
49#ifndef DOXYGEN_SHOULD_SKIP_THIS
51#include "log/Logger.h"
60namespace web::http::client {
63 const std::function<
void(
const std::shared_ptr<Request>&)>& onRequestBegin,
64 const std::function<
void(
const std::shared_ptr<Request>&)>& onRequestEnd,
65 bool pipelinedRequests)
66 : Super
(socketConnection
)
78 [
this](web::http::client::
Response&& response) {
84 [
this](
int status,
const std::string& reason) {
107 const std::string requestLine = std::string(request
.method)
154 if (!masterRequest.expired()) {
172 const std::string requestLine = std::string(request
.method)
187 if (!masterRequest.expired()) {
228 const std::shared_ptr<Request> request = std::make_shared<Request>(std::move(
deliveredRequests.front()));
231 const std::string requestLine = std::string(request->
method)
233 .append(request->
url)
235 .append(std::to_string(request->
httpMajor))
237 .append(std::to_string(request->
httpMinor));
241 const bool httpClose =
254 const std::shared_ptr<Request> request = std::make_shared<Request>(std::move(
deliveredRequests.front()));
258 << std::string(request->
method)
260 .append(request->
url)
262 .append(std::to_string(request->
httpMajor))
264 .append(std::to_string(request->
httpMinor));
279 if (!masterRequest.expired()) {
305 std::size_t consumed = 0;
static void atNextTick(const std::function< void(void)> &callBack)
virtual std::string toString(bool expanded=true) const =0
virtual std::string getEndpoint(const std::string_view &format={}) const
const std::string & getConnectionName() const
virtual const core::socket::SocketAddress & getRemoteAddress() const =0
SocketConnection * getSocketConnection() const
SocketContext(core::socket::stream::SocketConnection *socketConnection)
void shutdownWrite(bool forceClose=false)
std::string header(const std::string &field)
bool initiate(const std::shared_ptr< Request > &request)
void setMasterRequest(const std::shared_ptr< Request > &masterRequest)
void deliverResponse(const std::shared_ptr< Request > &request, const std::shared_ptr< Response > &response)
void deliverResponseParseError(const std::shared_ptr< Request > &request, const std::string &message)
ResponseParser(core::socket::stream::SocketContext *socketContext, const std::function< void()> &onResponseStart, const std::function< void(Response &&)> &onResponseParsed, const std::function< void(int, const std::string &)> &onResponseParseError)
Response && getResponse()
ConnectionState connectionState
SocketContext(core::socket::stream::SocketConnection *socketConnection, const std::function< void(const std::shared_ptr< Request > &)> &onRequestBegin, const std::function< void(const std::shared_ptr< Request > &)> &onRequestEnd, bool pipelinedRequests)
void requestPrepared(Request &&request)
std::list< Request > deliveredRequests
void requestDelivered(Request &&request, bool success)
void deliverResponseParseError(int status, const std::string &reason)
void onDisconnected() override
std::shared_ptr< Request > currentRequest
std::size_t onReceivedFromPeer() override
std::function< void(const std::shared_ptr< Request > &)> onRequestBegin
void deliverResponse(Response &&response)
void onWriteError(int errnum) override
bool onSignal(int signum) override
~SocketContext() override
void initiateRequest(Request &request)
std::function< void(const std::shared_ptr< Request > &)> onRequestEnd
void onConnected() override
void responseDelivered(bool httpClose)
std::list< Request > pendingRequests
std::shared_ptr< Request > masterRequest
bool ciContains(const std::string &str1, const std::string &str2)