bool LibEventServer::enableSSL(void *sslCTX, int port) { #ifdef _EVENT_USE_OPENSSL m_server_ssl = evhttp_new_openssl_ctx(m_eventBase, sslCTX); if (m_server_ssl == nullptr) { Logger::Error("evhttp_new_openssl_ctx failed"); return false; } m_port_ssl = port; evhttp_set_connection_limit(m_server_ssl, RuntimeOption::ServerConnectionLimit); evhttp_set_gencb(m_server_ssl, on_request, this); return true; #else Logger::Error("A SSL enabled libevent is required"); return false; #endif }
bool LibEventServer::enableSSL(int port) { #ifdef _EVENT_USE_OPENSSL SSL_CTX *sslCTX = nullptr; struct ssl_config config; if (RuntimeOption::SSLCertificateFile != "" && RuntimeOption::SSLCertificateKeyFile != "") { config.cert_file = (char*)RuntimeOption::SSLCertificateFile.c_str(); config.pk_file = (char*)RuntimeOption::SSLCertificateKeyFile.c_str(); sslCTX = (SSL_CTX *)evhttp_init_openssl(&config); if (sslCTX && !RuntimeOption::SSLCertificateDir.empty()) { ServerNameIndication::load(RuntimeOption::SSLCertificateDir, LibEventServer::certHandler); // Register our per-request server name indication callback. // We register our callback even if there's no additional certs so that // a cert added in the future will get picked up without a restart. SSL_CTX_set_tlsext_servername_callback( sslCTX, ServerNameIndication::callback); } } else { Logger::Error("Invalid certificate file or key file"); } m_server_ssl = evhttp_new_openssl_ctx(m_eventBase, sslCTX); if (m_server_ssl == nullptr) { Logger::Error("evhttp_new_openssl_ctx failed"); return false; } m_port_ssl = port; evhttp_set_connection_limit(m_server_ssl, RuntimeOption::ServerConnectionLimit); evhttp_set_gencb(m_server_ssl, on_request, this); return true; #else Logger::Error("A SSL enabled libevent is required"); return false; #endif }