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;
 				}
 			}