diff --git a/src/main.cpp b/src/main.cpp index 0efee4e..0cc2269 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -44,6 +44,10 @@ #include "randomx.h" #endif +#ifdef WITH_TLS +#include "tls.h" +#endif + #if defined(_WIN32) && defined(_MSC_VER) && !defined(NDEBUG) #include @@ -312,6 +316,13 @@ int main(int argc, char* argv[]) grpc_init(); #endif +#ifdef WITH_TLS + if (!p2pool::ServerTls::global_init()) { + printf("ServerTls::global_init failed\n"); + return 1; + } +#endif + try { p2pool::p2pool pool(argc, argv); result = pool.run(); diff --git a/src/tls.cpp b/src/tls.cpp index 999f154..bf05cae 100644 --- a/src/tls.cpp +++ b/src/tls.cpp @@ -49,7 +49,7 @@ static bssl::UniquePtr init_evp_pkey() return evp_pkey; } -static bssl::UniquePtr s_evp_pkey = init_evp_pkey(); +static bssl::UniquePtr s_evp_pkey; static bssl::UniquePtr init_cert() { @@ -115,7 +115,7 @@ static bssl::UniquePtr init_cert() return x509; } -static bssl::UniquePtr s_cert = init_cert(); +static bssl::UniquePtr s_cert; static bssl::UniquePtr init_ctx() { @@ -140,7 +140,15 @@ static bssl::UniquePtr init_ctx() return ctx; } -static bssl::UniquePtr s_ctx = init_ctx(); +static bssl::UniquePtr s_ctx; + +bool ServerTls::global_init() +{ + s_evp_pkey = init_evp_pkey(); + s_cert = init_cert(); + s_ctx = init_ctx(); + return s_evp_pkey && s_cert && s_ctx; +} bool ServerTls::load_from_files(const char* cert, const char* cert_key) { diff --git a/src/tls.h b/src/tls.h index ea3a0fc..699835e 100644 --- a/src/tls.h +++ b/src/tls.h @@ -37,6 +37,7 @@ class ServerTls public: FORCEINLINE ServerTls() { reset(); } + [[nodiscard]] static bool global_init(); [[nodiscard]] static bool load_from_files(const char* cert, const char* cert_key); void reset();