diff --git a/fastcgi_conn.cpp b/fastcgi_conn.cpp index efa897a..90c7b66 100644 --- a/fastcgi_conn.cpp +++ b/fastcgi_conn.cpp @@ -19,7 +19,7 @@ FastCGIConn::FastCGIConn(int sock, const sockaddr_in6& client_addr, const std::f FastCGIConn::~FastCGIConn() { PCHECK(close(sock_) == 0); - LOG(INFO) << "connection closed"; + LOG(INFO) << "connection closed (handled " << requests_ << " requests)"; } void FastCGIConn::Write(const std::vector& vecs) { @@ -34,7 +34,6 @@ void FastCGIConn::Serve() { while (true) { const auto *header = buf_.ReadObj(); if (!header) { - LOG(INFO) << "readobj failed"; break; } @@ -56,6 +55,7 @@ void FastCGIConn::Serve() { case 4: { + CHECK_EQ(header->RequestId(), request_->RequestId()); ConstBuffer param_buf(buf_.Read(header->ContentLength()), header->ContentLength()); while (param_buf.ReadMaxLen() > 0) { const auto *param_header = param_buf.ReadObj(); @@ -68,8 +68,10 @@ void FastCGIConn::Serve() { case 5: { + CHECK_EQ(header->RequestId(), request_->RequestId()); if (header->ContentLength() == 0) { // Magic signal for completed request (mirrors the HTTP/1.1 protocol) + requests_++; callback_(std::move(request_)); } else { std::string_view in(buf_.Read(header->ContentLength()), header->ContentLength()); diff --git a/fastcgi_conn.h b/fastcgi_conn.h index 0e1bd77..127a1d1 100644 --- a/fastcgi_conn.h +++ b/fastcgi_conn.h @@ -21,6 +21,8 @@ class FastCGIConn { const int sock_; std::function)> callback_; + uint64_t requests_ = 0; + StreamBuffer buf_; std::unique_ptr request_; diff --git a/fastcgi_request.cpp b/fastcgi_request.cpp index 7fe01c1..35abaff 100644 --- a/fastcgi_request.cpp +++ b/fastcgi_request.cpp @@ -20,6 +20,10 @@ FastCGIRequest::FastCGIRequest(uint16_t request_id, FastCGIConn* conn) conn_(conn), out_buf_(fastcgi_max_record_len) {} +uint16_t FastCGIRequest::RequestId() { + return request_id_; +} + void FastCGIRequest::AddParam(const std::string_view& key, const std::string_view& value) { params_.try_emplace(std::string(key), std::string(value)); } diff --git a/fastcgi_request.h b/fastcgi_request.h index 4391de8..40fbb56 100644 --- a/fastcgi_request.h +++ b/fastcgi_request.h @@ -11,6 +11,8 @@ class FastCGIRequest { public: FastCGIRequest(uint16_t request_id, FastCGIConn *conn); + uint16_t RequestId(); + void AddParam(const std::string_view& key, const std::string_view& value); void AddIn(const std::string_view& in);