wifi/iwd: Convert manager.known_networks to a GHashTable
This commit is contained in:

committed by
Thomas Haller

parent
2f941c0790
commit
78303e1ab8
@@ -34,8 +34,13 @@
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name;
|
const char *name;
|
||||||
NMIwdNetworkSecurity security;
|
NMIwdNetworkSecurity security;
|
||||||
|
char buf[0];
|
||||||
|
} KnownNetworkId;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GDBusProxy *known_network;
|
||||||
} KnownNetworkData;
|
} KnownNetworkData;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -45,7 +50,7 @@ typedef struct {
|
|||||||
GDBusObjectManager *object_manager;
|
GDBusObjectManager *object_manager;
|
||||||
guint agent_id;
|
guint agent_id;
|
||||||
char *agent_path;
|
char *agent_path;
|
||||||
GSList *known_networks;
|
GHashTable *known_networks;
|
||||||
} NMIwdManagerPrivate;
|
} NMIwdManagerPrivate;
|
||||||
|
|
||||||
struct _NMIwdManager {
|
struct _NMIwdManager {
|
||||||
@@ -273,6 +278,30 @@ register_agent (NMIwdManager *self)
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static guint
|
||||||
|
known_network_id_hash (KnownNetworkId *id)
|
||||||
|
{
|
||||||
|
return g_str_hash (id->name) + id->security;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
known_network_id_equal (KnownNetworkId *a, KnownNetworkId *b)
|
||||||
|
{
|
||||||
|
return g_str_equal (a->name, b->name) && a->security == b->security;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
known_network_data_free (KnownNetworkData *network)
|
||||||
|
{
|
||||||
|
if (!network)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_object_unref (network->known_network);
|
||||||
|
g_slice_free (KnownNetworkData, network);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_device_dbus_object (NMIwdManager *self, GDBusInterface *interface,
|
set_device_dbus_object (NMIwdManager *self, GDBusInterface *interface,
|
||||||
GDBusObject *object)
|
GDBusObject *object)
|
||||||
@@ -369,13 +398,6 @@ object_added (NMIwdManager *self, GDBusObject *object)
|
|||||||
g_list_free_full (interfaces, g_object_unref);
|
g_list_free_full (interfaces, g_object_unref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
known_network_free (KnownNetworkData *network)
|
|
||||||
{
|
|
||||||
g_free (network->name);
|
|
||||||
g_free (network);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void prepare_object_manager (NMIwdManager *self);
|
static void prepare_object_manager (NMIwdManager *self);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -515,16 +537,9 @@ nm_iwd_manager_is_known_network (NMIwdManager *self, const char *name,
|
|||||||
NMIwdNetworkSecurity security)
|
NMIwdNetworkSecurity security)
|
||||||
{
|
{
|
||||||
NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
|
NMIwdManagerPrivate *priv = NM_IWD_MANAGER_GET_PRIVATE (self);
|
||||||
const GSList *iter;
|
KnownNetworkId kn_id = { name, security };
|
||||||
|
|
||||||
for (iter = priv->known_networks; iter; iter = g_slist_next (iter)) {
|
return g_hash_table_contains (priv->known_networks, &kn_id);
|
||||||
const KnownNetworkData *network = iter->data;
|
|
||||||
|
|
||||||
if (!strcmp (network->name, name) && network->security == security)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -543,6 +558,10 @@ nm_iwd_manager_init (NMIwdManager *self)
|
|||||||
|
|
||||||
priv->cancellable = g_cancellable_new ();
|
priv->cancellable = g_cancellable_new ();
|
||||||
|
|
||||||
|
priv->known_networks = g_hash_table_new_full ((GHashFunc) known_network_id_hash,
|
||||||
|
(GEqualFunc) known_network_id_equal, g_free,
|
||||||
|
(GDestroyNotify) known_network_data_free);
|
||||||
|
|
||||||
prepare_object_manager (self);
|
prepare_object_manager (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,7 +593,8 @@ dispose (GObject *object)
|
|||||||
|
|
||||||
nm_clear_g_cancellable (&priv->cancellable);
|
nm_clear_g_cancellable (&priv->cancellable);
|
||||||
|
|
||||||
g_slist_free_full (priv->known_networks, (GDestroyNotify) known_network_free);
|
if (priv->known_networks)
|
||||||
|
g_hash_table_unref (priv->known_networks);
|
||||||
priv->known_networks = NULL;
|
priv->known_networks = NULL;
|
||||||
|
|
||||||
if (priv->manager) {
|
if (priv->manager) {
|
||||||
|
Reference in New Issue
Block a user