]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: client: Improved labeling of debug messages.
authorStephan Bosch <stephan@dovecot.fi>
Mon, 23 May 2016 00:36:10 +0000 (02:36 +0200)
committerStephan Bosch <stephan@dovecot.fi>
Thu, 26 May 2016 01:05:44 +0000 (03:05 +0200)
Request label is corrected.
Labels are now pre-composed and stored.

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

index d2000453b96cf717eb2df8d33414ef78b6dfa9cd..c4acaddef45a7aff9e46d562532f19edc8e4547b 100644 (file)
@@ -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
index 1f67899bf44d3e1ae34e5575e4436c68a548315a..ee8c93a677d5841475918f0f5c2dfce9522a5be4 100644 (file)
@@ -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;
 }
index 497688970282fe2a284f68db47c4afdb4820c7a4..d84d1a95c36a2366c0de252a7eab2e27d22e0793 100644 (file)
@@ -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);
index 2eff143987b7b59537cea4b640873c71c3c89b47..35de1c442314edf74c82500fa2df491be2204b19 100644 (file)
@@ -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)