int main(int argc, char *argv[]) { GDBusClient *client; int status; bt_shell_init(argc, argv, NULL); bt_shell_set_menu(&main_menu); bt_shell_set_prompt(PROMPT_OFF); dbus_conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL); client = g_dbus_client_new(dbus_conn, "org.bluez", "/org/bluez"); g_dbus_client_set_connect_watch(client, connect_handler, NULL); g_dbus_client_set_disconnect_watch(client, disconnect_handler, NULL); g_dbus_client_set_proxy_handlers(client, proxy_added, proxy_removed, property_changed, NULL); status = bt_shell_run(); g_dbus_client_unref(client); dbus_connection_unref(dbus_conn); return status; }
int main(int argc, char *argv[]) { GOptionContext *context; GError *error = NULL; DBusConnection *dbus_conn; GDBusClient *client; guint signal; context = g_option_context_new(NULL); g_option_context_add_main_entries(context, options, NULL); if (g_option_context_parse(context, &argc, &argv, &error) == FALSE) { if (error != NULL) { g_printerr("%s\n", error->message); g_error_free(error); } else g_printerr("An unknown error occurred\n"); exit(1); } g_option_context_free(context); if (option_version == TRUE) { g_print("%s\n", VERSION); exit(0); } main_loop = g_main_loop_new(NULL, FALSE); dbus_conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL); signal = setup_signalfd(); client = g_dbus_client_new(dbus_conn, "org.bluez", "/org/bluez"); g_dbus_client_set_connect_watch(client, connect_handler, client); g_dbus_client_set_disconnect_watch(client, disconnect_handler, NULL); g_main_loop_run(main_loop); g_dbus_client_unref(client); g_source_remove(signal); dbus_connection_unref(dbus_conn); g_main_loop_unref(main_loop); return 0; }
static void advertisement_remove(void *data) { struct advertisement *ad = data; struct mgmt_cp_remove_advertising cp; g_dbus_client_set_disconnect_watch(ad->client, NULL, NULL); cp.instance = ad->instance; mgmt_send(ad->manager->mgmt, MGMT_OP_REMOVE_ADVERTISING, ad->manager->mgmt_index, sizeof(cp), &cp, NULL, NULL, NULL); queue_remove(ad->manager->ads, ad); util_clear_uid(&ad->manager->instance_bitmap, ad->instance); g_idle_add(advertisement_free_idle_cb, ad); }
static void advertisement_free(void *data) { struct advertisement *ad = data; if (ad->client) { g_dbus_client_set_disconnect_watch(ad->client, NULL, NULL); g_dbus_client_unref(ad->client); } bt_ad_unref(ad->data); g_dbus_proxy_unref(ad->proxy); if (ad->owner) g_free(ad->owner); if (ad->path) g_free(ad->path); free(ad); }
static void add_advertising_callback(uint8_t status, uint16_t length, const void *param, void *user_data) { struct advertisement *ad = user_data; const struct mgmt_rp_add_advertising *rp = param; if (status) goto done; if (!param || length < sizeof(*rp)) { status = MGMT_STATUS_FAILED; goto done; } ad->instance = rp->instance; g_dbus_client_set_disconnect_watch(ad->client, client_disconnect_cb, ad); DBG("Advertisement registered: %s", ad->path); done: add_adverting_complete(ad, status); }