фича: автообновление сессии
This commit is contained in:
@@ -6,10 +6,14 @@
|
||||
|
||||
|
||||
namespace http::server {
|
||||
const char* SERVER_HEADER_VALUE = "TerminalWebServer v0.1";
|
||||
const char* SERVER_HEADER_VALUE = "TerminalWebServer"
|
||||
#ifdef PROJECT_GIT_REVISION
|
||||
" " PROJECT_GIT_REVISION
|
||||
#endif
|
||||
;
|
||||
|
||||
Connection::Connection(boost::asio::ip::tcp::socket socket, ConnectionManager &manager, request_handler handler)
|
||||
: socket_(std::move(socket)), connection_manager_(manager), request_handler_(std::move(handler)), request_(), reply_() {
|
||||
: socket_(std::move(socket)), connection_manager_(manager), request_handler_(std::move(handler)), request_(false), reply_() {
|
||||
}
|
||||
|
||||
void Connection::start() {
|
||||
@@ -51,7 +55,7 @@ namespace http::server {
|
||||
void Connection::doWrite() {
|
||||
reply_.headers.push_back({.name = "Server", .value = SERVER_HEADER_VALUE});
|
||||
reply_.headers.push_back({.name = "Content-Length", .value = std::to_string(reply_.content.size())});
|
||||
if (request_.http_version_major == 1) {
|
||||
if (request_.httpVersionMajor == 1) {
|
||||
reply_.headers.push_back({.name = "Connection", .value = "keep-alive"});
|
||||
}
|
||||
|
||||
@@ -71,7 +75,7 @@ namespace http::server {
|
||||
}
|
||||
|
||||
SslConnection::SslConnection(boost::asio::ip::tcp::socket socket, ConnectionManager &manager, request_handler handler, const std::shared_ptr<boost::asio::ssl::context>& ctx):
|
||||
stream_(std::move(socket), *ctx), connection_manager_(manager), request_handler_(std::move(handler)), request_(), reply_() {
|
||||
stream_(std::move(socket), *ctx), connection_manager_(manager), request_handler_(std::move(handler)), request_(true), reply_() {
|
||||
}
|
||||
|
||||
void SslConnection::start() {
|
||||
@@ -125,7 +129,7 @@ namespace http::server {
|
||||
void SslConnection::doWrite() {
|
||||
reply_.headers.push_back({.name = "Server", .value = SERVER_HEADER_VALUE});
|
||||
reply_.headers.push_back({.name = "Content-Length", .value = std::to_string(reply_.content.size())});
|
||||
if (request_.http_version_major == 1) {
|
||||
if (request_.httpVersionMajor == 1) {
|
||||
reply_.headers.push_back({.name = "Connection", .value = "keep-alive"});
|
||||
}
|
||||
|
||||
|
@@ -21,7 +21,7 @@ namespace http::server {
|
||||
/// A request received from a client.
|
||||
class Request {
|
||||
public:
|
||||
Request();
|
||||
Request(bool secure);
|
||||
|
||||
void reset();
|
||||
std::string getHeaderValue(const std::string& headerName) const;
|
||||
@@ -29,9 +29,10 @@ namespace http::server {
|
||||
std::string method;
|
||||
std::string queryUri;
|
||||
std::unique_ptr<Url> url;
|
||||
bool is_keep_alive{};
|
||||
int http_version_major{};
|
||||
int http_version_minor{};
|
||||
bool isKeepAlive{};
|
||||
const bool isSecure;
|
||||
int httpVersionMajor{};
|
||||
int httpVersionMinor{};
|
||||
std::vector<header> headers;
|
||||
std::vector<char> payload;
|
||||
|
||||
|
@@ -51,7 +51,7 @@ namespace http::server {
|
||||
|
||||
Url::~Url() = default;
|
||||
|
||||
Request::Request() = default;
|
||||
Request::Request(bool secure): isSecure(secure) {}
|
||||
|
||||
void Request::reset() {
|
||||
method = "";
|
||||
@@ -59,9 +59,9 @@ namespace http::server {
|
||||
if (url != nullptr) {
|
||||
url.reset(nullptr);
|
||||
}
|
||||
is_keep_alive = false;
|
||||
http_version_major = 0;
|
||||
http_version_minor = 0;
|
||||
isKeepAlive = false;
|
||||
httpVersionMajor = 0;
|
||||
httpVersionMinor = 0;
|
||||
headers.clear();
|
||||
payload.clear();
|
||||
}
|
||||
@@ -151,8 +151,8 @@ namespace http::server {
|
||||
}
|
||||
case http_version_slash:
|
||||
if (input == '/') {
|
||||
req.http_version_major = 0;
|
||||
req.http_version_minor = 0;
|
||||
req.httpVersionMajor = 0;
|
||||
req.httpVersionMinor = 0;
|
||||
state_ = http_version_major_start;
|
||||
return indeterminate;
|
||||
} else {
|
||||
@@ -160,7 +160,7 @@ namespace http::server {
|
||||
}
|
||||
case http_version_major_start:
|
||||
if (is_digit(input)) {
|
||||
req.http_version_major = req.http_version_major * 10 + input - '0';
|
||||
req.httpVersionMajor = req.httpVersionMajor * 10 + input - '0';
|
||||
state_ = http_version_major;
|
||||
return indeterminate;
|
||||
} else {
|
||||
@@ -171,14 +171,14 @@ namespace http::server {
|
||||
state_ = http_version_minor_start;
|
||||
return indeterminate;
|
||||
} else if (is_digit(input)) {
|
||||
req.http_version_major = req.http_version_major * 10 + input - '0';
|
||||
req.httpVersionMajor = req.httpVersionMajor * 10 + input - '0';
|
||||
return indeterminate;
|
||||
} else {
|
||||
return bad;
|
||||
}
|
||||
case http_version_minor_start:
|
||||
if (is_digit(input)) {
|
||||
req.http_version_minor = req.http_version_minor * 10 + input - '0';
|
||||
req.httpVersionMinor = req.httpVersionMinor * 10 + input - '0';
|
||||
state_ = http_version_minor;
|
||||
return indeterminate;
|
||||
} else {
|
||||
@@ -189,7 +189,7 @@ namespace http::server {
|
||||
state_ = expecting_newline_1;
|
||||
return indeterminate;
|
||||
} else if (is_digit(input)) {
|
||||
req.http_version_minor = req.http_version_minor * 10 + input - '0';
|
||||
req.httpVersionMinor = req.httpVersionMinor * 10 + input - '0';
|
||||
return indeterminate;
|
||||
} else {
|
||||
return bad;
|
||||
|
Reference in New Issue
Block a user