#define NUMBER_OF_FLAGS 10
-GDBusConnection *g_conn;
-guint owner_id;
-guint manager_id;
+static GDBusConnection *g_conn;
+static guint owner_id;
+static guint manager_id;
static gboolean new_service = FALSE;
static gboolean new_char = FALSE;
static int serv_id = 1;
static bool is_server_started = false;
-GCancellable *register_cancel;
+static GCancellable *register_cancel;
/* Introspection data for the service we are exporting */
static const gchar service_introspection_xml[] =
g_io_channel_shutdown(gio, TRUE, NULL);
g_io_channel_unref(gio);
- gatt_characteristic_server_notify_list = g_slist_remove(gatt_characteristic_server_notify_list, chr_info);
- bluetooth_characteristic_info_free(chr_info);
+ if (g_slist_find(gatt_characteristic_server_notify_list, chr_info)) {
+ BT_INFO("found char_info in the list");
+ gatt_characteristic_server_notify_list = g_slist_remove(gatt_characteristic_server_notify_list, chr_info);
+ bluetooth_characteristic_info_free(chr_info);
+ }
+
+ return FALSE;
+ }
+ if (g_slist_find(gatt_characteristic_server_notify_list, chr_info) == NULL) {
+ BT_INFO("chr_info is not in the list");
return FALSE;
}
if (err != NULL) {
BT_ERR("D-Bus API failure: errCode[%x], message[%s]",
err->code, err->message);
+ if (err->code == G_DBUS_ERROR_SERVICE_UNKNOWN ||
+ g_strrstr(err->message, BT_ERROR_DOES_NOT_EXIST)) {
+ g_clear_error(&err);
+ goto done;
+ }
g_clear_error(&err);
}
return BLUETOOTH_ERROR_INTERNAL;
}
g_variant_unref(ret);
+done:
is_server_started = false;
BT_INFO("UnregisterApplication is completed");
int result;
char uuid[BT_GATT_ATT_UUID_LEN_MAX + 1];
- int flag_count = 0;
- char *char_flags[NUMBER_OF_FLAGS];
g_strlcpy(uuid, char_uuid, sizeof(uuid));
- flag_count = bluetooth_gatt_convert_prop2string(param->properties, char_flags);
- BT_INFO("Flag count [%d]", flag_count);
BT_INIT_PARAMS();
BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
chr_info->write_fd = fd;
+ BT_INFO("setting up g_io channel");
channel = g_io_channel_unix_new(fd);
g_io_channel_set_encoding(channel, NULL, NULL);
g_io_channel_set_buffered(channel, FALSE);
dev_address.addr,
BLUETOOTH_ADDRESS_LENGTH);
info.handle = att_han;
+ info.notification = TRUE;
_bt_gatt_server_event_cb(BLUETOOTH_EVENT_GATT_SERVER_NOTIFICATION_STATE_CHANGED,
result, &info,
}
}
+
+void cleanup_gatt_acquire_fd(int handle)
+{
+ bluetooth_gatt_acquire_notify_info_t *chr_info = NULL;
+
+ BT_INFO("+");
+
+ chr_info = bluetooth_get_characteristic_info_from_path(handle);
+
+ if (chr_info != NULL) {
+ BT_INFO("GATT Server: acquire notification char info found");
+
+ if (chr_info->write_fd >= 0) {
+ BT_INFO("closing fd");
+ close(chr_info->write_fd);
+ }
+
+ BT_INFO("Removing char_info from the list");
+ gatt_characteristic_server_notify_list = g_slist_remove(gatt_characteristic_server_notify_list, chr_info);
+ bluetooth_characteristic_info_free(chr_info);
+ }
+}