dovecot-2.2: lib-http: http-client: When client request is retri...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Oct 12 11:14:58 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/ad46c778981d
changeset: 16849:ad46c778981d
user: Stephan Bosch <stephan at rename-it.nl>
date: Sat Oct 12 10:54:10 2013 +0300
description:
lib-http: http-client: When client request is retried based on a response received from server, return full response to caller if retry is not possible.
Before, it would construct a dummy-response that basically retains only the
status and reason elements. This is currently only relevant for the way a
417 Expectation Failed response from the server is handled.
diffstat:
src/lib-http/http-client-connection.c | 2 +-
src/lib-http/http-client-private.h | 2 ++
src/lib-http/http-client-request.c | 10 ++++++++++
3 files changed, 13 insertions(+), 1 deletions(-)
diffs (44 lines):
diff -r aa39d877d2c5 -r ad46c778981d src/lib-http/http-client-connection.c
--- a/src/lib-http/http-client-connection.c Sat Oct 12 10:53:16 2013 +0300
+++ b/src/lib-http/http-client-connection.c Sat Oct 12 10:54:10 2013 +0300
@@ -593,7 +593,7 @@
req->payload_sync = FALSE;
conn->output_locked = FALSE;
conn->peer->no_payload_sync = TRUE;
- http_client_request_retry(req, response.status, response.reason);
+ http_client_request_retry_response(req, &response);
} else if (response.status / 100 == 3 && response.status != 304 &&
response.location != NULL) {
diff -r aa39d877d2c5 -r ad46c778981d src/lib-http/http-client-private.h
--- a/src/lib-http/http-client-private.h Sat Oct 12 10:53:16 2013 +0300
+++ b/src/lib-http/http-client-private.h Sat Oct 12 10:54:10 2013 +0300
@@ -240,6 +240,8 @@
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);
+void http_client_request_retry_response(struct http_client_request *req,
+ struct http_response *response);
void http_client_request_error(struct http_client_request *req,
unsigned int status, const char *error);
void http_client_request_redirect(struct http_client_request *req,
diff -r aa39d877d2c5 -r ad46c778981d src/lib-http/http-client-request.c
--- a/src/lib-http/http-client-request.c Sat Oct 12 10:53:16 2013 +0300
+++ b/src/lib-http/http-client-request.c Sat Oct 12 10:54:10 2013 +0300
@@ -773,6 +773,16 @@
http_client_request_error(req, status, error);
}
+void http_client_request_retry_response(struct http_client_request *req,
+ struct http_response *response)
+{
+ if (!http_client_request_try_retry(req)) {
+ i_assert(req->submitted || req->state >= HTTP_REQUEST_STATE_FINISHED);
+ (void)http_client_request_callback(req, response);
+ http_client_request_unref(&req);
+ }
+}
+
bool http_client_request_try_retry(struct http_client_request *req)
{
/* limit the number of attempts for each request */
More information about the dovecot-cvs
mailing list