diff options
-rw-r--r-- | gdbus/gdbus.h | 13 | ||||
-rw-r--r-- | gdbus/object.c | 117 | ||||
-rw-r--r-- | hcid/dbus-common.c | 104 | ||||
-rw-r--r-- | hcid/dbus-common.h | 9 | ||||
-rw-r--r-- | network/connection.c | 2 | ||||
-rw-r--r-- | network/server.c | 2 | ||||
-rw-r--r-- | serial/manager.c | 2 | ||||
-rw-r--r-- | serial/manager.h | 2 | ||||
-rw-r--r-- | serial/port.c | 3 |
9 files changed, 124 insertions, 130 deletions
diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h index ffa5cf19..eefd3734 100644 --- a/gdbus/gdbus.h +++ b/gdbus/gdbus.h @@ -40,15 +40,6 @@ gboolean g_dbus_set_disconnect_function(DBusConnection *connection, GDBusWatchFunction function, void *user_data, DBusFreeFunction destroy); -void dbus_message_iter_append_dict_entry(DBusMessageIter *dict, - const char *key, int type, void *val); - -dbus_bool_t dbus_connection_emit_property_changed(DBusConnection *conn, - const char *path, - const char *interface, - const char *name, - int type, void *value); - typedef void (* GDBusDestroyFunction) (void *user_data); typedef DBusMessage * (* GDBusMethodFunction) (DBusConnection *connection, @@ -100,10 +91,10 @@ gboolean g_dbus_unregister_interface(DBusConnection *connection, gboolean g_dbus_unregister_all_interfaces(DBusConnection *connection, const char *path); -DBusMessage *g_dbus_create_error_valist(DBusMessage *message, const char *name, - const char *format, va_list args); DBusMessage *g_dbus_create_error(DBusMessage *message, const char *name, const char *format, ...); +DBusMessage *g_dbus_create_error_valist(DBusMessage *message, const char *name, + const char *format, va_list args); DBusMessage *g_dbus_create_reply(DBusMessage *message, int type, ...); DBusMessage *g_dbus_create_reply_valist(DBusMessage *message, int type, va_list args); diff --git a/gdbus/object.c b/gdbus/object.c index 8e362be5..09a841e5 100644 --- a/gdbus/object.c +++ b/gdbus/object.c @@ -373,81 +373,6 @@ static void object_path_unref(DBusConnection *connection, const char *path) dbus_connection_unregister_object_path(connection, path); } -static void dbus_message_iter_append_variant(DBusMessageIter *iter, - int type, void *val) -{ - DBusMessageIter value; - DBusMessageIter array; - char *sig; - - switch (type) { - case DBUS_TYPE_STRING: - sig = DBUS_TYPE_STRING_AS_STRING; - break; - case DBUS_TYPE_BYTE: - sig = DBUS_TYPE_BYTE_AS_STRING; - break; - case DBUS_TYPE_INT16: - sig = DBUS_TYPE_INT16_AS_STRING; - break; - case DBUS_TYPE_UINT16: - sig = DBUS_TYPE_UINT16_AS_STRING; - break; - case DBUS_TYPE_INT32: - sig = DBUS_TYPE_INT32_AS_STRING; - break; - case DBUS_TYPE_UINT32: - sig = DBUS_TYPE_UINT32_AS_STRING; - break; - case DBUS_TYPE_BOOLEAN: - sig = DBUS_TYPE_BOOLEAN_AS_STRING; - break; - case DBUS_TYPE_ARRAY: - sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING; - break; - case DBUS_TYPE_OBJECT_PATH: - sig = DBUS_TYPE_OBJECT_PATH_AS_STRING; - break; - default: - error("Could not append variant with type %d", type); - return; - } - - dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, sig, &value); - - if (type == DBUS_TYPE_ARRAY) { - int i; - const char ***str_array = val; - - dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, - DBUS_TYPE_STRING_AS_STRING, &array); - - for (i = 0; (*str_array)[i]; i++) - dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING, - &((*str_array)[i])); - - dbus_message_iter_close_container(&value, &array); - } else - dbus_message_iter_append_basic(&value, type, val); - - dbus_message_iter_close_container(iter, &value); -} - -void dbus_message_iter_append_dict_entry(DBusMessageIter *dict, - const char *key, int type, void *val) -{ - DBusMessageIter entry; - - dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, - NULL, &entry); - - dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); - - dbus_message_iter_append_variant(&entry, type, val); - - dbus_message_iter_close_container(dict, &entry); -} - static gboolean check_signal(DBusConnection *conn, const char *path, const char *interface, const char *name, const char **args) @@ -527,48 +452,6 @@ fail: return ret; } -dbus_bool_t dbus_connection_emit_property_changed(DBusConnection *conn, - const char *path, - const char *interface, - const char *name, - int type, void *value) -{ - DBusMessage *signal; - DBusMessageIter iter; - gboolean ret; - const char *signature, *args; - - if (!check_signal(conn, path, interface, "PropertyChanged", &args)) - return FALSE; - - signal = dbus_message_new_signal(path, interface, "PropertyChanged"); - - if (!signal) { - error("Unable to allocate new %s.PropertyChanged signal", - interface); - return FALSE; - } - - dbus_message_iter_init_append(signal, &iter); - - dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name); - dbus_message_iter_append_variant(&iter, type, value); - - signature = dbus_message_get_signature(signal); - if (strcmp(args, signature) != 0) { - error("%s.%s: expected signature'%s' but got '%s'", - interface, name, args, signature); - ret = FALSE; - goto fail; - } - - ret = dbus_connection_send(conn, signal, NULL); - -fail: - dbus_message_unref(signal); - return ret; -} - gboolean g_dbus_register_interface(DBusConnection *connection, const char *path, const char *name, GDBusMethodTable *methods, diff --git a/hcid/dbus-common.c b/hcid/dbus-common.c index 1270a002..734e2100 100644 --- a/hcid/dbus-common.c +++ b/hcid/dbus-common.c @@ -337,3 +337,107 @@ int hcid_dbus_init(void) return 0; } + +static void dbus_message_iter_append_variant(DBusMessageIter *iter, + int type, void *val) +{ + DBusMessageIter value; + DBusMessageIter array; + char *sig; + + switch (type) { + case DBUS_TYPE_STRING: + sig = DBUS_TYPE_STRING_AS_STRING; + break; + case DBUS_TYPE_BYTE: + sig = DBUS_TYPE_BYTE_AS_STRING; + break; + case DBUS_TYPE_INT16: + sig = DBUS_TYPE_INT16_AS_STRING; + break; + case DBUS_TYPE_UINT16: + sig = DBUS_TYPE_UINT16_AS_STRING; + break; + case DBUS_TYPE_INT32: + sig = DBUS_TYPE_INT32_AS_STRING; + break; + case DBUS_TYPE_UINT32: + sig = DBUS_TYPE_UINT32_AS_STRING; + break; + case DBUS_TYPE_BOOLEAN: + sig = DBUS_TYPE_BOOLEAN_AS_STRING; + break; + case DBUS_TYPE_ARRAY: + sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING; + break; + case DBUS_TYPE_OBJECT_PATH: + sig = DBUS_TYPE_OBJECT_PATH_AS_STRING; + break; + default: + error("Could not append variant with type %d", type); + return; + } + + dbus_message_iter_open_container(iter, DBUS_TYPE_VARIANT, sig, &value); + + if (type == DBUS_TYPE_ARRAY) { + int i; + const char ***str_array = val; + + dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, + DBUS_TYPE_STRING_AS_STRING, &array); + + for (i = 0; (*str_array)[i]; i++) + dbus_message_iter_append_basic(&array, DBUS_TYPE_STRING, + &((*str_array)[i])); + + dbus_message_iter_close_container(&value, &array); + } else + dbus_message_iter_append_basic(&value, type, val); + + dbus_message_iter_close_container(iter, &value); +} + +void dbus_message_iter_append_dict_entry(DBusMessageIter *dict, + const char *key, int type, void *val) +{ + DBusMessageIter entry; + + dbus_message_iter_open_container(dict, DBUS_TYPE_DICT_ENTRY, + NULL, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_append_variant(&entry, type, val); + + dbus_message_iter_close_container(dict, &entry); +} + +dbus_bool_t dbus_connection_emit_property_changed(DBusConnection *conn, + const char *path, + const char *interface, + const char *name, + int type, void *value) +{ + DBusMessage *signal; + DBusMessageIter iter; + gboolean ret; + + signal = dbus_message_new_signal(path, interface, "PropertyChanged"); + + if (!signal) { + error("Unable to allocate new %s.PropertyChanged signal", + interface); + return FALSE; + } + + dbus_message_iter_init_append(signal, &iter); + + dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &name); + dbus_message_iter_append_variant(&iter, type, value); + + ret = dbus_connection_send(conn, signal, NULL); + + dbus_message_unref(signal); + return ret; +} diff --git a/hcid/dbus-common.h b/hcid/dbus-common.h index 54148f8f..26af83ee 100644 --- a/hcid/dbus-common.h +++ b/hcid/dbus-common.h @@ -37,3 +37,12 @@ int find_conn(int s, int dev_id, long arg); void hcid_dbus_exit(void); int hcid_dbus_init(void); + +void dbus_message_iter_append_dict_entry(DBusMessageIter *dict, + const char *key, int type, void *val); + +dbus_bool_t dbus_connection_emit_property_changed(DBusConnection *conn, + const char *path, + const char *interface, + const char *name, + int type, void *value); diff --git a/network/connection.c b/network/connection.c index 1ddfc4cf..d2fd85c2 100644 --- a/network/connection.c +++ b/network/connection.c @@ -42,6 +42,8 @@ #include <glib.h> #include <gdbus.h> +#include "../hcid/dbus-common.h" + #include "logging.h" #include "textfile.h" #include "glib-helper.h" diff --git a/network/server.c b/network/server.c index 4d046602..8c0a84cf 100644 --- a/network/server.c +++ b/network/server.c @@ -46,6 +46,8 @@ #include <glib.h> #include <gdbus.h> +#include "../hcid/dbus-common.h" + #include "logging.h" #include "error.h" #include "textfile.h" diff --git a/serial/manager.c b/serial/manager.c index cad09e7e..f097b330 100644 --- a/serial/manager.c +++ b/serial/manager.c @@ -51,6 +51,8 @@ #include <glib.h> #include <gdbus.h> +#include "../hcid/dbus-common.h" + #include "logging.h" #include "textfile.h" diff --git a/serial/manager.h b/serial/manager.h index 8a870101..b25c2686 100644 --- a/serial/manager.h +++ b/serial/manager.h @@ -24,8 +24,6 @@ #define SERIAL_MANAGER_PATH "/org/bluez/serial" #define SERIAL_MANAGER_INTERFACE "org.bluez.serial.Manager" -#define MAX_PATH_LENGTH 32 - int serial_manager_init(DBusConnection *conn); void serial_manager_exit(void); int rfcomm_release(int16_t id); diff --git a/serial/port.c b/serial/port.c index 522f7c01..f0563244 100644 --- a/serial/port.c +++ b/serial/port.c @@ -38,10 +38,13 @@ #include <bluetooth/bluetooth.h> #include <bluetooth/rfcomm.h> +#include <bluetooth/sdp.h> #include <glib.h> #include <gdbus.h> +#include "../hcid/dbus-common.h" + #include "logging.h" #include "error.h" |