va_list args;
if (conn->server->set.debug) {
- va_start(args, format);
- i_debug("http-server: conn %s: %s",
- http_server_connection_label(conn),
- t_strdup_vprintf(format, args));
+ va_start(args, format);
+ e_debug(conn->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
}
va_list args;
va_start(args, format);
- i_error("http-server: conn %s: %s",
- http_server_connection_label(conn),
- t_strdup_vprintf(format, args));
+ e_error(conn->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
va_list args;
va_start(args, format);
- i_info("http-server: conn %s: %s",
- http_server_connection_label(conn),
- t_strdup_vprintf(format, args));
+ e_info(conn->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
conn->http_parser, req->pool, &req->req,
&error_code, &error)) > 0) {
conn->stats.request_count++;
+ http_server_request_update_event(req);
http_server_connection_debug(
conn, "Received new request %s "
"(%u requests pending; %u maximum)",
{
const struct http_server_settings *set = &server->set;
struct http_server_connection *conn;
+ struct event *conn_event;
i_assert(!server->shutting_down);
set->socket_recv_buffer_size);
}
+ conn_event = event_create(server->event);
+ conn->conn.event_parent = conn_event;
connection_init_server(server->conn_list, &conn->conn, NULL,
fd_in, fd_out);
+ conn->event = conn->conn.event;
+ event_unref(&conn_event);
if (!ssl)
http_server_connection_ready(conn);
struct http_server_response {
struct http_server_request *request;
+ struct event *event;
unsigned int status;
const char *reason;
unsigned int refcount;
unsigned int id;
int callback_refcount;
+ struct event *event;
enum http_server_request_state state;
struct http_server_connection {
struct connection conn;
struct http_server *server;
+ struct event *event;
unsigned int refcount;
const struct http_server_callbacks *callbacks;
struct http_server_settings set;
struct ioloop *ioloop;
+ struct event *event;
struct ssl_iostream_context *ssl_ctx;
struct connection_list *conn_list;
const char *http_server_request_label(struct http_server_request *req);
+void http_server_request_update_event(struct http_server_request *req);
+
struct http_server_request *
http_server_request_new(struct http_server_connection *conn);
void http_server_request_destroy(struct http_server_request **_req);
* Connection
*/
-static inline const char *
-http_server_connection_label(struct http_server_connection *conn)
-{
- return conn->conn.label;
-}
-
static inline void
http_server_connection_add_request(struct http_server_connection *conn,
struct http_server_request *sreq)
if (server->set.debug) {
va_start(args, format);
- i_debug("http-server: request %s: %s",
- http_server_request_label(req),
- t_strdup_vprintf(format, args));
+ e_debug(req->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
}
va_list args;
va_start(args, format);
- i_error("http-server: request %s: %s",
- http_server_request_label(req),
- t_strdup_vprintf(format, args));
+ e_error(req->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
va_list args;
va_start(args, format);
- i_info("http-server: request %s: %s",
- http_server_request_label(req),
- t_strdup_vprintf(format, args));
+ e_info(req->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
req->req.method, req->req.target_raw);
}
+void http_server_request_update_event(struct http_server_request *req)
+{
+ if (req->req.method != NULL)
+ event_add_str(req->event, "method", req->req.method);
+ if (req->req.target_raw != NULL)
+ event_add_str(req->event, "target", req->req.target_raw);
+ event_set_append_log_prefix(
+ req->event, t_strdup_printf("request %s: ",
+ http_server_request_label(req)));
+}
+
struct http_server_request *
http_server_request_new(struct http_server_connection *conn)
{
req->conn = conn;
req->server = conn->server;
req->id = ++id_counter;
+ req->event = event_create(conn->event);
+ http_server_request_update_event(req);
http_server_connection_add_request(conn, req);
return req;
if (req->response != NULL)
http_server_response_free(req->response);
+ event_unref(&req->event);
pool_unref(&req->pool);
return FALSE;
}
if (resp->request->server->set.debug) {
va_start(args, format);
- i_debug("http-server: request %s; %u response: %s",
- http_server_request_label(resp->request), resp->status,
- t_strdup_vprintf(format, args));
+ e_debug(resp->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
}
va_list args;
va_start(args, format);
- i_error("http-server: request %s; %u response: %s",
- http_server_request_label(resp->request), resp->status,
- t_strdup_vprintf(format, args));
+ e_debug(resp->event, "%s", t_strdup_vprintf(format, args));
va_end(args);
}
* Response
*/
+static void http_server_response_update_event(struct http_server_response *resp)
+{
+ event_add_int(resp->event, "status", resp->status);
+ event_set_append_log_prefix(resp->event,
+ t_strdup_printf("%u response: ",
+ resp->status));
+}
+
struct http_server_response *
http_server_response_create(struct http_server_request *req,
unsigned int status, const char *reason)
resp->reason = p_strdup(req->pool, reason);
resp->headers = str_new(default_pool, 256);
resp->date = (time_t)-1;
+ resp->event = event_create(req->event);
+ http_server_response_update_event(resp);
if (array_is_created(&resp->perm_headers)) {
unsigned int i, count;
i_stream_unref(&resp->payload_input);
o_stream_unref(&resp->payload_output);
+ event_unref(&resp->event);
str_free(&resp->headers);
if (array_is_created(&resp->perm_headers)) {
#include "http-server-private.h"
+static struct event_category event_category_http_server = {
+ .name = "http-server"
+};
+
/*
* Server
*/
server->set.socket_recv_buffer_size = set->socket_recv_buffer_size;
server->set.debug = set->debug;
+ server->event = event_create(set->event);
+ event_add_category(server->event, &event_category_http_server);
+ event_set_forced_debug(server->event, set->debug);
+ event_set_append_log_prefix(server->event, "http-server: ");
+
server->conn_list = http_server_connection_list_init();
return server;
if (server->ssl_ctx != NULL)
ssl_iostream_context_unref(&server->ssl_ctx);
+ event_unref(&server->event);
pool_unref(&server->pool);
}
size_t socket_send_buffer_size;
size_t socket_recv_buffer_size;
+ /* Event to use for the http server. */
+ struct event *event;
+
/* Enable logging debug messages */
bool debug;
};