From 4a41b678c3671b2238f3a41be1dcdd4c72a5a5af Mon Sep 17 00:00:00 2001 From: whaffman Date: Thu, 30 Oct 2025 15:56:30 +0100 Subject: [PATCH] http header date server --- webserv/http/HttpResponse.cpp | 21 +++++++++++++++++---- webserv/http/HttpResponse.hpp | 3 ++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/webserv/http/HttpResponse.cpp b/webserv/http/HttpResponse.cpp index 2c4997a..2265aa8 100644 --- a/webserv/http/HttpResponse.cpp +++ b/webserv/http/HttpResponse.cpp @@ -1,6 +1,5 @@ -#include - #include // for getStatusCodeReason +#include #include // for basic_string, operator+, string, char_traits, to_string #include // for vector @@ -54,11 +53,21 @@ const HttpHeaders &HttpResponse::getHeaders() const noexcept return *headers_; } -std::string HttpResponse::getContentLength() const +std::string HttpResponse::getContentLengthHeader() const { return "Content-Length: " + std::to_string(body_.size()) + "\r\n"; } +std::string HttpResponse::getDateHeader() const +{ + time_t now = time(nullptr); + struct tm *gmt = gmtime(&now); + char buffer[100]; + strftime(buffer, sizeof(buffer), "%a, %d %b %Y %H:%M:%S GMT", gmt); + + return "Date: " + std::string(buffer) + "\r\n"; +} + std::vector HttpResponse::toBytes() const { std::string headerStr; @@ -67,7 +76,11 @@ std::vector HttpResponse::toBytes() const reason = Http::getStatusCodeReason(statusCode_); headerStr = "HTTP/1.1 " + std::to_string(statusCode_) + " " + reason + "\r\n"; // todo: status line - headerStr += getContentLength(); + headerStr += getContentLengthHeader(); + headerStr += getDateHeader(); + headerStr += "Connection: close\r\n"; + headerStr += "Server: Webserv/1.0\r\n"; + headerStr += headers_->toString(); std::vector responseData(headerStr.begin(), headerStr.end()); diff --git a/webserv/http/HttpResponse.hpp b/webserv/http/HttpResponse.hpp index 1e287e0..09bb17c 100644 --- a/webserv/http/HttpResponse.hpp +++ b/webserv/http/HttpResponse.hpp @@ -42,7 +42,8 @@ class HttpResponse private: [[nodiscard]] std::string getStatusLine() const; - [[nodiscard]] std::string getContentLength() const; + [[nodiscard]] std::string getContentLengthHeader() const; + [[nodiscard]] std::string getDateHeader() const; std::vector body_; std::unique_ptr headers_;