+int _bt_register_network_subscribe_signal(GDBusConnection *conn,
+ int subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_serv_id = -1;
+ static int subs_client_id = -1;
+
+ if (subscribe) {
+ if (subs_serv_id == -1) {
+ subs_serv_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_NETWORK_SERVER_INTERFACE,
+ NULL, NULL, NULL, 0,
+ __bt_manager_event_filter,
+ NULL, NULL);
+ }
+ if (subs_client_id == -1) {
+ subs_client_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_NETWORK_CLIENT_INTERFACE,
+ NULL, NULL, NULL, 0,
+ __bt_manager_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_serv_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_serv_id);
+ subs_serv_id = -1;
+ }
+ if (subs_client_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_client_id);
+ subs_client_id = -1;
+ }
+ }
+ return 0;
+}
+
+int _bt_register_audio_subscribe_signal(GDBusConnection *conn,
+ int subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_headset_id = -1;
+ static int subs_sink_id = -1;
+
+ if (subscribe) {
+ if (subs_headset_id == -1) {
+ subs_headset_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_HEADSET_INTERFACE,
+ "PropertyChanged", NULL, NULL, 0,
+ __bt_manager_event_filter,
+ NULL, NULL);
+ }
+ if (subs_sink_id == -1) {
+ subs_sink_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_SINK_INTERFACE,
+ NULL, NULL, NULL, 0,
+ __bt_manager_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_headset_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_headset_id);
+ subs_headset_id = -1;
+ }
+ if (subs_sink_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_sink_id);
+ subs_sink_id = -1;
+ }
+ }
+ return 0;
+}
+
+int _bt_register_opp_server_subscribe_signal(GDBusConnection *conn,
+ int subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_opp_server_interface_added_id = -1;
+ static int subs_opp_server_interface_removed_id = -1;
+ static int subs_opp_server_property_id = -1;
+
+
+ if (subscribe) {
+ if (subs_opp_server_interface_added_id == -1) {
+ subs_opp_server_interface_added_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_MANAGER_INTERFACE,
+ BT_INTERFACES_ADDED, NULL, NULL, 0,
+ __bt_obexd_event_filter,
+ NULL, NULL);
+ }
+ if (subs_opp_server_interface_removed_id == -1) {
+ subs_opp_server_interface_removed_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_MANAGER_INTERFACE,
+ BT_INTERFACES_REMOVED, NULL, NULL, 0,
+ __bt_obexd_event_filter,
+ NULL, NULL);
+ }
+ if (subs_opp_server_property_id == -1) {
+ subs_opp_server_property_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_PROPERTIES_INTERFACE,
+ BT_PROPERTIES_CHANGED, NULL, NULL, 0,
+ __bt_obexd_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_opp_server_interface_added_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_opp_server_interface_added_id);
+ subs_opp_server_interface_added_id = -1;
+ }
+ if (subs_opp_server_interface_removed_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_opp_server_interface_removed_id);
+ subs_opp_server_interface_removed_id = -1;
+ }
+ if (subs_opp_server_property_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_opp_server_property_id);
+ subs_opp_server_property_id = -1;
+ }
+ }
+ return 0;
+}
+
+int _bt_register_opp_client_subscribe_signal(GDBusConnection *conn,
+ int subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_opp_client_interface_added_id = -1;
+ static int subs_opp_client_interface_removed_id = -1;
+ static int subs_opp_client_property_id = -1;
+
+
+ if (subscribe) {
+ if (subs_opp_client_interface_added_id == -1) {
+ subs_opp_client_interface_added_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_MANAGER_INTERFACE,
+ BT_INTERFACES_ADDED, NULL, NULL, 0,
+ __bt_opc_event_filter,
+ NULL, NULL);
+ }
+ if (subs_opp_client_interface_removed_id == -1) {
+ subs_opp_client_interface_removed_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_MANAGER_INTERFACE,
+ BT_INTERFACES_REMOVED, NULL, NULL, 0,
+ __bt_opc_event_filter,
+ NULL, NULL);
+ }
+ if (subs_opp_client_property_id == -1) {
+ subs_opp_client_property_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_PROPERTIES_INTERFACE,
+ BT_PROPERTIES_CHANGED, NULL, NULL, 0,
+ __bt_opc_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_opp_client_interface_added_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_opp_client_interface_added_id);
+ subs_opp_client_interface_added_id = -1;
+ }
+ if (subs_opp_client_interface_removed_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_opp_client_interface_removed_id);
+ subs_opp_client_interface_removed_id = -1;
+ }
+ if (subs_opp_client_property_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_opp_client_property_id);
+ subs_opp_client_property_id = -1;
+ }
+ }
+ return 0;
+}
+
+int _bt_register_a2dp_subscribe_signal(GDBusConnection *conn,
+ int subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_a2dp_source_id = -1;
+ static int subs_a2dp_sink_id = -1;
+
+ if (subscribe) {
+ if (subs_a2dp_source_id == -1) {
+ subs_a2dp_source_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_A2DP_SOURCE_INTERFACE,
+ NULL, NULL, NULL, 0,
+ __bt_opc_event_filter,
+ NULL, NULL);
+ }
+ if (subs_a2dp_sink_id == -1) {
+ subs_a2dp_sink_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_SINK_INTERFACE,
+ NULL, NULL, NULL, 0,
+ __bt_opc_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_a2dp_source_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_a2dp_source_id);
+ subs_a2dp_source_id = -1;
+ }
+ if (subs_a2dp_sink_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_a2dp_sink_id);
+ subs_a2dp_sink_id = -1;
+ }
+ }
+ return 0;
+}
+
+static void __bt_dump_event_filter(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ return;
+}
+
+int __bt_register_dump_subscribe_signal(GDBusConnection *conn,
+ gboolean subscribe)
+{
+ if (conn == NULL)
+ return -1;
+
+ static int subs_source_id = -1;
+
+ if (subscribe) {
+ if (subs_source_id == -1) {
+ subs_source_id = g_dbus_connection_signal_subscribe(conn,
+ NULL, BT_DUMP_SERVICE_INTERFACE,
+ BT_DUMP_SERVICE_SIGNAL, BT_DUMP_SERVICE_PATH, NULL, 0,
+ __bt_dump_event_filter,
+ NULL, NULL);
+ }
+ } else {
+ if (subs_source_id != -1) {
+ g_dbus_connection_signal_unsubscribe(conn,
+ subs_source_id);
+ subs_source_id = -1;
+ }
+ }
+ return 0;
+}
+
+int _bt_register_service_event(GDBusConnection *g_conn, int event_type)
+{
+ BT_DBG("+");