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);
}
}
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
* 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)
array_free(&peer->conns);
array_free(&peer->queues);
i_free(peer->addr_name);
+ i_free(peer->label);
i_free(peer);
return FALSE;
}
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;
struct http_client_peer_addr addr;
char *addr_name;
+ char *label;
+
struct http_client *client;
struct http_client_peer *prev, *next;
* 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);
* 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 *
* 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);
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)