]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: http-client: When client request is retried based on a response received...
authorStephan Bosch <stephan@rename-it.nl>
Sat, 12 Oct 2013 07:54:10 +0000 (10:54 +0300)
committerStephan Bosch <stephan@rename-it.nl>
Sat, 12 Oct 2013 07:54:10 +0000 (10:54 +0300)
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.

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

index 4e2ca693683e5ae325391060b3c5764999f678cf..072d25dd50f10d134ef8becab5431d29e9e52723 100644 (file)
@@ -593,7 +593,7 @@ static void http_client_connection_input(struct connection *_conn)
                                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) {
index 378efce670fea5cae881310ae48a383a9b7001ef..ddf554991f2c97e7d37b9bd546bd926fb01dda77 100644 (file)
@@ -240,6 +240,8 @@ bool http_client_request_callback(struct http_client_request *req,
 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,
index 448ff429b6bd4c67206ae79130608a8eb8cb00e4..86a6c3c3ae71bf8222cc17afaa19a8b6d5245532 100644 (file)
@@ -773,6 +773,16 @@ void http_client_request_retry(struct http_client_request *req,
                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 */