From a96499f35fdd6a0f13bcfe834023dce8679815c9 Mon Sep 17 00:00:00 2001 From: Markus Valentin Date: Wed, 6 Dec 2023 13:42:07 +0100 Subject: [PATCH] doveadm: Move doveadm_http_server from client-connection-http to main --- src/doveadm/client-connection-http.c | 29 ++++--------------------- src/doveadm/client-connection-private.h | 4 ---- src/doveadm/client-connection.c | 6 ----- src/doveadm/client-connection.h | 4 +++- src/doveadm/main.c | 23 ++++++++++++++++++-- 5 files changed, 28 insertions(+), 38 deletions(-) diff --git a/src/doveadm/client-connection-http.c b/src/doveadm/client-connection-http.c index 25b8299f83..81ae9f51da 100644 --- a/src/doveadm/client-connection-http.c +++ b/src/doveadm/client-connection-http.c @@ -11,7 +11,6 @@ #include "ostream.h" #include "strescape.h" #include "settings-parser.h" -#include "settings.h" #include "iostream-ssl.h" #include "iostream-temp.h" #include "istream-seekable.h" @@ -88,8 +87,6 @@ struct doveadm_http_server_mount { bool auth; }; -static struct http_server *doveadm_http_server; - static void doveadm_http_server_send_response(struct client_request_http *req); /* @@ -950,7 +947,7 @@ doveadm_http_server_request_destroy(struct client_request_http *req) i_stream_destroy(&req->input); http_server_request_unref(&req->http_request); - http_server_switch_ioloop(doveadm_http_server); + http_server_switch_ioloop(http_server_request_get_server(http_sreq)); pool_unref(&req->pool); conn->request = NULL; @@ -1162,7 +1159,9 @@ static void client_connection_http_free(struct client_connection *_conn) } } -struct client_connection *client_connection_http_create(int fd, bool ssl) +struct client_connection * +client_connection_http_create(struct http_server *doveadm_http_server, int fd, + bool ssl) { struct client_connection_http *conn; pool_t pool; @@ -1203,23 +1202,3 @@ doveadm_http_server_connection_destroy(void *context, /* destroy the connection itself */ client_connection_destroy(&bconn); } - -/* - * Server - */ - -void doveadm_http_server_init(struct event *parent_event) -{ - const char *error; - - struct event *event = event_create(parent_event); - event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME, DOVEADM_SERVER_FILTER); - if (http_server_init_auto(event, &doveadm_http_server, &error) < 0) - i_fatal("http_server_init() failed: %s", error); - event_unref(&event); -} - -void doveadm_http_server_deinit(void) -{ - http_server_deinit(&doveadm_http_server); -} diff --git a/src/doveadm/client-connection-private.h b/src/doveadm/client-connection-private.h index d124009a21..36c88963c0 100644 --- a/src/doveadm/client-connection-private.h +++ b/src/doveadm/client-connection-private.h @@ -13,10 +13,6 @@ void client_connection_destroy(struct client_connection **_conn); void client_connection_set_proctitle(struct client_connection *conn, const char *text); -void doveadm_http_server_init(struct event *event); -void doveadm_http_server_deinit(void); - -void doveadm_server_init(struct event *event); void doveadm_server_deinit(void); #endif diff --git a/src/doveadm/client-connection.c b/src/doveadm/client-connection.c index a1d1d14bc4..4825eebba1 100644 --- a/src/doveadm/client-connection.c +++ b/src/doveadm/client-connection.c @@ -101,14 +101,8 @@ void client_connection_set_proctitle(struct client_connection *conn, process_title_set(str); } -void doveadm_server_init(struct event *event) -{ - doveadm_http_server_init(event); -} - void doveadm_server_deinit(void) { if (doveadm_client != NULL) client_connection_destroy(&doveadm_client); - doveadm_http_server_deinit(); } diff --git a/src/doveadm/client-connection.h b/src/doveadm/client-connection.h index de324a1bd1..38d83a3508 100644 --- a/src/doveadm/client-connection.h +++ b/src/doveadm/client-connection.h @@ -3,6 +3,7 @@ #include "net.h" +struct http_server; #define DOVEADM_LOG_CHANNEL_ID 'L' struct client_connection { @@ -24,6 +25,7 @@ extern struct client_connection *doveadm_client; struct client_connection * client_connection_tcp_create(int fd, int listen_fd, bool ssl); struct client_connection * -client_connection_http_create(int fd, bool ssl); +client_connection_http_create(struct http_server *doveadm_http_server, + int fd, bool ssl); #endif diff --git a/src/doveadm/main.c b/src/doveadm/main.c index cfd775ddfd..bac236ddce 100644 --- a/src/doveadm/main.c +++ b/src/doveadm/main.c @@ -14,6 +14,8 @@ #include "doveadm-mail.h" #include "doveadm-print-private.h" #include "ostream.h" +#include "http-server.h" +#include "settings.h" const struct doveadm_print_vfuncs *doveadm_print_vfuncs_all[] = { &doveadm_print_server_vfuncs, @@ -21,6 +23,8 @@ const struct doveadm_print_vfuncs *doveadm_print_vfuncs_all[] = { NULL }; +static struct http_server *doveadm_http_server; + struct client_connection *doveadm_client; int doveadm_exit_code = 0; @@ -41,7 +45,8 @@ static void client_connected(struct master_service_connection *conn) master_service_client_connection_accept(conn); type = master_service_connection_get_type(conn); if (strcmp(type, "http") == 0) { - doveadm_client = client_connection_http_create(conn->fd, conn->ssl); + doveadm_client = client_connection_http_create(doveadm_http_server, + conn->fd, conn->ssl); } else { doveadm_client = client_connection_tcp_create(conn->fd, conn->listen_fd, conn->ssl); @@ -60,6 +65,19 @@ static void main_preinit(void) restrict_access_allow_coredumps(TRUE); } +static void doveadm_http_server_init(void) +{ + const char *error; + + struct event *event = + event_create(master_service_get_event(master_service)); + event_set_ptr(event, SETTINGS_EVENT_FILTER_NAME, DOVEADM_SERVER_FILTER); + if (http_server_init_auto(event, &doveadm_http_server, &error) < 0) + i_fatal("http_server_init() failed: %s", error); + event_unref(&event); + +} + static void main_init(void) { doveadm_server = TRUE; @@ -79,7 +97,7 @@ static void main_init(void) mail_plugins have been loaded. */ doveadm_load_modules(); - doveadm_server_init(master_service_get_event(master_service)); + doveadm_http_server_init(); if (doveadm_verbose_proctitle) process_title_set("[idling]"); } @@ -87,6 +105,7 @@ static void main_init(void) static void main_deinit(void) { doveadm_server_deinit(); + http_server_deinit(&doveadm_http_server); doveadm_mail_deinit(); doveadm_dump_deinit(); doveadm_unload_modules(); -- 2.47.3