67 if (!pendingRequests.empty()) {
68 const std::shared_ptr<Request>& pendingRequest = pendingRequests.front();
70 LOG(INFO) << getSocketConnection()->getConnectionName() <<
" HTTP Request ready: " << pendingRequest->method <<
" "
71 << pendingRequest->url <<
" HTTP/" << pendingRequest->httpMajor <<
"." << pendingRequest->httpMinor;
73 masterResponse->init();
74 masterResponse->httpMajor = pendingRequest->httpMajor;
75 masterResponse->httpMinor = pendingRequest->httpMinor;
77 const std::string connection = pendingRequest->get(
"Connection");
78 if (!connection.empty()) {
79 masterResponse->set(
"Connection", connection);
82 onRequestReady(pendingRequest, masterResponse);
84 LOG(INFO) << getSocketConnection()->getConnectionName() <<
" HTTP Request: No more pending";
89 const std::shared_ptr<Request>& pendingRequest = pendingRequests.front();
91 LOG(INFO) << getSocketConnection()->getConnectionName() <<
" HTTP Response started: " << pendingRequest->method <<
" "
92 << pendingRequest->url <<
" HTTP/" << pendingRequest->httpMajor <<
"." << pendingRequest->httpMinor;
97 const std::shared_ptr<Request>& pendingRequest = pendingRequests.front();
99 LOG(INFO) << getSocketConnection()->getConnectionName() <<
" HTTP Response completed: " << pendingRequest->method <<
" "
100 << pendingRequest->url <<
" HTTP/" << pendingRequest->httpMajor <<
"." << pendingRequest->httpMinor;
102 httpClose = masterResponse->connectionState == ConnectionState::Close ||
103 (masterResponse->connectionState == ConnectionState::Default &&
104 ((masterResponse->httpMajor == 0 && masterResponse->httpMinor == 9) ||
105 (masterResponse->httpMajor == 1 && masterResponse->httpMinor == 0)));
109 LOG(WARNING) << getSocketConnection()->getConnectionName() <<
" HTTP Response wrong content length";
116 const std::shared_ptr<Request>& pendingRequest = pendingRequests.front();
118 LOG(INFO) << getSocketConnection()->getConnectionName() <<
" HTTP Request completed: " << pendingRequest->method <<
" "
119 << pendingRequest->url <<
" HTTP/" << pendingRequest->httpMajor <<
"." << pendingRequest->httpMinor;
122 LOG(INFO) << getSocketConnection()->getConnectionName() <<
" HTTP: Connection = Close";
126 LOG(DEBUG) << getSocketConnection()->getConnectionName() <<
" HTTP: Connection = Keep-Alive";
128 core::EventReceiver::atNextTick([
this, response =
static_cast<std::weak_ptr<Response>>(
this->masterResponse)]() {
129 if (!response.expired()) {
130 pendingRequests.pop_front();
bool onSignal(int signum) override
void onConnected() override
void onDisconnected() override
void responseCompleted(bool success)
std::size_t onReceivedFromPeer() override
void onWriteError(int errnum) override
SocketContext(core::socket::stream::SocketConnection *socketConnection, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onRequestReady)