aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/cpr/test/httpsServer.hpp
blob: cea4d343852c42a48739ef972881f348bf4cdaf6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef CPR_TEST_HTTPS_SERVER_H
#define CPR_TEST_HTTPS_SERVER_H

#include <memory>
#include <string>

#include "abstractServer.hpp"
#include "cpr/cpr.h"
#include "mongoose.h"
#include <cpr/filesystem.h>

namespace cpr {
class HttpsServer : public AbstractServer {
  private:
    // We don't use fs::path here, as this leads to problems using windows
    const std::string baseDirPath;
    const std::string sslCertFileName;
    const std::string sslKeyFileName;
    struct mg_tls_opts tlsOpts;

  public:
    explicit HttpsServer(fs::path&& baseDirPath, fs::path&& sslCertFileName, fs::path&& sslKeyFileName);
    ~HttpsServer() override = default;

    std::string GetBaseUrl() override;
    uint16_t GetPort() override;

    void OnRequest(mg_connection* conn, mg_http_message* msg) override;
    static void OnRequestHello(mg_connection* conn, mg_http_message* msg);
    static void OnRequestNotFound(mg_connection* conn, mg_http_message* msg);

    const std::string& getBaseDirPath() const;
    const std::string& getSslCertFileName() const;
    const std::string& getSslKeyFileName() const;

  protected:
    mg_connection* initServer(mg_mgr* mgr, mg_event_handler_t event_handler) override;
    void acceptConnection(mg_connection* conn) override;
};
} // namespace cpr

#endif