From: Markus Valentin Date: Tue, 5 Dec 2023 13:50:54 +0000 (+0100) Subject: lib-http: Make http-server settings a pointer X-Git-Tag: 2.4.1~1059 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b226041a26b0f1154df44a854c2c9e1991cf7d9d;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Make http-server settings a pointer This is needed in order to support the new settings structure where setting structs are retrieved and used as references. This makes it unnecessary to have a copy of the settings struct as part of http_server. --- diff --git a/src/lib-http/http-server-connection.c b/src/lib-http/http-server-connection.c index f1e41c14a7..34e14372e6 100644 --- a/src/lib-http/http-server-connection.c +++ b/src/lib-http/http-server-connection.c @@ -987,8 +987,8 @@ http_server_connection_create(struct http_server *server, conn = i_new(struct http_server_connection, 1); conn->refcount = 1; conn->server = server; - conn->set = &server->set; - pool_ref(server->set.pool); + conn->set = server->set; + pool_ref(server->set->pool); conn->ioloop = current_ioloop; conn->ssl = ssl; conn->callbacks = callbacks; diff --git a/src/lib-http/http-server-private.h b/src/lib-http/http-server-private.h index 4d6a70ce68..a8e4927daa 100644 --- a/src/lib-http/http-server-private.h +++ b/src/lib-http/http-server-private.h @@ -126,7 +126,7 @@ struct http_server_request { struct http_server_connection { struct connection conn; struct http_server *server; - struct http_server_settings *set; + const struct http_server_settings *set; struct ioloop *ioloop, *ioloop_switching; struct event *event; unsigned int refcount; @@ -182,7 +182,7 @@ struct http_server_resource { struct http_server { pool_t pool; - struct http_server_settings set; + struct http_server_settings *set; struct ioloop *ioloop; struct event *event; diff --git a/src/lib-http/http-server-request.c b/src/lib-http/http-server-request.c index c98d465273..8c974a9541 100644 --- a/src/lib-http/http-server-request.c +++ b/src/lib-http/http-server-request.c @@ -338,7 +338,7 @@ void http_server_request_received(struct http_server_request *req) "(%u requests pending; %u maximum)", http_server_request_label(req), req->conn->request_queue_count, - req->conn->server->set.max_pipelined_requests); + req->conn->server->set->max_pipelined_requests); } void http_server_request_callback(struct http_server_request *req) diff --git a/src/lib-http/http-server.c b/src/lib-http/http-server.c index 1e61cdf062..e1aa30a6d9 100644 --- a/src/lib-http/http-server.c +++ b/src/lib-http/http-server.c @@ -35,28 +35,29 @@ struct http_server *http_server_init(const struct http_server_settings *set, pool_size = (set->ssl != NULL) ? 10240 : 1024; /* ca/cert/key will be >8K */ pool = pool_alloconly_create("http server", pool_size); server = p_new(pool, struct http_server, 1); + server->set = p_new(pool, struct http_server_settings, 1); server->pool = pool; - if (server->set.pool == NULL) - server->set.pool = null_pool; + if (server->set->pool == NULL) + server->set->pool = null_pool; if (set->default_host != NULL && *set->default_host != '\0') - server->set.default_host = p_strdup(pool, set->default_host); + server->set->default_host = p_strdup(pool, set->default_host); if (set->rawlog_dir != NULL && *set->rawlog_dir != '\0') - server->set.rawlog_dir = p_strdup(pool, set->rawlog_dir); + server->set->rawlog_dir = p_strdup(pool, set->rawlog_dir); if (set->ssl != NULL) { - server->set.ssl = set->ssl; - pool_ref(server->set.ssl->pool); + server->set->ssl = set->ssl; + pool_ref(server->set->ssl->pool); } - server->set.max_client_idle_time_msecs = set->max_client_idle_time_msecs; - server->set.max_pipelined_requests = + server->set->max_client_idle_time_msecs = set->max_client_idle_time_msecs; + server->set->max_pipelined_requests = (set->max_pipelined_requests > 0 ? set->max_pipelined_requests : 1); - server->set.request_max_target_length = set->request_max_target_length; - server->set.request_max_payload_size = set->request_max_payload_size; - server->set.request_hdr_max_size = set->request_hdr_max_size; - server->set.request_hdr_max_field_size = set->request_hdr_max_field_size; - server->set.request_hdr_max_fields = set->request_hdr_max_fields; - server->set.socket_send_buffer_size = set->socket_send_buffer_size; - server->set.socket_recv_buffer_size = set->socket_recv_buffer_size; + server->set->request_max_target_length = set->request_max_target_length; + server->set->request_max_payload_size = set->request_max_payload_size; + server->set->request_hdr_max_size = set->request_hdr_max_size; + server->set->request_hdr_max_field_size = set->request_hdr_max_field_size; + server->set->request_hdr_max_fields = set->request_hdr_max_fields; + server->set->socket_send_buffer_size = set->socket_send_buffer_size; + server->set->socket_recv_buffer_size = set->socket_recv_buffer_size; server->event = event_create(event_parent); event_add_category(server->event, &event_category_http_server); @@ -83,7 +84,7 @@ void http_server_deinit(struct http_server **_server) http_server_resource_free(&res); i_assert(array_count(&server->locations) == 0); - settings_free(server->set.ssl); + settings_free(server->set->ssl); event_unref(&server->event); pool_unref(&server->pool); }