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