aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/cpr/test/httpsServer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/external_dependencies/cpr/test/httpsServer.cpp')
-rw-r--r--Src/external_dependencies/cpr/test/httpsServer.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/Src/external_dependencies/cpr/test/httpsServer.cpp b/Src/external_dependencies/cpr/test/httpsServer.cpp
new file mode 100644
index 00000000..401a4703
--- /dev/null
+++ b/Src/external_dependencies/cpr/test/httpsServer.cpp
@@ -0,0 +1,65 @@
+#include "httpsServer.hpp"
+#include <system_error>
+
+namespace cpr {
+HttpsServer::HttpsServer(fs::path&& baseDirPath, fs::path&& sslCertFileName, fs::path&& sslKeyFileName) : baseDirPath(baseDirPath.make_preferred().string()), sslCertFileName(sslCertFileName.make_preferred().string()), sslKeyFileName(sslKeyFileName.make_preferred().string()) {
+ // See https://mongoose.ws/tutorials/tls/
+ memset(static_cast<void*>(&tlsOpts), 0, sizeof(tlsOpts));
+ tlsOpts.cert = this->sslCertFileName.c_str();
+ tlsOpts.certkey = this->sslKeyFileName.c_str();
+}
+
+std::string HttpsServer::GetBaseUrl() {
+ return "https://127.0.0.1:" + std::to_string(GetPort());
+}
+
+uint16_t HttpsServer::GetPort() {
+ // Unassigned port in the ephemeral range
+ return 61937;
+}
+
+mg_connection* HttpsServer::initServer(mg_mgr* mgr, mg_event_handler_t event_handler) {
+ mg_mgr_init(mgr);
+
+ std::string port = std::to_string(GetPort());
+ mg_connection* c = mg_http_listen(mgr, GetBaseUrl().c_str(), event_handler, this);
+ return c;
+}
+
+void HttpsServer::acceptConnection(mg_connection* conn) {
+ // See https://mongoose.ws/tutorials/tls/
+ mg_tls_init(conn, &tlsOpts);
+}
+
+void HttpsServer::OnRequest(mg_connection* conn, mg_http_message* msg) {
+ std::string uri = std::string(msg->uri.ptr, msg->uri.len);
+ if (uri == "/hello.html") {
+ OnRequestHello(conn, msg);
+ } else {
+ OnRequestNotFound(conn, msg);
+ }
+}
+
+void HttpsServer::OnRequestNotFound(mg_connection* conn, mg_http_message* /*msg*/) {
+ mg_http_reply(conn, 404, nullptr, "Not Found");
+}
+
+void HttpsServer::OnRequestHello(mg_connection* conn, mg_http_message* /*msg*/) {
+ std::string response{"Hello world!"};
+ std::string headers{"Content-Type: text/html\r\n"};
+ mg_http_reply(conn, 200, headers.c_str(), response.c_str());
+}
+
+const std::string& HttpsServer::getBaseDirPath() const {
+ return baseDirPath;
+}
+
+const std::string& HttpsServer::getSslCertFileName() const {
+ return sslCertFileName;
+}
+
+const std::string& HttpsServer::getSslKeyFileName() const {
+ return sslKeyFileName;
+}
+
+} // namespace cpr