return FALSE;
}
+static const char *
+http_client_request_add_event_headers(struct http_client_request *req,
+ const struct http_response *response)
+{
+ if (req->event_headers == NULL)
+ return "";
+
+ string_t *str = t_str_new(128);
+ for (unsigned int i = 0; req->event_headers[i] != NULL; i++) {
+ const char *hdr_name = req->event_headers[i];
+ const char *value = http_response_header_get(response, hdr_name);
+
+ if (value == NULL)
+ continue;
+
+ str_append(str, str_len(str) == 0 ? " (" : ", ");
+ event_add_str(req->event,
+ t_strconcat("http_hdr_", hdr_name, NULL), value);
+ str_printfa(str, "%s:%s", hdr_name, value);
+ }
+ if (str_len(str) > 0)
+ str_append_c(str, ')');
+ return str_c(str);
+}
+
static void http_client_connection_input(struct connection *_conn)
{
struct http_client_connection *conn =
conn->output_broken = early = TRUE;
}
+ const char *suffix =
+ http_client_request_add_event_headers(req, &response);
e_debug(conn->event,
- "Got %u response for request %s: %s (took %u ms + %u ms in queue)",
+ "Got %u response for request %s: %s%s (took %u ms + %u ms in queue)",
response.status, http_client_request_label(req),
- response.reason,
+ response.reason, suffix,
timeval_diff_msecs(&req->response_time, &req->sent_time),
timeval_diff_msecs(&req->sent_time, &req->submit_time));
req->max_attempts = max_attempts;
}
+void http_client_request_set_event_headers(struct http_client_request *req,
+ const char *const *headers)
+{
+ req->event_headers = p_strarray_dup(req->pool, headers);
+}
+
void http_client_request_set_auth_simple(struct http_client_request *req,
const char *username, const char *password)
{
void http_client_request_set_max_attempts(struct http_client_request *req,
unsigned int max_attempts);
+/* Include the specified HTTP response headers in the http_request_finished
+ event parameters with "http_hdr_" prefix. */
+void http_client_request_set_event_headers(struct http_client_request *req,
+ const char *const *headers);
+
/* set the username:password credentials for this request for simple
authentication. This function is meant for simple schemes that use a
password. More complex schemes will need to be handled manually.