diff --git a/daemon/control.c b/daemon/control.c index 3cb6fe95..20231f3b 100644 --- a/daemon/control.c +++ b/daemon/control.c @@ -27,14 +27,13 @@ #include "common.h" -#include "../dbus/interface.h" #include "../dbus/error.h" #include "control.h" #include "../dbus_constants.h" #define INTERFACE_NAME IFACE_CONTROL -static void ladish_is_studio_loaded(method_call_t * call_ptr) +static void ladish_is_studio_loaded(struct dbus_method_call * call_ptr) { DBusMessageIter iter; dbus_bool_t is_loaded; @@ -103,7 +102,7 @@ exit: return ret; } -static void ladish_get_studio_list(method_call_t * call_ptr) +static void ladish_get_studio_list(struct dbus_method_call * call_ptr) { DBusMessageIter iter, array_iter; @@ -145,7 +144,7 @@ fail: lash_error("Ran out of memory trying to construct method return"); } -static void ladish_load_studio(method_call_t * call_ptr) +static void ladish_load_studio(struct dbus_method_call * call_ptr) { const char * name; @@ -164,7 +163,7 @@ static void ladish_load_studio(method_call_t * call_ptr) } } -static void ladish_delete_studio(method_call_t * call_ptr) +static void ladish_delete_studio(struct dbus_method_call * call_ptr) { const char * name; @@ -183,7 +182,7 @@ static void ladish_delete_studio(method_call_t * call_ptr) } } -static void ladish_new_studio(method_call_t * call_ptr) +static void ladish_new_studio(struct dbus_method_call * call_ptr) { const char * name; @@ -202,7 +201,7 @@ static void ladish_new_studio(method_call_t * call_ptr) } } -static void ladish_get_application_list(method_call_t * call_ptr) +static void ladish_get_application_list(struct dbus_method_call * call_ptr) { DBusMessageIter iter; DBusMessageIter array_iter; @@ -276,7 +275,7 @@ fail: return; } -static void ladish_exit(method_call_t * call_ptr) +static void ladish_exit(struct dbus_method_call * call_ptr) { lash_info("Exit command received through D-Bus"); g_quit = true; diff --git a/daemon/control.h b/daemon/control.h index 3f6afdc1..242e0611 100644 --- a/daemon/control.h +++ b/daemon/control.h @@ -28,7 +28,7 @@ #ifndef __LASHD_DBUS_IFACE_CONTROL_H__ #define __LASHD_DBUS_IFACE_CONTROL_H__ -extern const interface_t g_lashd_interface_control; +extern const struct dbus_interface_descriptor g_lashd_interface_control; void emit_studio_appeared(); void emit_studio_disappeared(); diff --git a/daemon/graph_iface.c b/daemon/graph_iface.c index e177d5ee..d92bdaf9 100644 --- a/daemon/graph_iface.c +++ b/daemon/graph_iface.c @@ -29,9 +29,9 @@ #include "graph_iface.h" #include "../dbus/error.h" -#define impl_ptr ((struct graph_implementator *)call_ptr->context) +#define impl_ptr ((struct graph_implementator *)call_ptr->iface_context) -static void get_all_ports(method_call_t * call_ptr) +static void get_all_ports(struct dbus_method_call * call_ptr) { DBusMessageIter iter, sub_iter; @@ -63,7 +63,7 @@ fail: lash_error("Ran out of memory trying to construct method return"); } -static void get_graph(method_call_t * call_ptr) +static void get_graph(struct dbus_method_call * call_ptr) { dbus_uint64_t known_version; dbus_uint64_t current_version; @@ -306,32 +306,32 @@ exit: return; } -static void connect_ports_by_name(method_call_t * call_ptr) +static void connect_ports_by_name(struct dbus_method_call * call_ptr) { method_return_new_void(call_ptr); } -static void connect_ports_by_id(method_call_t * call_ptr) +static void connect_ports_by_id(struct dbus_method_call * call_ptr) { method_return_new_void(call_ptr); } -static void disconnect_ports_by_name(method_call_t * call_ptr) +static void disconnect_ports_by_name(struct dbus_method_call * call_ptr) { method_return_new_void(call_ptr); } -static void disconnect_ports_by_id(method_call_t * call_ptr) +static void disconnect_ports_by_id(struct dbus_method_call * call_ptr) { method_return_new_void(call_ptr); } -static void disconnect_ports_by_connection_id(method_call_t * call_ptr) +static void disconnect_ports_by_connection_id(struct dbus_method_call * call_ptr) { method_return_new_void(call_ptr); } -static void get_client_pid(method_call_t * call_ptr) +static void get_client_pid(struct dbus_method_call * call_ptr) { int64_t pid = 0; method_return_new_single(call_ptr, DBUS_TYPE_INT64, &pid); diff --git a/daemon/graph_iface.h b/daemon/graph_iface.h index 7c2dd3fc..522420b6 100644 --- a/daemon/graph_iface.h +++ b/daemon/graph_iface.h @@ -34,6 +34,6 @@ struct graph_implementator uint64_t (* get_graph_version)(void * this); }; -extern const interface_t g_interface_patchbay; +extern const struct dbus_interface_descriptor g_interface_patchbay; #endif /* #ifndef PATCHBAY_H__30334B9A_8847_4E8C_AFF9_73DB13406C8E__INCLUDED */ diff --git a/daemon/studio.c b/daemon/studio.c index b35d3726..577aa731 100644 --- a/daemon/studio.c +++ b/daemon/studio.c @@ -47,7 +47,7 @@ char * g_studios_dir; #define STUDIO_HEADER_TEXT BASE_NAME " Studio configuration.\n" -extern const interface_t g_interface_studio; +extern const struct dbus_interface_descriptor g_interface_studio; struct studio { @@ -1691,12 +1691,12 @@ void emit_studio_renamed() signal_new_valist(g_dbus_connection, STUDIO_OBJECT_PATH, IFACE_STUDIO, "StudioRenamed", DBUS_TYPE_STRING, &g_studio.name, DBUS_TYPE_INVALID); } -static void ladish_get_studio_name(method_call_t * call_ptr) +static void ladish_get_studio_name(struct dbus_method_call * call_ptr) { method_return_new_single(call_ptr, DBUS_TYPE_STRING, &g_studio.name); } -static void ladish_rename_studio(method_call_t * call_ptr) +static void ladish_rename_studio(struct dbus_method_call * call_ptr) { const char * new_name; char * new_name_dup; @@ -1724,7 +1724,7 @@ static void ladish_rename_studio(method_call_t * call_ptr) emit_studio_renamed(); } -static void ladish_save_studio(method_call_t * call_ptr) +static void ladish_save_studio(struct dbus_method_call * call_ptr) { if (studio_save(call_ptr)) { @@ -1732,7 +1732,7 @@ static void ladish_save_studio(method_call_t * call_ptr) } } -static void ladish_unload_studio(method_call_t * call_ptr) +static void ladish_unload_studio(struct dbus_method_call * call_ptr) { lash_info("Unload studio request"); studio_clear(); @@ -1770,7 +1770,7 @@ bool studio_new(void * call_ptr, const char * studio_name) return true; } -static void ladish_stop_studio(method_call_t * call_ptr) +static void ladish_stop_studio(struct dbus_method_call * call_ptr) { lash_info("Studio stop requested"); @@ -1784,7 +1784,7 @@ static void ladish_stop_studio(method_call_t * call_ptr) } } -static void ladish_start_studio(method_call_t * call_ptr) +static void ladish_start_studio(struct dbus_method_call * call_ptr) { lash_info("Studio start requested"); diff --git a/dbus/error.c b/dbus/error.c index 7ffa3aa3..2da9b227 100644 --- a/dbus/error.c +++ b/dbus/error.c @@ -27,20 +27,12 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include -#include - +#include "../common.h" +#include "helpers.h" +#include "error.h" #include "../common/debug.h" -#include "error.h" -#include "method.h" -#include "interface.h" - -void -lash_dbus_error(method_call_t *call_ptr, - const char *err_name, - const char *format, - ...) +void lash_dbus_error(struct dbus_method_call * call_ptr, const char * err_name, const char * format, ...) { va_list ap; char message[1024]; @@ -55,7 +47,7 @@ lash_dbus_error(method_call_t *call_ptr, if (call_ptr != NULL) { - interface_name = (call_ptr->interface && call_ptr->interface->name && call_ptr->interface->name[0]) ? call_ptr->interface->name : ""; + interface_name = (call_ptr->iface && call_ptr->iface->name && call_ptr->iface->name[0]) ? call_ptr->iface->name : ""; lash_error("In method %s.%s: %s", interface_name, call_ptr->method_name, message); diff --git a/dbus/error.h b/dbus/error.h index c646b732..75dc6597 100644 --- a/dbus/error.h +++ b/dbus/error.h @@ -2,7 +2,7 @@ /* * LADI Session Handler (ladish) * - * Copyright (C) 2008 Nedko Arnaudov + * Copyright (C) 2008, 2009 Nedko Arnaudov * Copyright (C) 2008 Juuso Alasuutari * ************************************************************************** @@ -30,8 +30,6 @@ #ifndef __LASH_DBUS_ERROR_H__ #define __LASH_DBUS_ERROR_H__ -#include "types.h" - #define LASH_DBUS_ERROR_UNKNOWN_METHOD DBUS_NAME_BASE ".Error.UnknownMethod" #define LASH_DBUS_ERROR_SERVER_NOT_RUNNING DBUS_NAME_BASE ".Error.ServerNotRunning" #define LASH_DBUS_ERROR_INVALID_ARGS DBUS_NAME_BASE ".Error.InvalidArgs" @@ -43,10 +41,6 @@ #define LASH_DBUS_ERROR_UNFINISHED_TASK DBUS_NAME_BASE ".Error.UnfinishedTask" #define LASH_DBUS_ERROR_INVALID_TASK DBUS_NAME_BASE ".Error.InvalidTask" -void -lash_dbus_error(method_call_t *call_ptr, - const char *err_name, - const char *format, - ...); +void lash_dbus_error(struct dbus_method_call * call_ptr, const char * err_name, const char * format, ...); #endif /* __LASH_DBUS_ERROR_H__ */ diff --git a/dbus/helpers.h b/dbus/helpers.h index 0430883e..c0c2f207 100644 --- a/dbus/helpers.h +++ b/dbus/helpers.h @@ -63,6 +63,8 @@ dbus_unregister_object_signal_handler( #define DBUS_CALL_DEFAULT_TIMEOUT 1000 // in milliseconds +#include "method.h" +#include "signal.h" #include "interface.h" #include "object_path.h" diff --git a/dbus/interface.c b/dbus/interface.c index 4605b2f4..a500a6c9 100644 --- a/dbus/interface.c +++ b/dbus/interface.c @@ -27,53 +27,42 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include "../common.h" +#include "helpers.h" #include - -#include "../common/debug.h" - -#include "interface.h" #include "error.h" -#include "object_path.h" /* * Execute a method's function if the method specified in the method call * object exists in the method array. Return true if the method was found, * false otherwise. - * TODO: rewrite description ^ */ -bool -interface_default_handler(const interface_t *interface, - method_call_t *call) +bool dbus_interface_default_handler(const struct dbus_interface_descriptor * iface_ptr, struct dbus_method_call * call_ptr) { - const method_t *ptr; + const struct dbus_method_descriptor * method_ptr; - for (ptr = (const method_t *) interface->methods; - ptr && ptr->name; - ++ptr) { - if (strcmp(call->method_name, ptr->name) == 0) { - if (ptr->handler) { - call->interface = interface; - ptr->handler(call); - - /* If the method handler didn't construct a return - message create a void one here */ - // TODO: Also handle cases where the sender doesn't need a reply - if (!call->reply - && !(call->reply = dbus_message_new_method_return(call->message))) { + for (method_ptr = iface_ptr->methods; method_ptr->name != NULL; method_ptr++) + { + if (strcmp(call_ptr->method_name, method_ptr->name) == 0) + { + call_ptr->iface = iface_ptr; + method_ptr->handler(call_ptr); + /* If the method handler didn't construct a return message create a void one here */ + // TODO: Also handle cases where the sender doesn't need a reply + if (call_ptr->reply == NULL) + { + call_ptr->reply = dbus_message_new_method_return(call_ptr->message); + if (call_ptr->reply == NULL) + { lash_error("Failed to construct void method return"); } - } else { - lash_dbus_error(call, LASH_DBUS_ERROR_GENERIC, - "Handler for method \"%s\" is NULL", ptr->name); } - /* Found method */ + /* Known method */ return true; } } - /* Didn't find method */ + /* Unknown method */ return false; } - -/* EOF */ diff --git a/dbus/interface.h b/dbus/interface.h index 34e17d55..15961702 100644 --- a/dbus/interface.h +++ b/dbus/interface.h @@ -2,7 +2,7 @@ /* * LADI Session Handler (ladish) * - * Copyright (C) 2008 Nedko Arnaudov + * Copyright (C) 2008, 2009 Nedko Arnaudov * Copyright (C) 2008 Juuso Alasuutari * ************************************************************************** @@ -30,42 +30,36 @@ #ifndef __LASH_DBUS_INTERFACE_H__ #define __LASH_DBUS_INTERFACE_H__ -#include +typedef bool (* dbus_interface_handler)(const struct dbus_interface_descriptor *, struct dbus_method_call *); -#include "types.h" -#include "method.h" -#include "signal.h" - -struct _interface +struct dbus_interface_descriptor { - const char *name; - const interface_handler_t handler; - const method_t *methods; - const signal_t *signals; + const char * name; + dbus_interface_handler handler; + const struct dbus_method_descriptor * methods; + const struct dbus_signal_descriptor * signals; }; -bool -interface_default_handler(const interface_t *interface, - method_call_t *call); +bool dbus_interface_default_handler(const struct dbus_interface_descriptor * interface, struct dbus_method_call * call_ptr); -#define INTERFACE_BEGIN(iface_var, iface_name) \ -const struct _interface iface_var = \ -{ \ - .name = iface_name, +#define INTERFACE_BEGIN(iface_var, iface_name) \ +const struct dbus_interface_descriptor iface_var = \ +{ \ + .name = iface_name, -#define INTERFACE_DEFAULT_HANDLER \ - .handler = interface_default_handler, +#define INTERFACE_DEFAULT_HANDLER \ + .handler = dbus_interface_default_handler, -#define INTERFACE_HANDLER(handler_func) \ - .handler = handler_func, +#define INTERFACE_HANDLER(handler_func) \ + .handler = handler_func, -#define INTERFACE_EXPOSE_METHODS \ - .methods = methods_dtor, +#define INTERFACE_EXPOSE_METHODS \ + .methods = methods_dtor, -#define INTERFACE_EXPOSE_SIGNALS \ - .signals = signals_dtor, +#define INTERFACE_EXPOSE_SIGNALS \ + .signals = signals_dtor, -#define INTERFACE_END \ +#define INTERFACE_END \ }; #endif /* __LASH_DBUS_INTERFACE_H__ */ diff --git a/dbus/method.c b/dbus/method.c index 03889d52..d1808623 100644 --- a/dbus/method.c +++ b/dbus/method.c @@ -37,12 +37,12 @@ * * The operation can only fail due to lack of memory, in which case * there's no sense in trying to construct an error return. Instead, - * call->reply will be set to NULL and handled in send_method_return(). + * call_ptr->reply will be set to NULL and handled in send_method_return(). */ void -method_return_new_void(method_call_t *call) +method_return_new_void(struct dbus_method_call * call_ptr) { - if (!(call->reply = dbus_message_new_method_return(call->message))) { + if (!(call_ptr->reply = dbus_message_new_method_return(call_ptr->message))) { lash_error("Ran out of memory trying to construct method return"); } } @@ -54,21 +54,21 @@ method_return_new_void(method_call_t *call) * * The operation can only fail due to lack of memory, in which case * there's no sense in trying to construct an error return. Instead, - * call->reply will be set to NULL and handled in send_method_return(). + * call_ptr->reply will be set to NULL and handled in send_method_return(). */ void -method_return_new_single(method_call_t *call, +method_return_new_single(struct dbus_method_call * call_ptr, int type, const void *arg) { - if (!call || !arg) { + if (!call_ptr || !arg) { lash_error("Invalid arguments"); return; } - call->reply = dbus_message_new_method_return(call->message); + call_ptr->reply = dbus_message_new_method_return(call_ptr->message); - if (!call->reply) + if (!call_ptr->reply) goto fail_no_mem; /* Void method return requested by caller. */ @@ -82,24 +82,24 @@ method_return_new_single(method_call_t *call, DBusMessageIter iter; - dbus_message_iter_init_append(call->reply, &iter); + dbus_message_iter_init_append(call_ptr->reply, &iter); if (dbus_message_iter_append_basic(&iter, type, arg)) return; - dbus_message_unref(call->reply); - call->reply = NULL; + dbus_message_unref(call_ptr->reply); + call_ptr->reply = NULL; fail_no_mem: lash_error("Ran out of memory trying to construct method return"); } void -method_return_new_valist(method_call_t *call, +method_return_new_valist(struct dbus_method_call * call_ptr, int type, ...) { - if (!call) { + if (!call_ptr) { lash_error("Call pointer is NULL"); return; } @@ -111,21 +111,21 @@ method_return_new_valist(method_call_t *call, va_list argp; - call->reply = dbus_message_new_method_return(call->message); - if (!call->reply) + call_ptr->reply = dbus_message_new_method_return(call_ptr->message); + if (!call_ptr->reply) goto fail_no_mem; va_start(argp, type); - if (dbus_message_append_args_valist(call->reply, type, argp)) { + if (dbus_message_append_args_valist(call_ptr->reply, type, argp)) { va_end(argp); return; } va_end(argp); - dbus_message_unref(call->reply); - call->reply = NULL; + dbus_message_unref(call_ptr->reply); + call_ptr->reply = NULL; fail_no_mem: lash_error("Ran out of memory trying to construct method return"); @@ -134,26 +134,26 @@ fail_no_mem: /* * Send a method return. * - * If call->reply is NULL, i.e. a previous attempt to construct + * If call_ptr->reply is NULL, i.e. a previous attempt to construct * a return has failed, attempt to send a void return. */ void -method_return_send(method_call_t *call) +method_return_send(struct dbus_method_call * call_ptr) { - if (call->reply) { + if (call_ptr->reply) { retry_send: - if (!dbus_connection_send(call->connection, call->reply, NULL)) + if (!dbus_connection_send(call_ptr->connection, call_ptr->reply, NULL)) lash_error("Ran out of memory trying to queue " "method return"); else - dbus_connection_flush(call->connection); + dbus_connection_flush(call_ptr->connection); - dbus_message_unref(call->reply); - call->reply = NULL; + dbus_message_unref(call_ptr->reply); + call_ptr->reply = NULL; } else { lash_debug("Message was NULL, trying to construct a void return"); - if ((call->reply = dbus_message_new_method_return(call->message))) { + if ((call_ptr->reply = dbus_message_new_method_return(call_ptr->message))) { lash_debug("Constructed a void return, trying to queue it"); goto retry_send; } else { diff --git a/dbus/method.h b/dbus/method.h index d1a61ba7..bc92ce59 100644 --- a/dbus/method.h +++ b/dbus/method.h @@ -30,89 +30,44 @@ #ifndef __LASH_DBUS_METHOD_H__ #define __LASH_DBUS_METHOD_H__ -#include -#include - -#include "types.h" - -struct _method_msg +struct dbus_method_call { - const service_t *service; - DBusMessage *message; - void *context; - DBusFreeFunction context_free_func; - DBusPendingCallNotifyFunction return_handler; + DBusConnection * connection; + const char * method_name; + DBusMessage * message; + DBusMessage * reply; + const struct dbus_interface_descriptor * iface; + void * iface_context; }; -struct _method_call +struct dbus_method_arg_descriptor { - DBusConnection *connection; - const char *method_name; - DBusMessage *message; - DBusMessage *reply; - const interface_t *interface; - void *context; -}; - -struct _method_arg -{ - const char *name; - const char *type; + const char * name; + const char * type; const bool direction_in; /* false == out, true == in */ }; -struct _method +typedef void (* dbus_method_handler)(struct dbus_method_call * call_ptr); + +struct dbus_method_descriptor { - const char *name; - const method_handler_t handler; - const method_arg_t *args; + const char * name; + const dbus_method_handler handler; + const struct dbus_method_arg_descriptor * args; }; -void -method_return_new_void(method_call_t *call); +void method_return_new_void(struct dbus_method_call * call_ptr); +void method_return_new_single(struct dbus_method_call * call_ptr, int type, const void * arg); +void method_return_new_valist(struct dbus_method_call * call_ptr, int type, ...); +bool method_return_verify(DBusMessage * msg, const char ** str); +bool method_iter_append_variant(DBusMessageIter *iter, int type, const void * arg); +bool method_iter_append_dict_entry(DBusMessageIter *iter, int type, const char * key, const void * value, int length); +void method_return_send(struct dbus_method_call * call_ptr); +void method_default_handler(DBusPendingCall * pending, void * data); +bool method_iter_get_dict_entry(DBusMessageIter * iter, const char ** key_ptr, void * value_ptr, int * type_ptr, int * size_ptr); -void -method_return_new_single(method_call_t *call, - int type, - const void *arg); - -void -method_return_new_valist(method_call_t *call, - int type, - ...); - -bool -method_return_verify(DBusMessage *msg, - const char **str); - -bool -method_iter_append_variant(DBusMessageIter *iter, - int type, - const void *arg); - -bool -method_iter_append_dict_entry(DBusMessageIter *iter, - int type, - const char *key, - const void *value, - int length); - -void -method_return_send(method_call_t *call); - -void -method_default_handler(DBusPendingCall *pending, - void *data); - -bool -method_iter_get_dict_entry(DBusMessageIter *iter, - const char **key_ptr, - void *value_ptr, - int *type_ptr, - int *size_ptr); - -#define METHOD_ARGS_BEGIN(method_name, descr) \ -static const struct _method_arg method_name ## _args_dtor[] = \ +#define METHOD_ARGS_BEGIN(method_name, descr) \ +static const struct dbus_method_arg_descriptor method_name ## _args_dtor[] = \ { #define METHOD_ARG_DESCRIBE_IN(arg_name, arg_type, descr) \ @@ -136,7 +91,7 @@ static const struct _method_arg method_name ## _args_dtor[] = \ }; #define METHODS_BEGIN \ -static const struct _method methods_dtor[] = \ +static const struct dbus_method_descriptor methods_dtor[] = \ { #define METHOD_DESCRIBE(method_name, handler_name) \ diff --git a/dbus/object_path.c b/dbus/object_path.c index 53d69da1..92902daa 100644 --- a/dbus/object_path.c +++ b/dbus/object_path.c @@ -28,13 +28,13 @@ */ #include "../common.h" -#include "object_path.h" +#include "helpers.h" #include "../common/safety.h" #include "error.h" /* lash_dbus_error() */ struct dbus_object_path_interface { - const interface_t * iface; + const struct dbus_interface_descriptor * iface; void * iface_context; }; @@ -52,10 +52,10 @@ introspection_new(struct dbus_object_path * opath_ptr) { char *xml_data, *buf_ptr; const struct dbus_object_path_interface * iface_ptr; - const method_t * method_ptr; - const method_arg_t * method_arg_ptr; - const signal_t * signal_ptr; - const signal_arg_t * signal_arg_ptr; + const struct dbus_method_descriptor * method_ptr; + const struct dbus_method_arg_descriptor * method_arg_ptr; + const struct dbus_signal_descriptor * signal_ptr; + const struct dbus_signal_arg_descriptor * signal_arg_ptr; DBusMessage * msg; DBusMessageIter iter; @@ -150,7 +150,7 @@ introspection_destroy(struct dbus_object_path *path) #endif } -static bool introspection_handler(const interface_t * interface, method_call_t * call_ptr) +static bool introspection_handler(const struct dbus_interface_descriptor * interface, struct dbus_method_call * call_ptr) { if (strcmp(call_ptr->method_name, "Introspect") != 0) { @@ -159,7 +159,7 @@ static bool introspection_handler(const interface_t * interface, method_call_t * } /* Try to construct the instrospection message */ - call_ptr->reply = dbus_message_copy(call_ptr->context); /* context contains the reply message */ + call_ptr->reply = dbus_message_copy(call_ptr->iface_context); /* context contains the reply message */ if (call_ptr->reply == NULL) { lash_error("Ran out of memory trying to copy introspection message"); @@ -204,13 +204,11 @@ INTERFACE_BEGIN(g_dbus_interface_dtor_introspectable, "org.freedesktop.DBus.Intr INTERFACE_EXPOSE_METHODS INTERFACE_END -extern const interface_t g_dbus_interface_dtor_introspectable; - -dbus_object_path dbus_object_path_new(const char *name, const interface_t * iface1_ptr, ...) +dbus_object_path dbus_object_path_new(const char *name, const struct dbus_interface_descriptor * iface1_ptr, ...) { struct dbus_object_path * opath_ptr; va_list ap; - const interface_t * iface_src_ptr; + const struct dbus_interface_descriptor * iface_src_ptr; struct dbus_object_path_interface * iface_dst_ptr; void * iface_context; size_t len; @@ -237,7 +235,7 @@ dbus_object_path dbus_object_path_new(const char *name, const interface_t * ifac while (iface_src_ptr != NULL) { iface_context = va_arg(ap, void *); - iface_src_ptr = va_arg(ap, const interface_t *); + iface_src_ptr = va_arg(ap, const struct dbus_interface_descriptor *); len++; } va_end(ap); @@ -256,7 +254,7 @@ dbus_object_path dbus_object_path_new(const char *name, const interface_t * ifac { iface_dst_ptr->iface = iface_src_ptr; iface_dst_ptr->iface_context = va_arg(ap, void *); - iface_src_ptr = va_arg(ap, const interface_t *); + iface_src_ptr = va_arg(ap, const struct dbus_interface_descriptor *); iface_dst_ptr++; len--; } @@ -310,7 +308,7 @@ static DBusHandlerResult dbus_object_path_handler(DBusConnection * connection, D { const char * iface_name; const struct dbus_object_path_interface * iface_ptr; - method_call_t call; + struct dbus_method_call call; /* Check if the message is a method call. If not, ignore it. */ if (dbus_message_get_type(message) != DBUS_MESSAGE_TYPE_METHOD_CALL) @@ -329,7 +327,7 @@ static DBusHandlerResult dbus_object_path_handler(DBusConnection * connection, D /* Initialize our data. */ call.connection = connection; call.message = message; - call.interface = NULL; /* To be set by the default interface handler */ + call.iface = NULL; /* To be set by the default interface handler */ call.reply = NULL; /* Check if there's an interface specified for this method call. */ @@ -340,7 +338,7 @@ static DBusHandlerResult dbus_object_path_handler(DBusConnection * connection, D { if (strcmp(iface_name, iface_ptr->iface->name) == 0) { - call.context = iface_ptr->iface_context; + call.iface_context = iface_ptr->iface_context; if (!iface_ptr->iface->handler(iface_ptr->iface, &call)) { /* unknown method */ @@ -363,7 +361,7 @@ static DBusHandlerResult dbus_object_path_handler(DBusConnection * connection, D */ for (iface_ptr = opath_ptr->ifaces; iface_ptr->iface != NULL; iface_ptr++) { - call.context = iface_ptr->iface_context; + call.iface_context = iface_ptr->iface_context; if (!iface_ptr->iface->handler(iface_ptr->iface, &call)) { /* known method */ diff --git a/dbus/object_path.h b/dbus/object_path.h index 19e74100..a23903a3 100644 --- a/dbus/object_path.h +++ b/dbus/object_path.h @@ -30,14 +30,9 @@ #ifndef __LASH_DBUS_OBJECT_PATH_H__ #define __LASH_DBUS_OBJECT_PATH_H__ -#include - -#include "types.h" -#include "interface.h" - typedef struct dbus_object_path_tag { int unused; } * dbus_object_path; -dbus_object_path dbus_object_path_new(const char * name, const interface_t * iface, ...); +dbus_object_path dbus_object_path_new(const char * name, const struct dbus_interface_descriptor * iface, ...); bool dbus_object_path_register(DBusConnection * connection_ptr, dbus_object_path opath); void dbus_object_path_destroy(DBusConnection * connection_ptr, dbus_object_path opath); diff --git a/dbus/signal.c b/dbus/signal.c index 67368e1d..653ff6aa 100644 --- a/dbus/signal.c +++ b/dbus/signal.c @@ -29,10 +29,23 @@ #include "../common.h" #include -#include "signal.h" +#include "helpers.h" -static void -signal_send(signal_msg_t *signal); +struct dbus_signal_msg +{ + DBusConnection * connection; + DBusMessage * message; +}; + +static void signal_send(struct dbus_signal_msg * signal) +{ + if (!dbus_connection_send(signal->connection, signal->message, NULL)) + { + lash_error("Ran out of memory trying to queue signal"); + } + + dbus_connection_flush(signal->connection); +} void signal_new_single( @@ -43,7 +56,7 @@ signal_new_single( int type, const void * arg) { - signal_msg_t signal; + struct dbus_signal_msg signal; DBusMessageIter iter; lash_debug("Sending signal %s.%s from %s", interface, name, path); @@ -75,7 +88,7 @@ signal_new_valist( int type, ...) { - signal_msg_t signal; + struct dbus_signal_msg signal; va_list argp; lash_debug("Sending signal %s.%s from %s", interface, name, path); @@ -98,15 +111,3 @@ signal_new_valist( lash_error("Ran out of memory trying to create new signal"); } - -static void -signal_send(signal_msg_t *signal) -{ - if (!dbus_connection_send(signal->connection, signal->message, NULL)) { - lash_error("Ran out of memory trying to queue signal"); - } - - dbus_connection_flush(signal->connection); -} - -/* EOF */ diff --git a/dbus/signal.h b/dbus/signal.h index 9458a4ea..09744ac3 100644 --- a/dbus/signal.h +++ b/dbus/signal.h @@ -30,26 +30,16 @@ #ifndef __LASH_DBUS_SIGNAL_H__ #define __LASH_DBUS_SIGNAL_H__ -#include - -#include "types.h" - -struct _signal_msg +struct dbus_signal_arg_descriptor { - DBusConnection *connection; - DBusMessage *message; + const char * name; + const char * type; }; -struct _signal_arg +struct dbus_signal_descriptor { - const char *name; - const char *type; -}; - -struct _signal -{ - const char *name; - const signal_arg_t *args; + const char * name; + const struct dbus_signal_arg_descriptor * args; }; void @@ -70,8 +60,8 @@ signal_new_valist( int type, ...); -#define SIGNAL_ARGS_BEGIN(signal_name, descr) \ -static const struct _signal_arg signal_name ## _args_dtor[] = \ +#define SIGNAL_ARGS_BEGIN(signal_name, descr) \ +static const struct dbus_signal_arg_descriptor signal_name ## _args_dtor[] = \ { #define SIGNAL_ARG_DESCRIBE(arg_name, arg_type, descr) \ @@ -88,7 +78,7 @@ static const struct _signal_arg signal_name ## _args_dtor[] = \ }; #define SIGNALS_BEGIN \ -static const struct _signal signals_dtor[] = \ +static const struct dbus_signal_descriptor signals_dtor[] = \ { #define SIGNAL_DESCRIBE(signal_name) \ diff --git a/dbus/types.h b/dbus/types.h deleted file mode 100644 index 1e35a11f..00000000 --- a/dbus/types.h +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C ; c-basic-offset: 2 -*- */ -/* - * LADI Session Handler (ladish) - * - * Copyright (C) 2009 Nedko Arnaudov - * Copyright (C) 2008 Juuso Alasuutari - * - ************************************************************************** - * This file contains typdefs for internal structs (obsolete) - ************************************************************************** - * - * Licensed under the Academic Free License version 2.1 - * - * LADI Session Handler is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * LADI Session Handler is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LADI Session Handler. If not, see - * or write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef __LASH_DBUS_TYPES_H__ -#define __LASH_DBUS_TYPES_H__ - -#include - -/* signal types */ -typedef struct _signal_msg signal_msg_t; -typedef struct _signal_arg signal_arg_t; -typedef struct _signal signal_t; - -/* method types */ -typedef struct _method_msg method_msg_t; -typedef struct _method_call method_call_t; -typedef struct _method_arg method_arg_t; -typedef struct _method method_t; -typedef void (*method_handler_t) (method_call_t *call); - -/* interface types */ -typedef struct _interface interface_t; -typedef bool (*interface_handler_t) (const interface_t *, method_call_t *); - -/* service types */ -typedef struct _service service_t; - -#endif /* __LASH_DBUS_TYPES_H__ */ diff --git a/jack_proxy.c b/jack_proxy.c index dd38ee5b..38b8d2cb 100644 --- a/jack_proxy.c +++ b/jack_proxy.c @@ -26,14 +26,11 @@ //#define LASH_DEBUG -#include - #include "common.h" #include "jack_proxy.h" #include "dbus/helpers.h" #include "common/debug.h" #include "dbus_constants.h" -#include "dbus/method.h" jack_proxy_callback_server_started g_on_server_started; jack_proxy_callback_server_stopped g_on_server_stopped;