return 0;
}
-int __supplicant_init(void)
+int __supplicant_init(DBusConnection *conn)
{
- connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
- if (connection == NULL)
- return -EIO;
+ connection = conn;
if (dbus_connection_add_filter(connection,
supplicant_filter, NULL, NULL) == FALSE) {
void __supplicant_exit(void)
{
- if (connection == NULL)
- return;
-
dbus_connection_remove_filter(connection, supplicant_filter, NULL);
-
- dbus_connection_unref(connection);
- connection = NULL;
}
#endif
#include <string.h>
-#include <dbus/dbus.h>
+#include <gdbus.h>
#include <connman/plugin.h>
#include <connman/driver.h>
.disable = wifi_disable,
};
+static void supplicant_connect(DBusConnection *connection, void *user_data)
+{
+ DBG("connection %p", connection);
+}
+
+static void supplicant_disconnect(DBusConnection *connection, void *user_data)
+{
+ DBG("connection %p", connection);
+}
+
+static DBusConnection *connection;
+static guint watch;
+
static int wifi_init(void)
{
int err;
- err = __supplicant_init();
- if (err < 0)
+ connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
+ if (connection == NULL)
+ return -EIO;
+
+ err = __supplicant_init(connection);
+ if (err < 0) {
+ dbus_connection_unref(connection);
return err;
+ }
+
+ watch = g_dbus_add_service_watch(connection, SUPPLICANT_NAME,
+ supplicant_connect, supplicant_disconnect, NULL, NULL);
err = connman_driver_register(&network_driver);
if (err < 0) {
__supplicant_exit();
+ dbus_connection_unref(connection);
return err;
}
if (err < 0) {
connman_driver_unregister(&network_driver);
__supplicant_exit();
+ dbus_connection_unref(connection);
return err;
}
connman_driver_unregister(&network_driver);
connman_driver_unregister(&wifi_driver);
+ if (watch > 0)
+ g_dbus_remove_watch(connection, watch);
+
__supplicant_exit();
+
+ dbus_connection_unref(connection);
}
CONNMAN_PLUGIN_DEFINE("wifi", "WiFi interface plugin", VERSION,