From 07e941c1bbdc752142bbd3b838c540bc7ecd0ed7 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Tue, 18 Feb 2014 14:32:54 +0100 Subject: sbus: Refactor how we export DBus interfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Most importantly, stop using per connection private data. This doesn't scale when you have more than one thing exporting or exported on a connection. Remove struct sbus_interface and expand sbus_conn_add_interface() function. Remove various struct sbus_interface args to connection initialization functions and make callers use sbus_conn_add_interface() directly. The old method was optimized for exporting one interface on a connection. We'll have connections that export zero, one or more interfaces. To export an interface on a DBus server, call sbus_conn_add_interface() from within the sbus_server_conn_init_fn. To export an interface on a DBus client, call sbus_conn_add_interface() after sbus_new_connection() returns. As before struct sbus_interface represents an object exported via DBus. However it is now talloc allocated. One can set instance data on the struct sbus_interface. This instance data is passed to the various handlers and used in their implementation. However, we now have type safe interface exporting in the various high level sss_process_init() sss_monitor_init() and so on. Introspection support was not in use, and is now gone until we implement it using the metadata (future patch). Reviewed-by: Jakub Hrozek Reviewed-by: Pavel Březina Reviewed-by: Lukáš Slebodník --- src/responder/autofs/autofssrv.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) (limited to 'src/responder/autofs') diff --git a/src/responder/autofs/autofssrv.c b/src/responder/autofs/autofssrv.c index b447a0634..9b5aa02dd 100644 --- a/src/responder/autofs/autofssrv.c +++ b/src/responder/autofs/autofssrv.c @@ -29,7 +29,7 @@ #include "providers/data_provider.h" #include "responder/autofs/autofs_private.h" -static int autofs_clean_hash_table(struct sbus_request *dbus_req); +static int autofs_clean_hash_table(struct sbus_request *dbus_req, void *data); struct mon_cli_iface monitor_autofs_methods = { { &mon_cli_iface_meta, 0 }, @@ -43,12 +43,6 @@ struct mon_cli_iface monitor_autofs_methods = { .clearEnumCache = autofs_clean_hash_table, }; -struct sbus_interface monitor_autofs_interface = { - MONITOR_PATH, - &monitor_autofs_methods.vtable, - NULL -}; - static struct data_provider_iface autofs_dp_methods = { { &data_provider_iface_meta, 0 }, .RegisterService = NULL, @@ -60,12 +54,6 @@ static struct data_provider_iface autofs_dp_methods = { .getAccountInfo = NULL, }; -struct sbus_interface autofs_dp_interface = { - DP_PATH, - &autofs_dp_methods.vtable, - NULL -}; - static errno_t autofs_get_config(struct autofs_ctx *actx, struct confdb_ctx *cdb) @@ -111,10 +99,9 @@ autofs_dp_reconnect_init(struct sbus_connection *conn, be_conn->domain->name); } -static int autofs_clean_hash_table(struct sbus_request *dbus_req) +static int autofs_clean_hash_table(struct sbus_request *dbus_req, void *data) { - struct resp_ctx *rctx = talloc_get_type(sbus_conn_get_private_data(dbus_req->conn), - struct resp_ctx); + struct resp_ctx *rctx = talloc_get_type(data, struct resp_ctx); struct autofs_ctx *actx = talloc_get_type(rctx->pvt_ctx, struct autofs_ctx); errno_t ret; @@ -148,9 +135,9 @@ autofs_process_init(TALLOC_CTX *mem_ctx, CONFDB_AUTOFS_CONF_ENTRY, SSS_AUTOFS_SBUS_SERVICE_NAME, SSS_AUTOFS_SBUS_SERVICE_VERSION, - &monitor_autofs_interface, + &monitor_autofs_methods, "autofs", - &autofs_dp_interface, + &autofs_dp_methods.vtable, &rctx); if (ret != EOK) { DEBUG(SSSDBG_FATAL_FAILURE, "sss_process_init() failed\n"); -- cgit