From: Timo Sirainen Date: Mon, 24 Jul 2023 21:27:44 +0000 (+0300) Subject: lib-http: Add http_client_settings.read/write/delete_max_attempts X-Git-Tag: 2.4.1~1435 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f6624e2fe852df7d137ae87c9935896d62c56441;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Add http_client_settings.read/write/delete_max_attempts If they are non-zero, they override the max_attempts setting for the specified HTTP methods. --- diff --git a/src/lib-http/http-client-request.c b/src/lib-http/http-client-request.c index cc8298f05f..83dc2de288 100644 --- a/src/lib-http/http-client-request.c +++ b/src/lib-http/http-client-request.c @@ -127,17 +127,23 @@ http_client_request_new(struct http_client *client, const char *method, req->attempt_timeout_msecs = client->set->request_timeout_msecs; if (strcasecmp(method, "GET") == 0 || strcasecmp(method, "HEAD") == 0) { + if (client->set->read_max_attempts != 0) + req->max_attempts = client->set->read_max_attempts; if (client->set->read_request_timeout_msecs != 0) { req->attempt_timeout_msecs = client->set->read_request_timeout_msecs; } } else if (strcasecmp(method, "PUT") == 0 || strcasecmp(method, "POST") == 0) { + if (client->set->write_max_attempts != 0) + req->max_attempts = client->set->write_max_attempts; if (client->set->write_request_timeout_msecs != 0) { req->attempt_timeout_msecs = client->set->write_request_timeout_msecs; } } else if (strcasecmp(method, "DELETE") == 0) { + if (client->set->delete_max_attempts != 0) + req->max_attempts = client->set->delete_max_attempts; if (client->set->delete_request_timeout_msecs != 0) { req->attempt_timeout_msecs = client->set->delete_request_timeout_msecs; diff --git a/src/lib-http/http-client.h b/src/lib-http/http-client.h index 4ecabd0daf..2ad67ed9cb 100644 --- a/src/lib-http/http-client.h +++ b/src/lib-http/http-client.h @@ -76,6 +76,12 @@ struct http_client_settings { /* Maximum number of attempts for a request */ unsigned int max_attempts; + /* If non-zero, override max_attempts for GET/HEAD requests. */ + unsigned int read_max_attempts; + /* If non-zero, override max_attempts for PUT/POST requests. */ + unsigned int write_max_attempts; + /* If non-zero, override max_attempts for DELETE requests. */ + unsigned int delete_max_attempts; /* Maximum number of connection attempts to a host before all associated requests fail.