http_server_connection_ssl_init(struct http_server_connection *conn)
{
struct http_server *server = conn->server;
+ struct ssl_iostream_context *ssl_ctx;
const char *error;
int ret;
- if (http_server_init_ssl_ctx(server, &error) < 0) {
- e_error(conn->event, "Couldn't initialize SSL: %s", error);
- return -1;
- }
-
e_debug(conn->event, "Starting SSL handshake");
http_server_connection_input_halt(conn);
- if (server->ssl_ctx == NULL) {
- ret = master_service_ssl_init(master_service,
- &conn->conn.input,
- &conn->conn.output,
- &conn->ssl_iostream, &error);
- } else {
- ret = io_stream_create_ssl_server(server->ssl_ctx,
+ if (server->set.ssl == NULL) {
+ ret = io_stream_autocreate_ssl_server(server->event,
+ &conn->conn.input,
+ &conn->conn.output,
+ &conn->ssl_iostream,
+ &error);
+ } else if (ssl_iostream_server_context_cache_get(server->set.ssl,
+ &ssl_ctx, &error) < 0)
+ ret = -1;
+ else {
+ ret = io_stream_create_ssl_server(ssl_ctx,
server->event,
&conn->conn.input,
&conn->conn.output,
&conn->ssl_iostream, &error);
+ ssl_iostream_context_unref(&ssl_ctx);
}
if (ret < 0) {
e_error(conn->event,
struct ioloop *ioloop;
struct event *event;
- struct ssl_iostream_context *ssl_ctx;
struct connection_list *conn_list;
bool http_server_resource_callback(struct http_server_request *req);
-/*
- * Server
- */
-
-int http_server_init_ssl_ctx(struct http_server *server, const char **error_r);
-
#endif
i_assert(array_count(&server->locations) == 0);
settings_free(server->set.ssl);
- if (server->ssl_ctx != NULL)
- ssl_iostream_context_unref(&server->ssl_ctx);
event_unref(&server->event);
pool_unref(&server->pool);
}
(void)http_server_connection_shut_down(conn);
}
}
-
-int http_server_init_ssl_ctx(struct http_server *server, const char **error_r)
-{
- if (server->set.ssl == NULL || server->ssl_ctx != NULL)
- return 0;
-
- return ssl_iostream_server_context_cache_get(server->set.ssl,
- &server->ssl_ctx, error_r);
-}
const char *rawlog_dir;
- /* SSL settings; if NULL, master_service_ssl_init() is used instead */
+ /* SSL settings; if NULL, settings_get() is used automatically */
const struct ssl_iostream_settings *ssl;
/* The maximum time in milliseconds a client is allowed to be idle