diff --git a/attrib/client.c b/attrib/client.c
index d5d40a1..2423fad 100644
--- a/attrib/client.c
+++ b/attrib/client.c
struct gatt_service {
struct btd_device *dev;
struct gatt_primary *prim;
- DBusConnection *conn;
GAttrib *attrib;
guint attioid;
int psm;
g_slist_free(gatt->offline_chars);
g_free(gatt->path);
btd_device_unref(gatt->dev);
- dbus_connection_unref(gatt->conn);
g_free(gatt);
}
DBG("%s watcher %s exited", gatt->path, watcher->name);
gatt->watchers = g_slist_remove(gatt->watchers, watcher);
- g_dbus_remove_watch(gatt->conn, watcher->id);
+ g_dbus_remove_watch(btd_get_dbus_connection(), watcher->id);
remove_attio(gatt);
}
{
struct watcher *w = data;
struct characteristic *chr = user_data;
- DBusConnection *conn = w->gatt->conn;
DBusMessage *msg;
msg = dbus_message_new_method_call(w->name, w->path,
&chr->value, chr->vlen, DBUS_TYPE_INVALID);
dbus_message_set_no_reply(msg, TRUE);
- g_dbus_send_message(conn, msg);
+ g_dbus_send_message(btd_get_dbus_connection(), msg);
}
static void events_handler(const uint8_t *pdu, uint16_t len,
reply = btd_error_failed(gatt->query->msg,
"ATT IO channel was disconnected");
- g_dbus_send_message(gatt->conn, reply);
+ g_dbus_send_message(btd_get_dbus_connection(), reply);
dbus_message_unref(gatt->query->msg);
}
watcher->name = g_strdup(sender);
watcher->gatt = gatt;
watcher->path = g_strdup(path);
- watcher->id = g_dbus_add_disconnect_watch(conn, sender, watcher_exit,
+ watcher->id = g_dbus_add_disconnect_watch(btd_get_dbus_connection(),
+ sender, watcher_exit,
watcher, watcher_free);
if (gatt->attioid == 0)
watcher = l->data;
gatt->watchers = g_slist_remove(gatt->watchers, watcher);
- g_dbus_remove_watch(conn, watcher->id);
+ g_dbus_remove_watch(btd_get_dbus_connection(), watcher->id);
remove_attio(gatt);
return dbus_message_new_method_return(msg);
}
-static DBusMessage *set_value(DBusConnection *conn, DBusMessage *msg,
+static DBusMessage *set_value(DBusMessage *msg,
DBusMessageIter *iter, struct characteristic *chr)
{
struct gatt_service *gatt = chr->gatt;
dbus_message_iter_recurse(&iter, &sub);
if (g_str_equal("Value", property))
- return set_value(conn, msg, &sub, chr);
+ return set_value(msg, &sub, chr);
return btd_error_invalid_args(msg);
}
static void register_characteristic(gpointer data, gpointer user_data)
{
struct characteristic *chr = data;
- DBusConnection *conn = chr->gatt->conn;
const char *gatt_path = user_data;
chr->path = g_strdup_printf("%s/characteristic%04x", gatt_path,
chr->handle);
- g_dbus_register_interface(conn, chr->path, CHAR_INTERFACE,
+ g_dbus_register_interface(btd_get_dbus_connection(),
+ chr->path, CHAR_INTERFACE,
char_methods, NULL, NULL, chr, NULL);
DBG("Registered: %s", chr->path);
dbus_message_unref(gatt->query->msg);
gatt->query->msg = NULL;
- g_dbus_send_message(gatt->conn, reply);
+ g_dbus_send_message(btd_get_dbus_connection(), reply);
query_list_remove(gatt, current);
g_free(current);
}
{ }
};
-static struct gatt_service *primary_register(DBusConnection *conn,
- struct btd_device *device,
+static struct gatt_service *primary_register(struct btd_device *device,
struct gatt_primary *prim,
int psm)
{
gatt->dev = btd_device_ref(device);
gatt->prim = prim;
gatt->psm = psm;
- gatt->conn = dbus_connection_ref(conn);
gatt->path = g_strdup_printf("%s/service%04x", device_path,
prim->range.start);
- g_dbus_register_interface(gatt->conn, gatt->path,
+ g_dbus_register_interface(btd_get_dbus_connection(), gatt->path,
CHAR_INTERFACE, prim_methods,
NULL, NULL, gatt, NULL);
gatt->chars = load_characteristics(gatt, prim->range.start);
return gatt;
}
-GSList *attrib_client_register(DBusConnection *connection,
- struct btd_device *device, int psm,
+GSList *attrib_client_register(struct btd_device *device, int psm,
GAttrib *attrib, GSList *primaries)
{
GSList *l, *services;
struct gatt_primary *prim = l->data;
struct gatt_service *gatt;
- gatt = primary_register(connection, device, prim, psm);
+ gatt = primary_register(device, prim, psm);
DBG("Registered: %s", gatt->path);
static void primary_unregister(struct gatt_service *gatt)
{
+ DBusConnection *conn = btd_get_dbus_connection();
GSList *l;
for (l = gatt->chars; l; l = l->next) {
struct characteristic *chr = l->data;
- g_dbus_unregister_interface(gatt->conn, chr->path,
- CHAR_INTERFACE);
+ g_dbus_unregister_interface(conn, chr->path, CHAR_INTERFACE);
}
- g_dbus_unregister_interface(gatt->conn, gatt->path, CHAR_INTERFACE);
+ g_dbus_unregister_interface(conn, gatt->path, CHAR_INTERFACE);
remove_attio(gatt);
}
diff --git a/attrib/client.h b/attrib/client.h
index 948f030..89f4f24 100644
--- a/attrib/client.h
+++ b/attrib/client.h
*
*/
-GSList *attrib_client_register(DBusConnection *connection,
- struct btd_device *device, int psm,
+GSList *attrib_client_register(struct btd_device *device, int psm,
GAttrib *attrib, GSList *primaries);
void attrib_client_unregister(GSList *services);
diff --git a/src/device.c b/src/device.c
index 5a82e02..71cc2b9 100644
--- a/src/device.c
+++ b/src/device.c
GSList *prim_list, int psm)
{
device->primaries = g_slist_concat(device->primaries, prim_list);
- device->services = attrib_client_register(btd_get_dbus_connection(),
- device, psm, NULL,
- prim_list);
+ device->services = attrib_client_register(device, psm, NULL, prim_list);
}
GSList *btd_device_get_primaries(struct btd_device *device)