diff options
Diffstat (limited to 'server/dbus/sssd_dbus.h')
-rw-r--r-- | server/dbus/sssd_dbus.h | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/server/dbus/sssd_dbus.h b/server/dbus/sssd_dbus.h index 547aaad2..2b8a7787 100644 --- a/server/dbus/sssd_dbus.h +++ b/server/dbus/sssd_dbus.h @@ -21,10 +21,26 @@ #ifndef _SSSD_DBUS_H_ #define _SSSD_DBUS_H_ - +struct dbus_connection_toplevel_context; typedef int (*sssd_dbus_msg_handler_fn)(DBusMessage *msg, void *data, DBusMessage **reply); +/* + * sssd_dbus_connection_destructor_fn + * Function to be called when a connection is finalized + */ +typedef int (*sssd_dbus_connection_destructor_fn)( + void *ctx); + +/* + * sssd_dbus_server_connection_init_fn + * Set up function for connection-specific activities + * This function should define the sssd_dbus_connection_destructor_fn + * for this connection at a minimum + */ +typedef int (*sssd_dbus_server_connection_init_fn)( + struct dbus_connection_toplevel_context *dct_ctx); + extern int connection_type_slot; enum { @@ -37,17 +53,36 @@ struct sssd_dbus_method { sssd_dbus_msg_handler_fn fn; }; -struct sssd_dbus_ctx { - struct event_context *ev; - char *name; +struct sssd_dbus_method_ctx { + struct sssd_dbus_method_ctx *prev, *next; + /*struct event_context *ev;*/ + char *interface; char *path; + + /* If a non-default message_handler is desired, set it in this + * object before calling dbus_connection_add_method_ctx() + * Otherwise it will default to message_handler() in + * sssd_dbus_connection.c + */ + DBusObjectPathMessageFunction message_handler; struct sssd_dbus_method *methods; }; /* Server Functions */ -int sssd_new_dbus_server(struct sssd_dbus_ctx *ctx, const char *address); +int sssd_new_dbus_server(struct event_context *ev, struct sssd_dbus_method_ctx *ctx, const char *address, sssd_dbus_server_connection_init_fn init_fn); /* Connection Functions */ -int sssd_new_dbus_connection(struct sssd_dbus_ctx *ctx, const char *address, - DBusConnection **connection); +int sssd_new_dbus_connection(TALLOC_CTX *ctx, struct event_context *ev, const char *address, + struct dbus_connection_toplevel_context **dct_ctx, + sssd_dbus_connection_destructor_fn destructor); + +void sssd_dbus_connection_set_destructor(struct dbus_connection_toplevel_context *dct_ctx, + sssd_dbus_connection_destructor_fn destructor); +int default_connection_destructor(void *ctx); + +DBusConnection *sssd_get_dbus_connection(struct dbus_connection_toplevel_context *dct_ctx); +void sssd_dbus_disconnect (struct dbus_connection_toplevel_context *dct_ctx); +void sssd_connection_set_private_data(struct dbus_connection_toplevel_context *dct_ctx, void *private); +int dbus_connection_add_method_ctx(struct dbus_connection_toplevel_context *dct_ctx, struct sssd_dbus_method_ctx *method_ctx); + #endif /* _SSSD_DBUS_H_*/ |