Line data Source code
1 : #include "pool_server.hpp"
2 : #include "../../util/logger.hpp"
3 : #include "../../asio/ssl/certificate_manager.hpp"
4 :
5 : namespace thinger::http {
6 :
7 54 : pool_server::pool_server()
8 108 : : worker_client("http_pool_server") {
9 54 : LOG_DEBUG("Created HTTP pool server");
10 54 : }
11 :
12 54 : pool_server::~pool_server() {
13 54 : LOG_DEBUG("Destroying HTTP pool server");
14 54 : if (is_running()) {
15 45 : stop();
16 : }
17 54 : }
18 :
19 12 : std::unique_ptr<asio::socket_server> pool_server::create_socket_server(
20 : const std::string& host, const std::string& port) {
21 :
22 : // Use legacy constructor that automatically uses workers
23 12 : auto server = std::make_unique<asio::socket_server>(host, port);
24 :
25 : // Configure SSL if enabled
26 12 : if (ssl_enabled_) {
27 0 : server->enable_ssl(true);
28 :
29 0 : auto& cert_mgr = asio::certificate_manager::instance();
30 0 : auto default_ctx = cert_mgr.get_default_certificate();
31 :
32 0 : if (!default_ctx) {
33 0 : LOG_ERROR("No default SSL certificate configured");
34 0 : return nullptr;
35 : }
36 :
37 0 : server->set_ssl_context(default_ctx);
38 0 : server->set_sni_callback(asio::certificate_manager::sni_callback);
39 0 : }
40 :
41 12 : return server;
42 12 : }
43 :
44 0 : std::unique_ptr<asio::unix_socket_server> pool_server::create_unix_socket_server(
45 : const std::string& unix_path) {
46 :
47 : // Use legacy constructor that automatically uses workers
48 0 : auto server = std::make_unique<asio::unix_socket_server>(unix_path);
49 :
50 0 : return server;
51 : }
52 :
53 60 : bool pool_server::stop() {
54 : // Stop the socket server
55 60 : bool result = http_server_base::stop();
56 :
57 : // Call base class implementation to handle notifications
58 60 : worker_client::stop();
59 :
60 60 : return result;
61 : }
62 :
63 0 : void pool_server::wait() {
64 : // Use worker_client's wait implementation
65 0 : worker_client::wait();
66 0 : }
67 :
68 : } // namespace thinger::http
|