http_client_connection_retry_requests(struct http_client_connection *conn,
unsigned int status, const char *error)
{
+ const struct http_client_settings *set = &conn->client->set;
struct http_client_request *req, **req_idx;
if (!array_is_created(&conn->request_wait_list))
return;
- http_client_connection_debug(conn,
- "Retrying pending requests");
+ if (set->no_auto_retry) {
+ http_client_connection_debug(conn,
+ "Aborting pending requests with error");
+ } else {
+ http_client_connection_debug(conn,
+ "Retrying pending requests");
+ }
array_foreach_modifiable(&conn->request_wait_list, req_idx) {
req = *req_idx;
if (!http_client_request_unref(req_idx))
continue;
/* retry the request, which may drop it */
- if (req->state < HTTP_REQUEST_STATE_FINISHED)
- http_client_request_retry(req, status, error);
+ if (req->state < HTTP_REQUEST_STATE_FINISHED) {
+ if (set->no_auto_retry)
+ http_client_request_error(&req, status, error);
+ else
+ http_client_request_retry(req, status, error);
+ }
}
array_clear(&conn->request_wait_list);
}
HTTP_CLIENT_DEFAULT_BACKOFF_MAX_TIME_MSECS :
set->connect_backoff_max_time_msecs;
client->set.no_auto_redirect = set->no_auto_redirect;
+ client->set.no_auto_retry = set->no_auto_retry;
client->set.no_ssl_tunnel = set->no_ssl_tunnel;
client->set.max_redirects = set->max_redirects;
client->set.response_hdr_limits = set->response_hdr_limits;
/* don't automatically act upon redirect responses */
bool no_auto_redirect;
+ /* never automatically retry requests */
+ bool no_auto_retry;
+
/* if we use a proxy, delegate SSL negotiation to proxy, rather than
creating a CONNECT tunnel through the proxy for the SSL link */
bool no_ssl_tunnel;