]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: Change http_client.set to be a pointer
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 27 Jun 2023 20:36:24 +0000 (23:36 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:09 +0000 (12:34 +0200)
Simplifies the following commits.

src/lib-http/http-client-connection.c
src/lib-http/http-client-peer.c
src/lib-http/http-client-private.h
src/lib-http/http-client-queue.c
src/lib-http/http-client-request.c
src/lib-http/http-client.c

index c0c753ac6cae720d95a6a976d526bcc3f63c2a90..795f2a9e32c6f69e2236d51e3f466eb032dbb93a 100644 (file)
@@ -31,7 +31,7 @@ static inline const struct http_client_settings *
 http_client_connection_get_settings(struct http_client_connection *conn)
 {
        i_assert(conn->peer != NULL);
-       return &conn->peer->client->set;
+       return conn->peer->client->set;
 }
 
 static inline void
@@ -1207,7 +1207,7 @@ static void http_client_connection_input(struct connection *_conn)
                                        if (http_client_request_try_retry(req))
                                                handled = TRUE;
                                /* Redirection */
-                               } else if (!req->client->set.no_auto_redirect &&
+                               } else if (!req->client->set->no_auto_redirect &&
                                           response.status / 100 == 3 &&
                                           response.status != 304 &&
                                           response.location != NULL) {
@@ -1707,7 +1707,7 @@ http_client_connection_create(struct http_client_peer *peer)
        struct http_client_peer_pool *ppool = peer->ppool;
        struct http_client_context *cctx = pshared->cctx;
        struct http_client *client = peer->client;
-       const struct http_client_settings *set = &client->set;
+       const struct http_client_settings *set = client->set;
        struct http_client_connection *conn;
        const struct http_client_peer_addr *addr = &pshared->addr;
        const char *conn_type;
index 12e73a16ea2e9f720815167f3a64d0501a44b3c8..b8dd824eeab2393dd39d460761af31b32f3df949 100644 (file)
@@ -193,7 +193,7 @@ http_client_peer_pool_get(struct http_client_peer_shared *pshared,
 {
        struct http_client_peer_pool *ppool;
        struct ssl_iostream_context *ssl_ctx = client->ssl_ctx;
-       const char *rawlog_dir = client->set.rawlog_dir;
+       const char *rawlog_dir = client->set->rawlog_dir;
 
        i_assert(!http_client_peer_addr_is_https(&pshared->addr) ||
                 ssl_ctx != NULL);
@@ -549,7 +549,7 @@ http_client_peer_shared_max_connections(struct http_client_peer_shared *pshared)
 
        peer = pshared->peers_list;
        while (peer != NULL) {
-               const struct http_client_settings *set = &peer->client->set;
+               const struct http_client_settings *set = peer->client->set;
                unsigned int client_max_conns = set->max_parallel_connections;
 
                if ((UINT_MAX - max_conns) <= client_max_conns)
@@ -597,16 +597,16 @@ http_client_peer_create(struct http_client *client,
 
        /* Choose backoff times */
        if (pshared->peers_list == NULL ||
-           (client->set.connect_backoff_time_msecs <
+           (client->set->connect_backoff_time_msecs <
             pshared->backoff_initial_time_msecs)) {
                pshared->backoff_initial_time_msecs =
-                       client->set.connect_backoff_time_msecs;
+                       client->set->connect_backoff_time_msecs;
        }
        if (pshared->peers_list == NULL ||
-           (client->set.connect_backoff_max_time_msecs >
+           (client->set->connect_backoff_max_time_msecs >
             pshared->backoff_max_time_msecs)) {
                pshared->backoff_max_time_msecs =
-                       client->set.connect_backoff_max_time_msecs;
+                       client->set->connect_backoff_max_time_msecs;
        }
 
        e_debug(peer->event, "Peer created");
@@ -688,15 +688,15 @@ bool http_client_peer_unref(struct http_client_peer **_peer)
        while (peer != NULL) {
                struct http_client *client = peer->client;
 
-               if (client->set.connect_backoff_time_msecs <
+               if (client->set->connect_backoff_time_msecs <
                    pshared->backoff_initial_time_msecs) {
                        pshared->backoff_initial_time_msecs =
-                               client->set.connect_backoff_time_msecs;
+                               client->set->connect_backoff_time_msecs;
                }
-               if (client->set.connect_backoff_max_time_msecs >
+               if (client->set->connect_backoff_max_time_msecs >
                    pshared->backoff_max_time_msecs) {
                        pshared->backoff_max_time_msecs =
-                               client->set.connect_backoff_max_time_msecs;
+                               client->set->connect_backoff_max_time_msecs;
                }
                peer = peer->shared_next;
        }
@@ -1062,7 +1062,7 @@ http_client_peer_handle_requests_real(struct http_client_peer *peer)
                new_connections = 0;
        } else {
                if ((working_conn_count - connecting + num_urgent) >=
-                   peer->client->set.max_parallel_connections) {
+                   peer->client->set->max_parallel_connections) {
                        /* Only create connections for urgent requests */
                        new_connections = (num_urgent > connecting ?
                                           num_urgent - connecting : 0);
@@ -1080,11 +1080,11 @@ http_client_peer_handle_requests_real(struct http_client_peer *peer)
                                new_connections = (connecting == 0 ? 1 : 0);
                        }
                } else if ((num_pending - connecting) >
-                          (peer->client->set.max_parallel_connections -
+                          (peer->client->set->max_parallel_connections -
                            working_conn_count)) {
                        /* Create maximum allowed connections */
                        new_connections =
-                               (peer->client->set.max_parallel_connections -
+                               (peer->client->set->max_parallel_connections -
                                 working_conn_count);
                } else {
                        /* Create as many connections as we need */
@@ -1106,7 +1106,7 @@ http_client_peer_handle_requests_real(struct http_client_peer *peer)
        /* Cannot create new connections for normal request; attempt pipelining
         */
        if ((working_conn_count - connecting) >=
-           peer->client->set.max_parallel_connections) {
+           peer->client->set->max_parallel_connections) {
                unsigned int pipeline_level = 0, total_handled = 0, handled;
 
                if (!pshared->allows_pipelining) {
index 83cea544b3b42c3e4cad2388c4cde7d6c33557c4..15c1de2809c849b76b50dd1aec8899d8971e10b8 100644 (file)
@@ -369,7 +369,7 @@ struct http_client_host {
 struct http_client {
        pool_t pool;
        struct http_client_context *cctx;
-       struct http_client_settings set;
+       struct http_client_settings *set;
 
        struct http_client *prev, *next;
 
index 0bd1694e153cf032a7b34bd1d955ee3fc46c6b70..ca6946187c9f2693eac6b2bc47921c42f832524b 100644 (file)
@@ -204,8 +204,7 @@ http_client_queue_fail(struct http_client_queue *queue,
 static bool
 http_client_queue_is_last_connect_ip(struct http_client_queue *queue)
 {
-       const struct http_client_settings *set =
-               &queue->client->set;
+       const struct http_client_settings *set = queue->client->set;
        struct http_client_host *host = queue->host;
        unsigned int ips_count = http_client_host_get_ips_count(host);
 
@@ -415,7 +414,7 @@ http_client_queue_connection_attempt(struct http_client_queue *queue)
                /* Start soft connect time-out
                   (but only if we have another IP left) */
                if (queue->addr.type != HTTP_CLIENT_PEER_ADDR_UNIX) {
-                       msecs = client->set.soft_connect_timeout_msecs;
+                       msecs = client->set->soft_connect_timeout_msecs;
                        if (!http_client_queue_is_last_connect_ip(queue) &&
                            msecs > 0 && queue->to_connect == NULL) {
                                queue->to_connect = timeout_add_to(
@@ -507,8 +506,7 @@ void http_client_queue_connection_failure(struct http_client_queue *queue,
                                          struct http_client_peer *peer,
                                          const char *reason)
 {
-       const struct http_client_settings *set =
-               &queue->client->set;
+       const struct http_client_settings *set = queue->client->set;
        const struct http_client_peer_addr *addr = &peer->shared->addr;
        const char *https_name = http_client_peer_addr_get_https_name(addr);
        struct http_client_host *host = queue->host;
index a6ed543293b9692700b97f3152be90c087d24f0d..7adc098661b9dcfc3b0e4da296dd420fc7e032e4 100644 (file)
@@ -123,8 +123,8 @@ http_client_request_new(struct http_client *client, const char *method,
                                     EVENT_REASON_CODE);
 
        /* Default to client-wide settings: */
-       req->max_attempts = client->set.max_attempts;
-       req->attempt_timeout_msecs = client->set.request_timeout_msecs;
+       req->max_attempts = client->set->max_attempts;
+       req->attempt_timeout_msecs = client->set->request_timeout_msecs;
 
        req->state = HTTP_REQUEST_STATE_NEW;
        return req;
@@ -724,9 +724,9 @@ int http_client_request_delay_from_response(
                return 0;  /* no delay */
        if (retry_after < ioloop_time)
                return 0;  /* delay already expired */
-       max = (req->client->set.max_auto_retry_delay_secs == 0 ?
+       max = (req->client->set->max_auto_retry_delay_secs == 0 ?
               req->attempt_timeout_msecs / 1000 :
-              req->client->set.max_auto_retry_delay_secs);
+              req->client->set->max_auto_retry_delay_secs);
        if ((unsigned int)(retry_after - ioloop_time) > max)
                return -1; /* delay too long */
        req->release_time.tv_sec = retry_after;
@@ -900,8 +900,8 @@ static void http_client_request_do_submit(struct http_client_request *req)
 {
        struct http_client *client = req->client;
        struct http_client_host *host;
-       const char *proxy_socket_path = client->set.proxy_socket_path;
-       const struct http_url *proxy_url = client->set.proxy_url;
+       const char *proxy_socket_path = client->set->proxy_socket_path;
+       const struct http_url *proxy_url = client->set->proxy_url;
        bool have_proxy =
                ((proxy_socket_path != NULL) || (proxy_url != NULL) ||
                 (req->host_socket != NULL) || (req->host_url != NULL));
@@ -931,7 +931,7 @@ static void http_client_request_do_submit(struct http_client_request *req)
                        /* Specific normal proxy */
                        req->host_socket = NULL;
                } else if (req->origin_url.have_ssl &&
-                          !client->set.no_ssl_tunnel &&
+                          !client->set->no_ssl_tunnel &&
                           !req->connect_tunnel) {
                        /* Tunnel to origin server */
                        req->host_url = &req->origin_url;
@@ -978,10 +978,10 @@ static void http_client_request_do_submit(struct http_client_request *req)
                        req->timeout_time = ioloop_timeval;
                        timeval_add_msecs(&req->timeout_time,
                                          req->timeout_msecs);
-               } else if (client->set.request_absolute_timeout_msecs > 0) {
+               } else if (client->set->request_absolute_timeout_msecs > 0) {
                        req->timeout_time = ioloop_timeval;
                        timeval_add_msecs(&req->timeout_time,
-                               client->set.request_absolute_timeout_msecs);
+                               client->set->request_absolute_timeout_msecs);
                }
        }
 
@@ -1365,7 +1365,7 @@ int http_client_request_send_more(struct http_client_request *req,
 static int
 http_client_request_send_real(struct http_client_request *req, bool pipelined)
 {
-       const struct http_client_settings *set = &req->client->set;
+       const struct http_client_settings *set = req->client->set;
        struct http_client_connection *conn = req->conn;
        string_t *rtext = t_str_new(256);
        struct const_iovec iov[3];
@@ -1414,9 +1414,9 @@ http_client_request_send_real(struct http_client_request *req, bool pipelined)
                http_auth_create_credentials(rtext, &auth_creds);
                str_append(rtext, "\r\n");
        }
-       if (!req->have_hdr_user_agent && req->client->set.user_agent != NULL) {
+       if (!req->have_hdr_user_agent && req->client->set->user_agent != NULL) {
                str_printfa(rtext, "User-Agent: %s\r\n",
-                           req->client->set.user_agent);
+                           req->client->set->user_agent);
        }
        if (!req->have_hdr_expect && req->payload_sync) {
                str_append(rtext, "Expect: 100-continue\r\n");
@@ -1778,15 +1778,15 @@ void http_client_request_redirect(struct http_client_request *req,
                return;
        }
 
-       i_assert(req->redirects <= req->client->set.max_redirects);
-       if (++req->redirects > req->client->set.max_redirects) {
-               if (req->client->set.max_redirects > 0) {
+       i_assert(req->redirects <= req->client->set->max_redirects);
+       if (++req->redirects > req->client->set->max_redirects) {
+               if (req->client->set->max_redirects > 0) {
                        http_client_request_error(
                                &req,
                                HTTP_CLIENT_REQUEST_ERROR_INVALID_REDIRECT,
                                t_strdup_printf(
                                        "Redirected more than %d times",
-                                       req->client->set.max_redirects));
+                                       req->client->set->max_redirects));
                } else {
                        http_client_request_error(
                                &req,
@@ -1868,7 +1868,7 @@ void http_client_request_resubmit(struct http_client_request *req)
 void http_client_request_retry(struct http_client_request *req,
                               unsigned int status, const char *error)
 {
-       if (req->client == NULL || req->client->set.no_auto_retry ||
+       if (req->client == NULL || req->client->set->no_auto_retry ||
            !http_client_request_try_retry(req))
                http_client_request_error(&req, status, error);
 }
index f6f9d72fec9c00b7f80891a0c7e087a4734c1709..c05c109dc50e0627c8ea6840706bf992997f846f 100644 (file)
@@ -141,78 +141,79 @@ http_client_init_shared(struct http_client_context *cctx,
        event_add_category(client->event, &event_category_http_client);
        event_set_append_log_prefix(client->event, log_prefix);
 
-       client->set.dns_client_socket_path =
+       client->set = p_new(pool, struct http_client_settings, 1);
+       client->set->dns_client_socket_path =
                p_strdup_empty(pool, set->dns_client_socket_path);
-       client->set.dns_ttl_msecs = set->dns_ttl_msecs;
+       client->set->dns_ttl_msecs = set->dns_ttl_msecs;
 
        if (set->user_agent != NULL && *set->user_agent != '\0')
-               client->set.user_agent = p_strdup_empty(pool, set->user_agent);
+               client->set->user_agent = p_strdup_empty(pool, set->user_agent);
        if (set->rawlog_dir != NULL && *set->rawlog_dir != '\0')
-               client->set.rawlog_dir = p_strdup_empty(pool, set->rawlog_dir);
+               client->set->rawlog_dir = p_strdup_empty(pool, set->rawlog_dir);
 
        if (set->proxy_socket_path != NULL && *set->proxy_socket_path != '\0') {
-               client->set.proxy_socket_path = p_strdup(pool, set->proxy_socket_path);
-               client->set.proxy_url = NULL;
+               client->set->proxy_socket_path = p_strdup(pool, set->proxy_socket_path);
+               client->set->proxy_url = NULL;
        } else if (set->proxy_url != NULL) {
-               client->set.proxy_url = http_url_clone(pool, set->proxy_url);
-               client->set.proxy_socket_path = NULL;
+               client->set->proxy_url = http_url_clone(pool, set->proxy_url);
+               client->set->proxy_socket_path = NULL;
        }
        if (set->proxy_username != NULL && *set->proxy_username != '\0') {
-               client->set.proxy_username = p_strdup_empty(pool, set->proxy_username);
-               client->set.proxy_password = p_strdup(pool, set->proxy_password);
+               client->set->proxy_username = p_strdup_empty(pool, set->proxy_username);
+               client->set->proxy_password = p_strdup(pool, set->proxy_password);
        } else if (set->proxy_url != NULL && set->proxy_url->user != NULL &&
                   *set->proxy_url->user != '\0') {
-               client->set.proxy_username =
+               client->set->proxy_username =
                        p_strdup_empty(pool, set->proxy_url->user);
-               client->set.proxy_password =
+               client->set->proxy_password =
                        p_strdup(pool, set->proxy_url->password);
        }
 
        if (set->max_idle_time_msecs > 0)
-               client->set.max_idle_time_msecs = set->max_idle_time_msecs;
-       client->set.max_pipelined_requests =
+               client->set->max_idle_time_msecs = set->max_idle_time_msecs;
+       client->set->max_pipelined_requests =
                (set->max_pipelined_requests > 0 ?
                 set->max_pipelined_requests : 1);
-       client->set.max_parallel_connections =
+       client->set->max_parallel_connections =
                (set->max_parallel_connections > 0 ?
                 set->max_parallel_connections : 1);
        if (set->max_attempts > 0)
-               client->set.max_attempts = set->max_attempts;
+               client->set->max_attempts = set->max_attempts;
        if (set->max_connect_attempts > 0)
-               client->set.max_connect_attempts = set->max_connect_attempts;
-       client->set.connect_backoff_time_msecs =
+               client->set->max_connect_attempts = set->max_connect_attempts;
+       client->set->connect_backoff_time_msecs =
                set->connect_backoff_time_msecs > 0 ?
                set->connect_backoff_time_msecs :
                HTTP_CLIENT_DEFAULT_BACKOFF_TIME_MSECS;
-       client->set.connect_backoff_max_time_msecs =
+       client->set->connect_backoff_max_time_msecs =
                set->connect_backoff_max_time_msecs > 0 ?
                set->connect_backoff_max_time_msecs :
                HTTP_CLIENT_DEFAULT_BACKOFF_MAX_TIME_MSECS;
-       client->set.no_auto_redirect =
-               client->set.no_auto_redirect || set->no_auto_redirect;
-       client->set.no_auto_retry =
-               client->set.no_auto_retry || set->no_auto_retry;
-       client->set.no_ssl_tunnel =
-               client->set.no_ssl_tunnel || set->no_ssl_tunnel;
+       client->set->no_auto_redirect =
+               client->set->no_auto_redirect || set->no_auto_redirect;
+       client->set->no_auto_retry =
+               client->set->no_auto_retry || set->no_auto_retry;
+       client->set->no_ssl_tunnel =
+               client->set->no_ssl_tunnel || set->no_ssl_tunnel;
        if (set->max_redirects > 0)
-               client->set.max_redirects = set->max_redirects;
+               client->set->max_redirects = set->max_redirects;
        if (set->request_absolute_timeout_msecs > 0) {
-               client->set.request_absolute_timeout_msecs =
+               client->set->request_absolute_timeout_msecs =
                        set->request_absolute_timeout_msecs;
        }
-       client->set.request_timeout_msecs = set->request_timeout_msecs > 0 ?
+       client->set->request_timeout_msecs = set->request_timeout_msecs > 0 ?
                set->request_timeout_msecs :
                HTTP_CLIENT_DEFAULT_REQUEST_TIMEOUT_MSECS;
        if (set->connect_timeout_msecs > 0)
-               client->set.connect_timeout_msecs = set->connect_timeout_msecs;
+               client->set->connect_timeout_msecs = set->connect_timeout_msecs;
        if (set->soft_connect_timeout_msecs > 0)
-               client->set.soft_connect_timeout_msecs = set->soft_connect_timeout_msecs;
+               client->set->soft_connect_timeout_msecs = set->soft_connect_timeout_msecs;
        if (set->socket_send_buffer_size > 0)
-               client->set.socket_send_buffer_size = set->socket_send_buffer_size;
+               client->set->socket_send_buffer_size = set->socket_send_buffer_size;
        if (set->socket_recv_buffer_size > 0)
-               client->set.socket_recv_buffer_size = set->socket_recv_buffer_size;
+               client->set->socket_recv_buffer_size = set->socket_recv_buffer_size;
        if (set->max_auto_retry_delay_secs > 0)
-               client->set.max_auto_retry_delay_secs = set->max_auto_retry_delay_secs;
+               client->set->max_auto_retry_delay_secs = set->max_auto_retry_delay_secs;
 
        i_array_init(&client->delayed_failing_requests, 1);
 
@@ -532,17 +533,17 @@ http_client_context_update_settings(struct http_client_context *cctx)
        for (client = cctx->clients_list; client != NULL;
             client = client->next) {
                unsigned int dns_lookup_timeout_msecs =
-                       http_client_get_dns_lookup_timeout_msecs(&client->set);
+                       http_client_get_dns_lookup_timeout_msecs(client->set);
 
                if (cctx->dns_client == NULL)
                        cctx->dns_client = client->dns_client;
                if (cctx->dns_client_socket_path == NULL) {
                        cctx->dns_client_socket_path =
-                               client->set.dns_client_socket_path;
+                               client->set->dns_client_socket_path;
                }
-               if (client->set.dns_ttl_msecs != 0 &&
-                   cctx->dns_ttl_msecs > client->set.dns_ttl_msecs)
-                       cctx->dns_ttl_msecs = client->set.dns_ttl_msecs;
+               if (client->set->dns_ttl_msecs != 0 &&
+                   cctx->dns_ttl_msecs > client->set->dns_ttl_msecs)
+                       cctx->dns_ttl_msecs = client->set->dns_ttl_msecs;
                if (dns_lookup_timeout_msecs != 0 &&
                    cctx->dns_lookup_timeout_msecs > dns_lookup_timeout_msecs) {
                        cctx->dns_lookup_timeout_msecs =