changeset 21040:9b04af4cbe62

lib-http: client: Improved labeling of debug messages. Request label is corrected. Labels are now pre-composed and stored.
author Stephan Bosch <stephan@dovecot.fi>
date Mon, 23 May 2016 02:36:10 +0200
parents 9bde58ad7c8d
children 13a159cfd232
files src/lib-http/http-client-connection.c src/lib-http/http-client-peer.c src/lib-http/http-client-private.h src/lib-http/http-client-request.c
diffstat 4 files changed, 43 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-http/http-client-connection.c	Sat Apr 16 03:54:00 2016 +0200
+++ b/src/lib-http/http-client-connection.c	Mon May 23 02:36:10 2016 +0200
@@ -36,7 +36,7 @@
 
 		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);
 	}
 }
@@ -1440,6 +1440,9 @@
 	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
--- a/src/lib-http/http-client-peer.c	Sat Apr 16 03:54:00 2016 +0200
+++ b/src/lib-http/http-client-peer.c	Mon May 23 02:36:10 2016 +0200
@@ -104,6 +104,23 @@
  * 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)
@@ -595,6 +612,7 @@
 	array_free(&peer->conns);
 	array_free(&peer->queues);
 	i_free(peer->addr_name);
+	i_free(peer->label);
 	i_free(peer);
 	return FALSE;
 }
--- a/src/lib-http/http-client-private.h	Sat Apr 16 03:54:00 2016 +0200
+++ b/src/lib-http/http-client-private.h	Mon May 23 02:36:10 2016 +0200
@@ -148,9 +148,9 @@
 	struct http_client *client;
 	unsigned int refcount;
 
-	const char *label;
+	char *label;
+	unsigned int id; // DEBUG: identify parallel connections
 
-	unsigned int id; // DEBUG: identify parallel connections
 	int connect_errno;
 	struct timeval connect_start_timestamp;
 	struct timeval connected_timestamp;
@@ -187,6 +187,8 @@
 	struct http_client_peer_addr addr;
 	char *addr_name;
 
+	char *label;
+
 	struct http_client *client;
 	struct http_client_peer *prev, *next;
 
@@ -347,22 +349,15 @@
  * 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);
@@ -397,15 +392,6 @@
  * 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 *
@@ -439,22 +425,15 @@
  * 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);
--- a/src/lib-http/http-client-request.c	Sat Apr 16 03:54:00 2016 +0200
+++ b/src/lib-http/http-client-request.c	Mon May 23 02:36:10 2016 +0200
@@ -60,6 +60,17 @@
 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)