Skip to content

Commit

Permalink
lib-http: client: Improved labeling of debug messages.
Browse files Browse the repository at this point in the history
Request label is corrected.
Labels are now pre-composed and stored.
  • Loading branch information
stephanbosch committed May 26, 2016
1 parent 6ab81c8 commit 7abab3b
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 32 deletions.
5 changes: 4 additions & 1 deletion src/lib-http/http-client-connection.c
Expand Up @@ -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);
}
}
Expand Down Expand Up @@ -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
Expand Down
18 changes: 18 additions & 0 deletions src/lib-http/http-client-peer.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
}
Expand Down
41 changes: 10 additions & 31 deletions src/lib-http/http-client-private.h
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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 *
Expand Down Expand Up @@ -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);
Expand Down
11 changes: 11 additions & 0 deletions src/lib-http/http-client-request.c
Expand Up @@ -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)
Expand Down

0 comments on commit 7abab3b

Please sign in to comment.