コード例 #1
0
 void init_socket_address(const ConnectorOptions& options) {
     auto iface = net::NetworkInterface::for_name(options.get_network_interface_name());
     const auto& ip_address = iface.get_first_address(net::AddressFamily::IPv4);
     m_socket_address = net::SocketAddress(ip_address, options.get_port());
     m_option_array.emplace_back(MHD_OptionItem{
         MHD_OPTION_SOCK_ADDR, intptr_t(0),
         static_cast<void*>(const_cast<struct sockaddr*>(m_socket_address.addr()))
     });
     log_info("rest", "Starting connector listening on " << m_socket_address
                                                         << " (" << options.get_network_interface_name() << ")");
 }
コード例 #2
0
 void init_threading_mode(const ConnectorOptions& options){
     if (ConnectorOptions::ThreadMode::SELECT == options.get_thread_mode()) {
         m_flags |= MHD_USE_SELECT_INTERNALLY;
         const auto thread_pool_size = options.get_thread_pool_size();
         if (thread_pool_size > 0) {
             m_option_array.emplace_back(MHD_OptionItem{
                 MHD_OPTION_THREAD_POOL_SIZE,
                         static_cast<intptr_t>(thread_pool_size), nullptr
             });
         }
     } else if (ConnectorOptions::ThreadMode::THREAD_PER_CONNECTION
             == options.get_thread_mode()) {
         m_flags |= MHD_USE_THREAD_PER_CONNECTION;
     }
 }
コード例 #3
0
    void init_ssl_options(const ConnectorOptions& options) {
        if (options.use_ssl()) {
            m_flags |= MHD_USE_SSL;
#ifdef ENABLE_HTTPS
            auto* cert_manager = psme::rest::server::CertManager::get_instance();

            cert_manager->load_certs(options.get_port(),
                    options.is_client_cert_required(),
                    options.get_certs_dir());
            const auto port = options.get_port();

            m_option_array.emplace_back(MHD_OptionItem{
                MHD_OPTION_HTTPS_MEM_KEY, intptr_t(0),
                static_cast<void*> (const_cast<char*> (cert_manager->get_server_key(port)))
            });
            m_option_array.emplace_back(MHD_OptionItem{
                MHD_OPTION_HTTPS_MEM_CERT, intptr_t(0),
                static_cast<void*> (const_cast<char*> (cert_manager->get_server_cert(port)))
            });
            m_option_array.emplace_back(MHD_OptionItem{
                MHD_OPTION_HTTPS_PRIORITIES, intptr_t(0),
                static_cast<void*> (const_cast<char*> ("NORMAL:-VERS-SSL3.0"))
            });
            if (options.is_client_cert_required()) {
                m_option_array.emplace_back(MHD_OptionItem{
                    MHD_OPTION_HTTPS_MEM_TRUST, intptr_t(0),
                    static_cast<void*> (const_cast<char*> (cert_manager->get_ca_cert(port)))
                });
            }
#endif
        }
    }
コード例 #4
0
 void init_threading_mode(const ConnectorOptions& options) {
     switch (options.get_thread_mode()) {
         case ConnectorOptions::ThreadMode::THREAD_PER_CONNECTION:
             m_flags |= MHD_USE_THREAD_PER_CONNECTION;
             break;
         case ConnectorOptions::ThreadMode::SELECT: {
             m_flags |= MHD_USE_SELECT_INTERNALLY;
             auto thread_pool_size = options.get_thread_pool_size();
             if (0 == thread_pool_size) {
                 thread_pool_size = std::max(std::thread::hardware_concurrency(), 1u);
             }
             log_debug("rest", "connector on port " << options.get_port()
                                                    << " thread_pool_size: " << thread_pool_size);
             m_option_array.emplace_back(MHD_OptionItem{
                 MHD_OPTION_THREAD_POOL_SIZE,
                 static_cast<intptr_t>(thread_pool_size), nullptr
             });
         }
             break;
         default:
             break;
     }
 }
コード例 #5
0
 void init_debug_options(const ConnectorOptions& options){
     if (options.use_debug()) {
         m_flags |= MHD_USE_DEBUG;
     }
 }