client: Move admin submenu
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 15 Aug 2022 23:20:31 +0000 (16:20 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:54 +0000 (14:55 +0530)
This moves admin submenu to admin.c so it is not mixed up with other
submenus code.

Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
client/admin.c
client/admin.h
client/main.c

index 6232e88..e2dbaab 100644 (file)
 #define _GNU_SOURCE
 #endif
 
+static DBusConnection *dbus_conn;
+static GList *admin_proxies;
 static GDBusProxy *set_proxy;
 static GDBusProxy *status_proxy;
 
-void admin_policy_set_set_proxy(GDBusProxy *proxy)
+static void admin_policy_set_set_proxy(GDBusProxy *proxy)
 {
        set_proxy = proxy;
 }
 
-void admin_policy_set_status_proxy(GDBusProxy *proxy)
+static void admin_policy_set_status_proxy(GDBusProxy *proxy)
 {
        status_proxy = proxy;
 }
 
-void admin_policy_read_service_allowlist(DBusConnection *dbus_conn)
+static void admin_policy_read_service_allowlist(DBusConnection *dbus_conn)
 {
        DBusMessageIter iter, subiter;
        char *uuid = NULL;
@@ -113,8 +115,7 @@ static void set_service_reply(DBusMessage *message, void *user_data)
        return bt_shell_noninteractive_quit(EXIT_FAILURE);
 }
 
-void admin_policy_set_service_allowlist(DBusConnection *dbus_connd,
-                                                       int argc, char *argv[])
+static void admin_policy_set_service_allowlist(int argc, char *argv[])
 {
        struct uuid_list_data data;
 
@@ -133,3 +134,89 @@ void admin_policy_set_service_allowlist(DBusConnection *dbus_connd,
                return bt_shell_noninteractive_quit(EXIT_FAILURE);
        }
 }
+
+static void cmd_admin_allow(int argc, char *argv[])
+{
+       if (argc <= 1) {
+               admin_policy_read_service_allowlist(dbus_conn);
+               return;
+       }
+
+       if (strcmp(argv[1], "clear") == 0)
+               argc--;
+
+       admin_policy_set_service_allowlist(argc - 1, argv + 1);
+}
+
+static const struct bt_shell_menu admin_menu = {
+       .name = "admin",
+       .desc = "Admin Policy Submenu",
+       .entries = {
+       { "allow", "[clear/uuid1 uuid2 ...]", cmd_admin_allow,
+                               "Allow service UUIDs and block rest of them"},
+       {} },
+};
+
+static void admin_policy_status_added(GDBusProxy *proxy)
+{
+       admin_proxies = g_list_append(admin_proxies, proxy);
+       admin_policy_set_status_proxy(proxy);
+}
+
+static void proxy_added(GDBusProxy *proxy, void *user_data)
+{
+       const char *interface;
+
+       interface = g_dbus_proxy_get_interface(proxy);
+
+       if (!strcmp(interface, "org.bluez.AdminPolicySet1"))
+               admin_policy_set_set_proxy(proxy);
+       else if (!strcmp(interface, "org.bluez.AdminPolicyStatus1"))
+               admin_policy_status_added(proxy);
+}
+
+static void admin_policy_status_removed(GDBusProxy *proxy)
+{
+       admin_proxies = g_list_remove(admin_proxies, proxy);
+       admin_policy_set_status_proxy(NULL);
+}
+
+static void proxy_removed(GDBusProxy *proxy, void *user_data)
+{
+       const char *interface;
+
+       interface = g_dbus_proxy_get_interface(proxy);
+
+       if (!strcmp(interface, "org.bluez.AdminPolicySet1"))
+               admin_policy_set_set_proxy(NULL);
+       else if (!strcmp(interface, "org.bluez.AdminPolicyStatus1"))
+               admin_policy_status_removed(proxy);
+}
+
+static GDBusClient *client;
+
+static void disconnect_handler(DBusConnection *connection, void *user_data)
+{
+       g_list_free_full(admin_proxies, NULL);
+       admin_proxies = NULL;
+}
+
+void admin_add_submenu(void)
+{
+       bt_shell_add_submenu(&admin_menu);
+
+       dbus_conn = bt_shell_get_env("DBUS_CONNECTION");
+       if (!dbus_conn || client)
+               return;
+
+       client = g_dbus_client_new(dbus_conn, "org.bluez", "/org/bluez");
+       g_dbus_client_set_proxy_handlers(client, proxy_added, proxy_removed,
+                                                       NULL, NULL);
+       g_dbus_client_set_disconnect_watch(client, disconnect_handler, NULL);
+}
+
+void admin_remove_submenu(void)
+{
+       g_dbus_client_unref(client);
+       client = NULL;
+}
index 1c8c215..4da83e4 100644 (file)
@@ -17,9 +17,5 @@
  *
  */
 
-void admin_policy_set_set_proxy(GDBusProxy *proxy);
-void admin_policy_set_status_proxy(GDBusProxy *proxy);
-
-void admin_policy_read_service_allowlist(DBusConnection *dbus_conn);
-void admin_policy_set_service_allowlist(DBusConnection *dbus_conn,
-                                                       int argc, char *argv[]);
+void admin_add_submenu(void);
+void admin_remove_submenu(void);
index ade45f2..30d944c 100644 (file)
@@ -56,7 +56,6 @@ static GDBusProxy *default_dev;
 static GDBusProxy *default_attr;
 static GList *ctrl_list;
 static GList *battery_proxies;
-static GList *admin_devices_proxies;
 
 static const char *agent_arguments[] = {
        "on",
@@ -562,26 +561,6 @@ static void admon_manager_added(GDBusProxy *proxy)
        adv_monitor_register_app(dbus_conn);
 }
 
-static void admin_policy_set_added(GDBusProxy *proxy)
-{
-       admin_policy_set_set_proxy(proxy);
-}
-
-static void admin_policy_status_added(GDBusProxy *proxy)
-{
-       struct adapter *adapter;
-
-       adapter = find_ctrl(ctrl_list, g_dbus_proxy_get_path(proxy));
-
-       if (!adapter) {
-               admin_devices_proxies = g_list_append(admin_devices_proxies,
-                                                                       proxy);
-               return;
-       }
-
-       admin_policy_set_status_proxy(proxy);
-}
-
 static void proxy_added(GDBusProxy *proxy, void *user_data)
 {
        const char *interface;
@@ -617,10 +596,6 @@ static void proxy_added(GDBusProxy *proxy, void *user_data)
        } else if (!strcmp(interface,
                                "org.bluez.AdvertisementMonitorManager1")) {
                admon_manager_added(proxy);
-       } else if (!strcmp(interface, "org.bluez.AdminPolicySet1")) {
-               admin_policy_set_added(proxy);
-       } else if (!strcmp(interface, "org.bluez.AdminPolicyStatus1")) {
-               admin_policy_status_added(proxy);
        }
 }
 
