dovecot-2.2: lib-http: client: Added proper handling of 408 resp...

dovecot at dovecot.org dovecot at dovecot.org
Sat Aug 29 11:50:11 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/a8e01e385e90
changeset: 19033:a8e01e385e90
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Sat Aug 29 14:20:57 2015 +0300
description:
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.

diffstat:

 src/lib-http/http-client-connection.c |  18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diffs (35 lines):

diff -r 65b88128c7eb -r a8e01e385e90 src/lib-http/http-client-connection.c
--- 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;
 				}
 			}
 


More information about the dovecot-cvs mailing list