diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c index 724d66fcc..af101d9be 100644 --- a/src/platform/nm-linux-platform.c +++ b/src/platform/nm-linux-platform.c @@ -5993,14 +5993,14 @@ wifi_get_wifi_data (NMPlatform *platform, int ifindex) if (!wifi_data) { if (pllink) { if (pllink->type == NM_LINK_TYPE_WIFI) - wifi_data = nm_wifi_utils_init (ifindex, TRUE); + wifi_data = nm_wifi_utils_new (ifindex, TRUE); else if (pllink->type == NM_LINK_TYPE_OLPC_MESH) { /* The kernel driver now uses nl80211, but we force use of WEXT because * the cfg80211 interactions are not quite ready to support access to * mesh control through nl80211 just yet. */ #if HAVE_WEXT - wifi_data = nm_wifi_utils_wext_init (ifindex, FALSE); + wifi_data = nm_wifi_utils_wext_new (ifindex, FALSE); #endif } @@ -6096,7 +6096,7 @@ static NMSettingWirelessWakeOnWLan wifi_get_wake_on_wlan (NMPlatform *platform, int ifindex) { WIFI_GET_WIFI_DATA_NETNS (wifi_data, platform, ifindex, FALSE); - return wifi_utils_get_wake_on_wlan (wifi_data); + return nm_wifi_utils_get_wake_on_wlan (wifi_data); } static gboolean @@ -6104,7 +6104,7 @@ wifi_set_wake_on_wlan (NMPlatform *platform, int ifindex, NMSettingWirelessWakeOnWLan wowl) { WIFI_GET_WIFI_DATA_NETNS (wifi_data, platform, ifindex, FALSE); - return wifi_utils_set_wake_on_wlan (wifi_data, wowl); + return nm_wifi_utils_set_wake_on_wlan (wifi_data, wowl); } /*****************************************************************************/ @@ -7013,7 +7013,7 @@ nm_linux_platform_init (NMLinuxPlatform *self) priv->delayed_action.list_master_connected = g_ptr_array_new (); priv->delayed_action.list_refresh_link = g_ptr_array_new (); priv->delayed_action.list_wait_for_nl_response = g_array_new (FALSE, TRUE, sizeof (DelayedActionWaitForNlResponseData)); - priv->wifi_data = g_hash_table_new_full (nm_direct_hash, NULL, NULL, (GDestroyNotify) nm_wifi_utils_unref); + priv->wifi_data = g_hash_table_new_full (nm_direct_hash, NULL, NULL, g_object_unref); } static void diff --git a/src/platform/wifi/nm-wifi-utils-nl80211.c b/src/platform/wifi/nm-wifi-utils-nl80211.c index ed6a70afe..4965dc3fb 100644 --- a/src/platform/wifi/nm-wifi-utils-nl80211.c +++ b/src/platform/wifi/nm-wifi-utils-nl80211.c @@ -56,6 +56,12 @@ typedef struct { bool can_wowlan:1; } NMWifiUtilsNl80211; +typedef struct { + NMWifiUtilsClass parent; +} NMWifiUtilsNl80211Class; + +G_DEFINE_TYPE (NMWifiUtilsNl80211, nm_wifi_utils_nl80211, NM_TYPE_WIFI_UTILS) + static int ack_handler (struct nl_msg *msg, void *arg) { @@ -164,13 +170,15 @@ nl80211_send_and_recv (NMWifiUtilsNl80211 *nl80211, } static void -wifi_nl80211_deinit (NMWifiUtils *parent) +dispose (GObject *object) { - NMWifiUtilsNl80211 *nl80211 = (NMWifiUtilsNl80211 *) parent; + NMWifiUtilsNl80211 *nl80211 = NM_WIFI_UTILS_NL80211 (object); - if (nl80211->nl_sock) + if (nl80211->nl_sock) { nl_socket_free (nl80211->nl_sock); - g_free (nl80211->freqs); + nl80211->nl_sock = NULL; + } + g_clear_pointer (&nl80211->freqs, g_free); } struct nl80211_iface_info { @@ -312,9 +320,9 @@ nl80211_get_wake_on_wlan_handler (struct nl_msg *msg, void *arg) } static NMSettingWirelessWakeOnWLan -wifi_nl80211_get_wake_on_wlan (WifiData *data) +wifi_nl80211_get_wake_on_wlan (NMWifiUtils *data) { - WifiDataNl80211 *nl80211 = (WifiDataNl80211 *) data; + NMWifiUtilsNl80211 *nl80211 = (NMWifiUtilsNl80211 *) data; NMSettingWirelessWakeOnWLan wowl = NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE; nm_auto_nlmsg struct nl_msg *msg = NULL; @@ -326,9 +334,9 @@ wifi_nl80211_get_wake_on_wlan (WifiData *data) } static gboolean -wifi_nl80211_set_wake_on_wlan (WifiData *data, NMSettingWirelessWakeOnWLan wowl) +wifi_nl80211_set_wake_on_wlan (NMWifiUtils *data, NMSettingWirelessWakeOnWLan wowl) { - WifiDataNl80211 *nl80211 = (WifiDataNl80211 *) data; + NMWifiUtilsNl80211 *nl80211 = (NMWifiUtilsNl80211 *) data; nm_auto_nlmsg struct nl_msg *msg = NULL; struct nlattr *triggers; int err; @@ -896,24 +904,35 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg) return NL_SKIP; } -NMWifiUtils * -nm_wifi_utils_nl80211_init (int ifindex) +static void +nm_wifi_utils_nl80211_init (NMWifiUtilsNl80211 *self) +{ +} + +static void +nm_wifi_utils_nl80211_class_init (NMWifiUtilsNl80211Class *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + NMWifiUtilsClass *wifi_utils_class = NM_WIFI_UTILS_CLASS (klass); + + object_class->dispose = dispose; + + wifi_utils_class->get_mode = wifi_nl80211_get_mode; + wifi_utils_class->set_mode = wifi_nl80211_set_mode; + wifi_utils_class->set_powersave = wifi_nl80211_set_powersave; + wifi_utils_class->get_wake_on_wlan = wifi_nl80211_get_wake_on_wlan, + wifi_utils_class->set_wake_on_wlan = wifi_nl80211_set_wake_on_wlan, + wifi_utils_class->get_freq = wifi_nl80211_get_freq; + wifi_utils_class->find_freq = wifi_nl80211_find_freq; + wifi_utils_class->get_bssid = wifi_nl80211_get_bssid; + wifi_utils_class->get_rate = wifi_nl80211_get_rate; + wifi_utils_class->get_qual = wifi_nl80211_get_qual; + wifi_utils_class->indicate_addressing_running = wifi_nl80211_indicate_addressing_running; +} + +NMWifiUtils * +nm_wifi_utils_nl80211_new (int ifindex) { - static const NMWifiUtilsClass klass = { - .struct_size = sizeof (NMWifiUtilsNl80211), - .get_mode = wifi_nl80211_get_mode, - .set_mode = wifi_nl80211_set_mode, - .set_powersave = wifi_nl80211_set_powersave, - .get_wake_on_wlan = wifi_nl80211_get_wake_on_wlan, - .set_wake_on_wlan = wifi_nl80211_set_wake_on_wlan, - .get_freq = wifi_nl80211_get_freq, - .find_freq = wifi_nl80211_find_freq, - .get_bssid = wifi_nl80211_get_bssid, - .get_rate = wifi_nl80211_get_rate, - .get_qual = wifi_nl80211_get_qual, - .indicate_addressing_running = wifi_nl80211_indicate_addressing_running, - .deinit = wifi_nl80211_deinit, - }; NMWifiUtilsNl80211 *nl80211; nm_auto_nlmsg struct nl_msg *msg = NULL; struct nl80211_device_info device_info = {}; @@ -925,8 +944,9 @@ nm_wifi_utils_nl80211_init (int ifindex) nm_sprintf_buf (ifname, "if %d", ifindex); } - nl80211 = nm_wifi_utils_new (&klass, ifindex); + nl80211 = g_object_new (NM_TYPE_WIFI_UTILS_NL80211, NULL); + nl80211->parent.ifindex = ifindex; nl80211->nl_sock = nl_socket_alloc (); if (nl80211->nl_sock == NULL) goto error; @@ -999,7 +1019,6 @@ nm_wifi_utils_nl80211_init (int ifindex) return (NMWifiUtils *) nl80211; error: - nm_wifi_utils_unref ((NMWifiUtils *) nl80211); + g_object_unref (nl80211); return NULL; } - diff --git a/src/platform/wifi/nm-wifi-utils-nl80211.h b/src/platform/wifi/nm-wifi-utils-nl80211.h index 3b8c5309d..caa99b1c4 100644 --- a/src/platform/wifi/nm-wifi-utils-nl80211.h +++ b/src/platform/wifi/nm-wifi-utils-nl80211.h @@ -24,6 +24,15 @@ #include "nm-wifi-utils.h" -NMWifiUtils *nm_wifi_utils_nl80211_init (int ifindex); +#define NM_TYPE_WIFI_UTILS_NL80211 (nm_wifi_utils_nl80211_get_type ()) +#define NM_WIFI_UTILS_NL80211(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIFI_UTILS_NL80211, NMWifiUtilsNl80211)) +#define NM_WIFI_UTILS_NL80211_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WIFI_UTILS_NL80211, NMWifiUtilsNl80211Class)) +#define NM_IS_WIFI_UTILS_NL80211(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WIFI_UTILS_NL80211)) +#define NM_IS_WIFI_UTILS_NL80211_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_WIFI_UTILS_NL80211)) +#define NM_WIFI_UTILS_NL80211_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WIFI_UTILS_NL80211, NMWifiUtilsNl80211Class)) + +GType nm_wifi_utils_nl80211_get_type (void); + +NMWifiUtils *nm_wifi_utils_nl80211_new (int ifindex); #endif /* __WIFI_UTILS_NL80211_H__ */ diff --git a/src/platform/wifi/nm-wifi-utils-private.h b/src/platform/wifi/nm-wifi-utils-private.h index af529abf8..bcbc1c517 100644 --- a/src/platform/wifi/nm-wifi-utils-private.h +++ b/src/platform/wifi/nm-wifi-utils-private.h @@ -25,7 +25,7 @@ #include "nm-wifi-utils.h" typedef struct { - gsize struct_size; + GObjectClass parent; NM80211Mode (*get_mode) (NMWifiUtils *data); @@ -35,10 +35,10 @@ typedef struct { gboolean (*set_powersave) (NMWifiUtils *data, guint32 powersave); /* Get WakeOnWLAN configuration on an interface */ - NMSettingWirelessWakeOnWLan (*get_wake_on_wlan) (WifiData *data); + NMSettingWirelessWakeOnWLan (*get_wake_on_wlan) (NMWifiUtils *data); /* Set WakeOnWLAN mode on an interface */ - gboolean (*set_wake_on_wlan) (WifiData *data, NMSettingWirelessWakeOnWLan wowl); + gboolean (*set_wake_on_wlan) (NMWifiUtils *data, NMSettingWirelessWakeOnWLan wowl); /* Return current frequency in MHz (really associated BSS frequency) */ guint32 (*get_freq) (NMWifiUtils *data); @@ -56,8 +56,6 @@ typedef struct { */ int (*get_qual) (NMWifiUtils *data); - void (*deinit) (NMWifiUtils *data); - /* OLPC Mesh-only functions */ guint32 (*get_mesh_channel) (NMWifiUtils *data); @@ -72,11 +70,10 @@ typedef struct { } NMWifiUtilsClass; struct NMWifiUtils { - const NMWifiUtilsClass *klass; + GObject parent; + int ifindex; NMDeviceWifiCapabilities caps; }; -gpointer nm_wifi_utils_new (const NMWifiUtilsClass *klass, int ifindex); - #endif /* __WIFI_UTILS_PRIVATE_H__ */ diff --git a/src/platform/wifi/nm-wifi-utils-wext.c b/src/platform/wifi/nm-wifi-utils-wext.c index 1e2171ad2..8045b6d4f 100644 --- a/src/platform/wifi/nm-wifi-utils-wext.c +++ b/src/platform/wifi/nm-wifi-utils-wext.c @@ -50,6 +50,12 @@ typedef struct { guint32 freqs[IW_MAX_FREQUENCIES]; } NMWifiUtilsWext; +typedef struct { + NMWifiUtilsClass parent; +} NMWifiUtilsWextClass; + +G_DEFINE_TYPE (NMWifiUtilsWext, nm_wifi_utils_wext, NM_TYPE_WIFI_UTILS) + /* Until a new wireless-tools comes out that has the defs and the structure, * need to copy them here. */ @@ -94,11 +100,11 @@ iw_freq_to_uint32 (const struct iw_freq *freq) } static void -wifi_wext_deinit (NMWifiUtils *parent) +dispose (GObject *object) { - NMWifiUtilsWext *wext = (NMWifiUtilsWext *) parent; + NMWifiUtilsWext *wext = NM_WIFI_UTILS_WEXT (object); - nm_close (wext->fd); + wext->fd = nm_close (wext->fd); } static gboolean @@ -626,24 +632,37 @@ wext_get_caps (NMWifiUtilsWext *wext, const char *ifname, struct iw_range *range return caps; } -NMWifiUtils * -nm_wifi_utils_wext_init (int ifindex, gboolean check_scan) +/*****************************************************************************/ + +static void +nm_wifi_utils_wext_init (NMWifiUtilsWext *self) +{ +} + +static void +nm_wifi_utils_wext_class_init (NMWifiUtilsWextClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + NMWifiUtilsClass *wifi_utils_class = NM_WIFI_UTILS_CLASS (klass); + + object_class->dispose = dispose; + + wifi_utils_class->get_mode = wifi_wext_get_mode; + wifi_utils_class->set_mode = wifi_wext_set_mode; + wifi_utils_class->set_powersave = wifi_wext_set_powersave; + wifi_utils_class->get_freq = wifi_wext_get_freq; + wifi_utils_class->find_freq = wifi_wext_find_freq; + wifi_utils_class->get_bssid = wifi_wext_get_bssid; + wifi_utils_class->get_rate = wifi_wext_get_rate; + wifi_utils_class->get_qual = wifi_wext_get_qual; + wifi_utils_class->get_mesh_channel = wifi_wext_get_mesh_channel; + wifi_utils_class->set_mesh_channel = wifi_wext_set_mesh_channel; + wifi_utils_class->set_mesh_ssid = wifi_wext_set_mesh_ssid; +} + +NMWifiUtils * +nm_wifi_utils_wext_new (int ifindex, gboolean check_scan) { - static const NMWifiUtilsClass klass = { - .struct_size = sizeof (NMWifiUtilsWext), - .get_mode = wifi_wext_get_mode, - .set_mode = wifi_wext_set_mode, - .set_powersave = wifi_wext_set_powersave, - .get_freq = wifi_wext_get_freq, - .find_freq = wifi_wext_find_freq, - .get_bssid = wifi_wext_get_bssid, - .get_rate = wifi_wext_get_rate, - .get_qual = wifi_wext_get_qual, - .deinit = wifi_wext_deinit, - .get_mesh_channel = wifi_wext_get_mesh_channel, - .set_mesh_channel = wifi_wext_set_mesh_channel, - .set_mesh_ssid = wifi_wext_set_mesh_ssid, - }; NMWifiUtilsWext *wext; struct iw_range range; guint32 response_len = 0; @@ -658,8 +677,9 @@ nm_wifi_utils_wext_init (int ifindex, gboolean check_scan) return NULL; } - wext = nm_wifi_utils_new (&klass, ifindex); + wext = g_object_new (NM_TYPE_WIFI_UTILS_WEXT, NULL); + wext->parent.ifindex = ifindex; wext->fd = socket (PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); if (wext->fd < 0) goto error; @@ -734,7 +754,7 @@ nm_wifi_utils_wext_init (int ifindex, gboolean check_scan) return (NMWifiUtils *) wext; error: - nm_wifi_utils_unref ((NMWifiUtils *) wext); + g_object_unref (wext); return NULL; } diff --git a/src/platform/wifi/nm-wifi-utils-wext.h b/src/platform/wifi/nm-wifi-utils-wext.h index 2eb0a508b..44b11afb5 100644 --- a/src/platform/wifi/nm-wifi-utils-wext.h +++ b/src/platform/wifi/nm-wifi-utils-wext.h @@ -23,7 +23,16 @@ #include "nm-wifi-utils.h" -NMWifiUtils *nm_wifi_utils_wext_init (int ifindex, gboolean check_scan); +#define NM_TYPE_WIFI_UTILS_WEXT (nm_wifi_utils_wext_get_type ()) +#define NM_WIFI_UTILS_WEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIFI_UTILS_WEXT, NMWifiUtilsWext)) +#define NM_WIFI_UTILS_WEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WIFI_UTILS_WEXT, NMWifiUtilsWextClass)) +#define NM_IS_WIFI_UTILS_WEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WIFI_UTILS_WEXT)) +#define NM_IS_WIFI_UTILS_WEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_WIFI_UTILS_WEXT)) +#define NM_WIFI_UTILS_WEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WIFI_UTILS_WEXT, NMWifiUtilsWextClass)) + +GType nm_wifi_utils_wext_get_type (void); + +NMWifiUtils *nm_wifi_utils_wext_new (int ifindex, gboolean check_scan); gboolean nm_wifi_utils_wext_is_wifi (const char *iface); diff --git a/src/platform/wifi/nm-wifi-utils.c b/src/platform/wifi/nm-wifi-utils.c index 07a5b209d..be60699e4 100644 --- a/src/platform/wifi/nm-wifi-utils.c +++ b/src/platform/wifi/nm-wifi-utils.c @@ -37,35 +37,34 @@ #include "platform/nm-platform-utils.h" -gpointer -nm_wifi_utils_new (const NMWifiUtilsClass *klass, int ifindex) -{ - NMWifiUtils *data; - - nm_assert (klass); - nm_assert (klass->struct_size > sizeof (NMWifiUtils)); - - data = g_malloc0 (klass->struct_size); - data->klass = klass; - data->ifindex = ifindex; - return data; -} +G_DEFINE_ABSTRACT_TYPE (NMWifiUtils, nm_wifi_utils, G_TYPE_OBJECT) /*****************************************************************************/ +static void +nm_wifi_utils_init (NMWifiUtils *self) +{ +} + +static void +nm_wifi_utils_class_init (NMWifiUtilsClass *klass) +{ +} + NMWifiUtils * -nm_wifi_utils_init (int ifindex, gboolean check_scan) +nm_wifi_utils_new (int ifindex, gboolean check_scan) { NMWifiUtils *ret; g_return_val_if_fail (ifindex > 0, NULL); - ret = nm_wifi_utils_nl80211_init (ifindex); - if (ret == NULL) { + ret = nm_wifi_utils_nl80211_new (ifindex); + #if HAVE_WEXT - ret = nm_wifi_utils_wext_init (ifindex, check_scan); + if (ret == NULL) + ret = nm_wifi_utils_wext_new (ifindex, check_scan); #endif - } + return ret; } @@ -81,53 +80,64 @@ NM80211Mode nm_wifi_utils_get_mode (NMWifiUtils *data) { g_return_val_if_fail (data != NULL, NM_802_11_MODE_UNKNOWN); - return data->klass->get_mode (data); + return NM_WIFI_UTILS_GET_CLASS (data)->get_mode (data); } gboolean nm_wifi_utils_set_mode (NMWifiUtils *data, const NM80211Mode mode) { + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); g_return_val_if_fail ( (mode == NM_802_11_MODE_INFRA) || (mode == NM_802_11_MODE_AP) || (mode == NM_802_11_MODE_ADHOC), FALSE); + klass = NM_WIFI_UTILS_GET_CLASS (data); + /* nl80211 probably doesn't need this */ - return data->klass->set_mode ? data->klass->set_mode (data, mode) : TRUE; + return klass->set_mode ? klass->set_mode (data, mode) : TRUE; } gboolean nm_wifi_utils_set_powersave (NMWifiUtils *data, guint32 powersave) { + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); - return data->klass->set_powersave ? data->klass->set_powersave (data, powersave) : TRUE; + klass = NM_WIFI_UTILS_GET_CLASS (data); + return klass->set_powersave ? klass->set_powersave (data, powersave) : TRUE; } NMSettingWirelessWakeOnWLan -wifi_utils_get_wake_on_wlan (WifiData *data) +nm_wifi_utils_get_wake_on_wlan (NMWifiUtils *data) { - g_return_val_if_fail (data != NULL, FALSE); + NMWifiUtilsClass *klass; - return data->klass->get_wake_on_wlan - ? data->klass->get_wake_on_wlan (data) - : NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE; + g_return_val_if_fail (data != NULL, NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE); + + klass = NM_WIFI_UTILS_GET_CLASS (data); + + return klass->get_wake_on_wlan ? klass->get_wake_on_wlan (data) : NM_SETTING_WIRELESS_WAKE_ON_WLAN_IGNORE; } gboolean -wifi_utils_set_wake_on_wlan (WifiData *data, NMSettingWirelessWakeOnWLan wowl) +nm_wifi_utils_set_wake_on_wlan (NMWifiUtils *data, NMSettingWirelessWakeOnWLan wowl) { + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); - return data->klass->set_wake_on_wlan ? - data->klass->set_wake_on_wlan (data, wowl) : FALSE; + klass = NM_WIFI_UTILS_GET_CLASS (data); + return klass->set_wake_on_wlan ? klass->set_wake_on_wlan (data, wowl) : FALSE; } guint32 nm_wifi_utils_get_freq (NMWifiUtils *data) { g_return_val_if_fail (data != NULL, 0); - return data->klass->get_freq (data); + return NM_WIFI_UTILS_GET_CLASS (data)->get_freq (data); } guint32 @@ -135,7 +145,7 @@ nm_wifi_utils_find_freq (NMWifiUtils *data, const guint32 *freqs) { g_return_val_if_fail (data != NULL, 0); g_return_val_if_fail (freqs != NULL, 0); - return data->klass->find_freq (data, freqs); + return NM_WIFI_UTILS_GET_CLASS (data)->find_freq (data, freqs); } gboolean @@ -145,30 +155,21 @@ nm_wifi_utils_get_bssid (NMWifiUtils *data, guint8 *out_bssid) g_return_val_if_fail (out_bssid != NULL, FALSE); memset (out_bssid, 0, ETH_ALEN); - return data->klass->get_bssid (data, out_bssid); + return NM_WIFI_UTILS_GET_CLASS (data)->get_bssid (data, out_bssid); } guint32 nm_wifi_utils_get_rate (NMWifiUtils *data) { g_return_val_if_fail (data != NULL, 0); - return data->klass->get_rate (data); + return NM_WIFI_UTILS_GET_CLASS (data)->get_rate (data); } int nm_wifi_utils_get_qual (NMWifiUtils *data) { g_return_val_if_fail (data != NULL, 0); - return data->klass->get_qual (data); -} - -void -nm_wifi_utils_unref (NMWifiUtils *data) -{ - g_return_if_fail (data != NULL); - - data->klass->deinit (data); - g_free (data); + return NM_WIFI_UTILS_GET_CLASS (data)->get_qual (data); } gboolean @@ -190,34 +191,50 @@ nm_wifi_utils_is_wifi (int dirfd, const char *ifname) guint32 nm_wifi_utils_get_mesh_channel (NMWifiUtils *data) { + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); - g_return_val_if_fail (data->klass->get_mesh_channel != NULL, FALSE); - return data->klass->get_mesh_channel (data); + + klass = NM_WIFI_UTILS_GET_CLASS (data); + g_return_val_if_fail (klass->get_mesh_channel != NULL, FALSE); + + return klass->get_mesh_channel (data); } gboolean nm_wifi_utils_set_mesh_channel (NMWifiUtils *data, guint32 channel) { + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); g_return_val_if_fail (channel <= 13, FALSE); - g_return_val_if_fail (data->klass->set_mesh_channel != NULL, FALSE); - return data->klass->set_mesh_channel (data, channel); + + klass = NM_WIFI_UTILS_GET_CLASS (data); + g_return_val_if_fail (klass->set_mesh_channel != NULL, FALSE); + + return klass->set_mesh_channel (data, channel); } gboolean nm_wifi_utils_set_mesh_ssid (NMWifiUtils *data, const guint8 *ssid, gsize len) { + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); - g_return_val_if_fail (data->klass->set_mesh_ssid != NULL, FALSE); - return data->klass->set_mesh_ssid (data, ssid, len); + + klass = NM_WIFI_UTILS_GET_CLASS (data); + g_return_val_if_fail (klass->set_mesh_ssid != NULL, FALSE); + + return klass->set_mesh_ssid (data, ssid, len); } gboolean nm_wifi_utils_indicate_addressing_running (NMWifiUtils *data, gboolean running) { - g_return_val_if_fail (data != NULL, FALSE); - if (data->klass->indicate_addressing_running) - return data->klass->indicate_addressing_running (data, running); - return FALSE; -} + NMWifiUtilsClass *klass; + g_return_val_if_fail (data != NULL, FALSE); + + klass = NM_WIFI_UTILS_GET_CLASS (data); + return klass->indicate_addressing_running ? klass->indicate_addressing_running (data, running) : FALSE; +} diff --git a/src/platform/wifi/nm-wifi-utils.h b/src/platform/wifi/nm-wifi-utils.h index c5c655efb..f946f4b9c 100644 --- a/src/platform/wifi/nm-wifi-utils.h +++ b/src/platform/wifi/nm-wifi-utils.h @@ -29,11 +29,18 @@ typedef struct NMWifiUtils NMWifiUtils; +#define NM_TYPE_WIFI_UTILS (nm_wifi_utils_get_type ()) +#define NM_WIFI_UTILS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_WIFI_UTILS, NMWifiUtils)) +#define NM_WIFI_UTILS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_WIFI_UTILS, NMWifiUtilsClass)) +#define NM_IS_WIFI_UTILS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_WIFI_UTILS)) +#define NM_IS_WIFI_UTILS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_WIFI_UTILS)) +#define NM_WIFI_UTILS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_WIFI_UTILS, NMWifiUtilsClass)) + +GType nm_wifi_utils_get_type (void); + gboolean nm_wifi_utils_is_wifi (int dirfd, const char *ifname); -NMWifiUtils *nm_wifi_utils_init (int ifindex, gboolean check_scan); - -void nm_wifi_utils_unref (NMWifiUtils *data); +NMWifiUtils *nm_wifi_utils_new (int ifindex, gboolean check_scan); NMDeviceWifiCapabilities nm_wifi_utils_get_caps (NMWifiUtils *data); @@ -62,9 +69,9 @@ gboolean nm_wifi_utils_indicate_addressing_running (NMWifiUtils *data, gboolean gboolean nm_wifi_utils_set_powersave (NMWifiUtils *data, guint32 powersave); -NMSettingWirelessWakeOnWLan wifi_utils_get_wake_on_wlan (WifiData *data); +NMSettingWirelessWakeOnWLan nm_wifi_utils_get_wake_on_wlan (NMWifiUtils *data); -gboolean wifi_utils_set_wake_on_wlan (WifiData *data, NMSettingWirelessWakeOnWLan wowl); +gboolean nm_wifi_utils_set_wake_on_wlan (NMWifiUtils *data, NMSettingWirelessWakeOnWLan wowl); /* OLPC Mesh-only functions */ guint32 nm_wifi_utils_get_mesh_channel (NMWifiUtils *data);