@@ -677,26 +652,6 @@ static void adapter_removed(GDBusProxy *proxy)
        }
 }
 
-static void admin_policy_set_removed(GDBusProxy *proxy)
-{
-       admin_policy_set_set_proxy(NULL);
-}
-
-static void admin_policy_status_removed(GDBusProxy *proxy)
-{
-       struct adapter *adapter;
-
-       adapter = find_ctrl(ctrl_list, g_dbus_proxy_get_path(proxy));
-
-       if (!adapter) {
-               admin_devices_proxies = g_list_remove(admin_devices_proxies,
-                                                                       proxy);
-               return;
-       }
-
-       admin_policy_set_status_proxy(NULL);
-}
-
 static void proxy_removed(GDBusProxy *proxy, void *user_data)
 {
        const char *interface;
@@ -737,10 +692,6 @@ static void proxy_removed(GDBusProxy *proxy, void *user_data)
        } else if (!strcmp(interface,
                        "org.bluez.AdvertisementMonitorManager1")) {
                adv_monitor_remove_manager(dbus_conn);
-       } else if (!strcmp(interface, "org.bluez.AdminPolicySet1")) {
-               admin_policy_set_removed(proxy);
-       } else if (!strcmp(interface, "org.bluez.AdminPolicyStatus1")) {
-               admin_policy_status_removed(proxy);
        }
 }
 
@@ -1775,7 +1726,6 @@ static struct GDBusProxy *find_device(int argc, char *argv[])
 static void cmd_info(int argc, char *argv[])
 {
        GDBusProxy *proxy;
-       GDBusProxy *admin_proxy;
        GDBusProxy *battery_proxy;
        DBusMessageIter iter;
        const char *address;
@@ -1825,12 +1775,8 @@ static void cmd_info(int argc, char *argv[])
 
        battery_proxy = find_proxies_by_path(battery_proxies,
                                        g_dbus_proxy_get_path(proxy));
-       admin_proxy = find_proxies_by_path(admin_devices_proxies,
-                                       g_dbus_proxy_get_path(proxy));
        print_property_with_label(battery_proxy, "Percentage",
                                        "Battery Percentage");
-       print_property_with_label(admin_proxy, "AffectedByPolicy",
-                                       "Affected by Policy");
 
        return bt_shell_noninteractive_quit(EXIT_SUCCESS);
 }
@@ -2954,22 +2900,6 @@ static void cmd_adv_monitor_get_supported_info(int argc, char *argv[])
        adv_monitor_get_supported_info();
 }
 
-static void cmd_admin_allow(int argc, char *argv[])
-{
-       if (check_default_ctrl() == FALSE)
-               return bt_shell_noninteractive_quit(EXIT_FAILURE);
-
-       if (argc <= 1) {
-               admin_policy_read_service_allowlist(dbus_conn);
-               return;
-       }
-
-       if (strcmp(argv[1], "clear") == 0)
-               argc--;
-
-       admin_policy_set_service_allowlist(dbus_conn, argc - 1, argv + 1);
-}
-
 static const struct bt_shell_menu advertise_menu = {
        .name = "advertise",
        .desc = "Advertise Options Submenu",
@@ -3124,15 +3054,6 @@ static const struct bt_shell_menu gatt_menu = {
        { } },
 };
 
-static const struct bt_shell_menu admin_menu = {
-       .name = "admin",
-       .desc = "Admin Policy Submenu",
-       .entries = {
-       { "allow", "[clear/uuid1 uuid2 ...]", cmd_admin_allow,
-                               "Allow service UUIDs and block rest of them"},
-       {} },
-};
-
 static const struct bt_shell_menu main_menu = {
        .name = "main",
        .entries = {
@@ -3231,7 +3152,6 @@ int main(int argc, char *argv[])
        bt_shell_add_submenu(&advertise_monitor_menu);
        bt_shell_add_submenu(&scan_menu);
        bt_shell_add_submenu(&gatt_menu);
-       bt_shell_add_submenu(&admin_menu);
        bt_shell_set_prompt(PROMPT_OFF);
 
        if (agent_option)
@@ -3244,6 +3164,7 @@ int main(int argc, char *argv[])
 
        bt_shell_set_env("DBUS_CONNECTION", dbus_conn);
 
+       admin_add_submenu();
        player_add_submenu();
 
        client = g_dbus_client_new(dbus_conn, "org.bluez", "/org/bluez");
@@ -3259,6 +3180,7 @@ int main(int argc, char *argv[])
 
        status = bt_shell_run();
 
+       admin_remove_submenu();
        player_remove_submenu();
 
        g_dbus_client_unref(client);