-
Notifications
You must be signed in to change notification settings - Fork 251
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[coro_http_server][feat]update coro_http server (#578)
- Loading branch information
Showing
9 changed files
with
723 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
#pragma once | ||
|
||
#include <chrono> | ||
#include <ctime> | ||
#include <string> | ||
|
||
#include "time_util.hpp" | ||
|
||
namespace cinatra { | ||
|
||
class cookie { | ||
public: | ||
cookie() = default; | ||
cookie(const std::string &name, const std::string &value) | ||
: name_(name), value_(value) {} | ||
|
||
void set_version(int version) { version_ = version; } | ||
|
||
void set_name(const std::string &name) { name_ = name; } | ||
|
||
std::string get_name() const { return name_; } | ||
|
||
void set_value(const std::string &value) { value_ = value; } | ||
|
||
std::string get_value() const { return value_; } | ||
|
||
void set_comment(const std::string &comment) { comment_ = comment; } | ||
|
||
void set_domain(const std::string &domain) { domain_ = domain; } | ||
|
||
void set_path(const std::string &path) { path_ = path; } | ||
|
||
void set_priority(const std::string &priority) { priority_ = priority; } | ||
|
||
void set_secure(bool secure) { secure_ = secure; } | ||
|
||
void set_max_age(std::time_t seconds) { max_age_ = seconds; } | ||
|
||
void set_http_only(bool http_only) { http_only_ = http_only; } | ||
|
||
std::string to_string() const { | ||
std::string result; | ||
result.reserve(256); | ||
result.append(name_); | ||
result.append("="); | ||
if (version_ == 0) { | ||
// Netscape cookie | ||
result.append(value_); | ||
if (!domain_.empty()) { | ||
result.append("; domain="); | ||
result.append(domain_); | ||
} | ||
if (!path_.empty()) { | ||
result.append("; path="); | ||
result.append(path_); | ||
} | ||
if (!priority_.empty()) { | ||
result.append("; Priority="); | ||
result.append(priority_); | ||
} | ||
if (max_age_ != -1) { | ||
result.append("; expires="); | ||
result.append(get_gmt_time_str(std::chrono::system_clock::from_time_t( | ||
max_age_ + std::time(nullptr)))); | ||
} | ||
if (secure_) { | ||
result.append("; secure"); | ||
} | ||
if (http_only_) { | ||
result.append("; HttpOnly"); | ||
} | ||
} | ||
else { | ||
// RFC 2109 cookie | ||
result.append("\""); | ||
result.append(value_); | ||
result.append("\""); | ||
if (!comment_.empty()) { | ||
result.append("; Comment=\""); | ||
result.append(comment_); | ||
result.append("\""); | ||
} | ||
if (!domain_.empty()) { | ||
result.append("; Domain=\""); | ||
result.append(domain_); | ||
result.append("\""); | ||
} | ||
if (!path_.empty()) { | ||
result.append("; Path=\""); | ||
result.append(path_); | ||
result.append("\""); | ||
} | ||
if (!priority_.empty()) { | ||
result.append("; Priority=\""); | ||
result.append(priority_); | ||
result.append("\""); | ||
} | ||
|
||
if (max_age_ != -1) { | ||
result.append("; Max-Age=\""); | ||
result.append(std::to_string(max_age_)); | ||
result.append("\""); | ||
} | ||
if (secure_) { | ||
result.append("; secure"); | ||
} | ||
if (http_only_) { | ||
result.append("; HttpOnly"); | ||
} | ||
result.append("; Version=\"1\""); | ||
} | ||
return result; | ||
} | ||
|
||
private: | ||
std::string name_ = ""; | ||
std::string value_ = ""; | ||
std::string comment_ = ""; | ||
std::string domain_ = ""; | ||
std::string priority_ = ""; | ||
std::string path_ = ""; | ||
std::time_t max_age_ = -1; | ||
int version_ = 0; | ||
bool secure_ = false; | ||
bool http_only_ = false; | ||
}; | ||
|
||
} // namespace cinatra |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.