Generate btsnoop file into log dump
[platform/core/connectivity/bluetooth-frwk.git] / bt-service-adaptation / services / obex / bt-service-obex-event-receiver.c
index 37769ff..e89832e 100644 (file)
@@ -786,6 +786,53 @@ void _bt_map_client_event_deinit(void)
        }
 }
 
+#ifdef TIZEN_FEATURE_BT_PERMANENT_LOG
+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)
+{
+       if (strcasecmp(signal_name, BT_DUMP_SERVICE_SIGNAL) == 0) {
+               gchar *path = NULL;
+               int mode = 0;
+
+               g_variant_get(parameters, "(i&s)", &mode, &path);
+               _bt_start_log_dump(path);
+       }
+
+       return;
+}
+
+static int __bt_register_dump_subscribe_signal(GDBusConnection *conn,
+               gboolean subscribe)
+{
+       if (conn == NULL)
+               return -1;
+
+       static guint subs_source_id = 0;
+
+       if (subscribe) {
+               if (subs_source_id == 0) {
+                       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 > 0) {
+                       g_dbus_connection_signal_unsubscribe(conn,
+                                       subs_source_id);
+                       subs_source_id = 0;
+               }
+       }
+       return 0;
+}
+#endif
+
 int _bt_register_manager_subscribe_signal(GDBusConnection *conn,
                int subscribe)
 {
@@ -1133,6 +1180,10 @@ static int __bt_init_manager_receiver(void)
                                BT_DEVICE_EVENT) != BLUETOOTH_ERROR_NONE)
                goto fail;
 
+#ifdef TIZEN_FEATURE_BT_PERMANENT_LOG
+       __bt_register_dump_subscribe_signal(manager_conn, TRUE);
+#endif
+
        return BLUETOOTH_ERROR_NONE;
 fail:
        if (manager_conn) {
@@ -1239,6 +1290,10 @@ void _bt_deinit_obex_event_receiver(void)
 
        _bt_unregister_service_event(obexd_conn, BT_OPP_SERVER_EVENT);
 
+#ifdef TIZEN_FEATURE_BT_PERMANENT_LOG
+       __bt_register_dump_subscribe_signal(manager_conn, FALSE);
+#endif
+
        if (manager_conn) {
                g_object_unref(manager_conn);
                manager_conn = NULL;