dovecot-2.2: lib-http: client: Fixed proxied client connect time...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Oct 23 02:56:51 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/43728039836c
changeset: 17987:43728039836c
user: Stephan Bosch <stephan at rename-it.nl>
date: Thu Oct 23 05:55:51 2014 +0300
description:
lib-http: client: Fixed proxied client connect timeout.
Timeout didn't cause requests to be aborted with error.
diffstat:
src/lib-http/http-client-connection.c | 22 +++++++++++++++++++---
src/lib-http/http-client-private.h | 1 +
2 files changed, 20 insertions(+), 3 deletions(-)
diffs (78 lines):
diff -r 44fd142fac1e -r 43728039836c src/lib-http/http-client-connection.c
--- a/src/lib-http/http-client-connection.c Thu Oct 23 05:55:51 2014 +0300
+++ b/src/lib-http/http-client-connection.c Thu Oct 23 05:55:51 2014 +0300
@@ -1063,6 +1063,18 @@
static void
http_client_connect_tunnel_timeout(struct http_client_connection *conn)
{
+ const char *error, *name = http_client_peer_addr2str(&conn->peer->addr);
+ unsigned int msecs;
+
+ msecs = timeval_diff_msecs(&ioloop_timeval,
+ &conn->connect_start_timestamp);
+ error = t_strdup_printf(
+ "Tunnel connect(%s) failed: "
+ "Connection timed out in %u.%03u secs",
+ name, msecs/1000, msecs%1000);
+
+ http_client_connection_debug(conn, "%s", error);
+ http_client_peer_connection_failure(conn->peer, error);
http_client_connection_close(&conn);
}
@@ -1111,7 +1123,7 @@
if (response->status != 200) {
http_client_peer_connection_failure(conn->peer, t_strdup_printf(
- "tunnel connect(%s) failed: %d %s", name,
+ "Tunnel connect(%s) failed: %d %s", name,
response->status, response->reason));
conn->connect_request = NULL;
return;
@@ -1122,6 +1134,7 @@
_connection_init_from_streams
(conn->client->conn_list, &conn->conn, name, tunnel.input, tunnel.output);
+ conn->connect_initialized = TRUE;
}
static void
@@ -1184,6 +1197,7 @@
} else {
connection_init_client_ip
(peer->client->conn_list, &conn->conn, &addr->ip, addr->port);
+ conn->connect_initialized = TRUE;
http_client_connection_connect(conn);
}
@@ -1217,7 +1231,8 @@
conn->incoming_payload = NULL;
}
- connection_disconnect(&conn->conn);
+ if (conn->connect_initialized)
+ connection_disconnect(&conn->conn);
if (conn->io_req_payload != NULL)
io_remove(&conn->io_req_payload);
@@ -1269,7 +1284,8 @@
if (conn->ssl_iostream != NULL)
ssl_iostream_unref(&conn->ssl_iostream);
- connection_deinit(&conn->conn);
+ if (conn->connect_initialized)
+ connection_deinit(&conn->conn);
/* remove this connection from the list */
conn_arr = &conn->peer->conns;
diff -r 44fd142fac1e -r 43728039836c src/lib-http/http-client-private.h
--- a/src/lib-http/http-client-private.h Thu Oct 23 05:55:51 2014 +0300
+++ b/src/lib-http/http-client-private.h Thu Oct 23 05:55:51 2014 +0300
@@ -142,6 +142,7 @@
unsigned int connected:1; /* connection is connected */
unsigned int tunneling:1; /* last sent request turns this
connection into tunnel */
+ unsigned int connect_initialized:1; /* connection was initialized */
unsigned int connect_succeeded:1;
unsigned int closing:1;
unsigned int close_indicated:1;
More information about the dovecot-cvs
mailing list