From 7abab3b191860a3d77af5192b0649833c8a0c803 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Mon, 23 May 2016 02:36:10 +0200 Subject: [PATCH] lib-http: client: Improved labeling of debug messages. Request label is corrected. Labels are now pre-composed and stored. --- src/lib-http/http-client-connection.c | 5 +++- src/lib-http/http-client-peer.c | 18 ++++++++++++ src/lib-http/http-client-private.h | 41 +++++++-------------------- src/lib-http/http-client-request.c | 11 +++++++ 4 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/lib-http/http-client-connection.c b/src/lib-http/http-client-connection.c index d2000453b9..c4acaddef4 100644 --- a/src/lib-http/http-client-connection.c +++ b/src/lib-http/http-client-connection.c @@ -35,7 +35,7 @@ http_client_connection_debug(struct http_client_connection *conn, va_start(args, format); i_debug("http-client: conn %s: %s", - http_client_connection_label(conn), t_strdup_vprintf(format, args)); + conn->label, t_strdup_vprintf(format, args)); va_end(args); } } @@ -1378,6 +1378,9 @@ http_client_connection_create(struct http_client_peer *peer) if (peer->addr.type != HTTP_CLIENT_PEER_ADDR_RAW) i_array_init(&conn->request_wait_list, 16); + conn->label = i_strdup_printf("%s [%d]", + http_client_peer_label(peer), conn->id); + switch (peer->addr.type) { case HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL: http_client_connection_connect_tunnel diff --git a/src/lib-http/http-client-peer.c b/src/lib-http/http-client-peer.c index 1f67899bf4..ee8c93a677 100644 --- a/src/lib-http/http-client-peer.c +++ b/src/lib-http/http-client-peer.c @@ -104,6 +104,23 @@ int http_client_peer_addr_cmp * Peer */ +const char * +http_client_peer_label(struct http_client_peer *peer) +{ + if (peer->label == NULL) { + switch (peer->addr.type) { + case HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL: + peer->label = i_strconcat + (http_client_peer_addr2str(&peer->addr), " (tunnel)", NULL); + break; + default: + peer->label = i_strdup + (http_client_peer_addr2str(&peer->addr)); + } + } + return peer->label; +} + static void http_client_peer_do_connect(struct http_client_peer *peer, unsigned int count) @@ -571,6 +588,7 @@ bool http_client_peer_unref(struct http_client_peer **_peer) array_free(&peer->conns); array_free(&peer->queues); i_free(peer->addr_name); + i_free(peer->label); i_free(peer); return FALSE; } diff --git a/src/lib-http/http-client-private.h b/src/lib-http/http-client-private.h index 4976889702..d84d1a95c3 100644 --- a/src/lib-http/http-client-private.h +++ b/src/lib-http/http-client-private.h @@ -144,9 +144,9 @@ struct http_client_connection { struct http_client *client; unsigned int refcount; - const char *label; - + char *label; unsigned int id; // DEBUG: identify parallel connections + int connect_errno; struct timeval connect_start_timestamp; struct timeval connected_timestamp; @@ -182,6 +182,8 @@ struct http_client_peer { struct http_client_peer_addr addr; char *addr_name; + char *label; + struct http_client *client; struct http_client_peer *prev, *next; @@ -341,22 +343,15 @@ http_client_peer_addr2str(const struct http_client_peer_addr *addr) * Request */ -static inline const char * -http_client_request_label(struct http_client_request *req) -{ - if (req->label == NULL) { - return t_strdup_printf("[Req%u: %s %s%s]", req->id, - req->method, http_url_create(&req->origin_url), req->target); - } - return req->label; -} - static inline bool http_client_request_to_proxy(const struct http_client_request *req) { return (req->host_url != &req->origin_url); } +const char * +http_client_request_label(struct http_client_request *req); + void http_client_request_ref(struct http_client_request *req); /* Returns FALSE if unrefing destroyed the request entirely */ bool http_client_request_unref(struct http_client_request **_req); @@ -391,15 +386,6 @@ void http_client_request_finish(struct http_client_request *req); * Connection */ -static inline const char * -http_client_connection_label(struct http_client_connection *conn) -{ - return t_strdup_printf("%s%s [%d]", - http_client_peer_addr2str(&conn->peer->addr), - (conn->peer->addr.type == HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL ? - " (tunnel)" : ""), conn->id); -} - struct connection_list *http_client_connection_list_init(void); struct http_client_connection * @@ -429,22 +415,15 @@ void http_client_connection_start_tunnel(struct http_client_connection **_conn, * Peer */ -static inline const char * -http_client_peer_label(struct http_client_peer *peer) -{ - if (peer->addr.type == HTTP_CLIENT_PEER_ADDR_HTTPS_TUNNEL) { - return t_strconcat - (http_client_peer_addr2str(&peer->addr), " (tunnel)", NULL); - } - return http_client_peer_addr2str(&peer->addr); -} - unsigned int http_client_peer_addr_hash (const struct http_client_peer_addr *peer) ATTR_PURE; int http_client_peer_addr_cmp (const struct http_client_peer_addr *peer1, const struct http_client_peer_addr *peer2) ATTR_PURE; +const char * +http_client_peer_label(struct http_client_peer *peer); + struct http_client_peer * http_client_peer_get(struct http_client *client, const struct http_client_peer_addr *addr); diff --git a/src/lib-http/http-client-request.c b/src/lib-http/http-client-request.c index 2eff143987..35de1c4423 100644 --- a/src/lib-http/http-client-request.c +++ b/src/lib-http/http-client-request.c @@ -59,6 +59,17 @@ static void http_client_request_send_error(struct http_client_request *req, unsigned int status, const char *error); +const char * +http_client_request_label(struct http_client_request *req) +{ + if (req->label == NULL) { + req->label = p_strdup_printf(req->pool, + "[Req%u: %s %s%s]", req->id, + req->method, http_url_create(&req->origin_url), req->target); + } + return req->label; +} + static struct http_client_request * http_client_request_new(struct http_client *client, const char *method, http_client_request_callback_t *callback, void *context)