Mercurial > dovecot > core-2.2
changeset 19033:a8e01e385e90
lib-http: client: Added proper handling of 408 response status.
This is treated as a special server connection close event, rather than a
response to the last issued request.
author | Stephan Bosch <stephan@rename-it.nl> |
---|---|
date | Sat, 29 Aug 2015 14:20:57 +0300 |
parents | 65b88128c7eb |
children | f7c1c1dac689 |
files | src/lib-http/http-client-connection.c |
diffstat | 1 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-http/http-client-connection.c Fri Aug 28 15:44:34 2015 +0200 +++ b/src/lib-http/http-client-connection.c Sat Aug 29 14:20:57 2015 +0300 @@ -657,7 +657,15 @@ if (req == NULL) { /* server sent response without any requests in the wait list */ - http_client_connection_debug(conn, "Got unexpected input from server"); + if (response.status == 408) { + http_client_connection_debug(conn, + "Server explicitly closed connection: 408 %s", + response.reason); + } else { + http_client_connection_debug(conn, + "Got unexpected input from server: %u %s", + response.status, response.reason); + } http_client_connection_close(&conn); return; } @@ -780,6 +788,14 @@ http_client_request_delay_from_response(req, &response) > 0 && http_client_request_try_retry(req)) handled = TRUE; + /* request timeout (by server) */ + } else if (response.status == 408) { + /* automatically retry */ + if (http_client_request_try_retry(req)) + handled = TRUE; + /* connection close is implicit, although server should indicate + that explicitly */ + conn->close_indicated = TRUE; } }