diff options
author | Dan Williams <dcbw@redhat.com> | 2008-03-24 15:17:30 +0000 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2008-03-24 15:17:30 +0000 |
commit | 007351657f84fa9cc27ab4271539984d1c395c81 (patch) | |
tree | c625ad9edf8b807390765d2ade0b6d12dff4a25e /libnm-glib/nm-access-point.c | |
parent | 1a6782962bce688df8026c1c3924009c304b1ae1 (diff) | |
download | NetworkManager-007351657f84fa9cc27ab4271539984d1c395c81.tar.gz |
2008-03-24 Dan Williams <dcbw@redhat.com>
Massive fixup of libnm-glib to:
a) have all objects (with the exception of VPN) cache their properties and
update them asynchronously on PropertiesChanged signals from NM
b) return internal const data for most attributes/properties instead of
allocated values that the caller must free
c) cache wrapped objects such that a given D-Bus path will always map to the
same GObject returned by libnm-glib
d) remove a few signals and move them to GObject property notifications
e) match recent NM D-Bus API changes for activation/deactivation
f) remove some private functions from libnm-glib headers
git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3491 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
Diffstat (limited to 'libnm-glib/nm-access-point.c')
-rw-r--r-- | libnm-glib/nm-access-point.c | 241 |
1 files changed, 69 insertions, 172 deletions
diff --git a/libnm-glib/nm-access-point.c b/libnm-glib/nm-access-point.c index 2373c95a54..691e88909d 100644 --- a/libnm-glib/nm-access-point.c +++ b/libnm-glib/nm-access-point.c @@ -6,6 +6,8 @@ #include "nm-access-point.h" #include "NetworkManager.h" +#include "nm-types-private.h" +#include "nm-object-private.h" #include "nm-access-point-bindings.h" @@ -15,7 +17,8 @@ G_DEFINE_TYPE (NMAccessPoint, nm_access_point, NM_TYPE_OBJECT) typedef struct { gboolean disposed; - DBusGProxy *ap_proxy; + DBusGProxy *proxy; + guint32 flags; guint32 wpa_flags; guint32 rsn_flags; @@ -24,7 +27,7 @@ typedef struct { char *hw_address; int mode; guint32 max_bitrate; - gint8 strength; + guint8 strength; } NMAccessPointPrivate; enum { @@ -52,22 +55,16 @@ enum { #define DBUS_PROP_MAX_BITRATE "MaxBitrate" #define DBUS_PROP_STRENGTH "Strength" -NMAccessPoint * +GObject * nm_access_point_new (DBusGConnection *connection, const char *path) { - return (NMAccessPoint *) g_object_new (NM_TYPE_ACCESS_POINT, - NM_OBJECT_CONNECTION, connection, - NM_OBJECT_PATH, path, - NULL); -} - -static void -nm_access_point_set_flags (NMAccessPoint *ap, guint32 flags) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); + g_return_val_if_fail (connection != NULL, NULL); + g_return_val_if_fail (path != NULL, NULL); - priv->flags = flags; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_FLAGS); + return (GObject *) g_object_new (NM_TYPE_ACCESS_POINT, + NM_OBJECT_DBUS_CONNECTION, connection, + NM_OBJECT_DBUS_PATH, path, + NULL); } guint32 @@ -87,15 +84,6 @@ nm_access_point_get_flags (NMAccessPoint *ap) return priv->flags; } -static void -nm_access_point_set_wpa_flags (NMAccessPoint *ap, guint32 flags) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - priv->wpa_flags = flags; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_WPA_FLAGS); -} - guint32 nm_access_point_get_wpa_flags (NMAccessPoint *ap) { @@ -113,15 +101,6 @@ nm_access_point_get_wpa_flags (NMAccessPoint *ap) return priv->wpa_flags; } -static void -nm_access_point_set_rsn_flags (NMAccessPoint *ap, guint32 flags) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - priv->rsn_flags = flags; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_RSN_FLAGS); -} - guint32 nm_access_point_get_rsn_flags (NMAccessPoint *ap) { @@ -139,25 +118,6 @@ nm_access_point_get_rsn_flags (NMAccessPoint *ap) return priv->rsn_flags; } -static void -nm_access_point_set_ssid (NMAccessPoint *ap, GArray *ssid) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - if (priv->ssid) { - g_byte_array_free (priv->ssid, TRUE); - priv->ssid = NULL; - } - - if (ssid && ssid->len > 0) { - priv->ssid = g_byte_array_sized_new (ssid->len); - priv->ssid->len = ssid->len; - memcpy (priv->ssid->data, ssid->data, ssid->len); - } - - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_SSID); -} - const GByteArray * nm_access_point_get_ssid (NMAccessPoint *ap) { @@ -175,15 +135,6 @@ nm_access_point_get_ssid (NMAccessPoint *ap) return priv->ssid; } -static void -nm_access_point_set_frequency (NMAccessPoint *ap, guint32 frequency) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - priv->frequency = frequency; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_FREQUENCY); -} - guint32 nm_access_point_get_frequency (NMAccessPoint *ap) { @@ -201,16 +152,6 @@ nm_access_point_get_frequency (NMAccessPoint *ap) return priv->frequency; } -static void -nm_access_point_set_hw_address (NMAccessPoint *ap, const char *address) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - g_free (priv->hw_address); - priv->hw_address = address ? g_strdup (address) : NULL; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_HW_ADDRESS); -} - const char * nm_access_point_get_hw_address (NMAccessPoint *ap) { @@ -228,15 +169,6 @@ nm_access_point_get_hw_address (NMAccessPoint *ap) return priv->hw_address; } -static void -nm_access_point_set_mode (NMAccessPoint *ap, int mode) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - priv->mode = mode; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_MODE); -} - int nm_access_point_get_mode (NMAccessPoint *ap) { @@ -254,15 +186,6 @@ nm_access_point_get_mode (NMAccessPoint *ap) return priv->mode; } -static void -nm_access_point_set_max_bitrate (NMAccessPoint *ap, guint32 bitrate) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - priv->max_bitrate = bitrate; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_MAX_BITRATE); -} - guint32 nm_access_point_get_max_bitrate (NMAccessPoint *ap) { @@ -280,16 +203,7 @@ nm_access_point_get_max_bitrate (NMAccessPoint *ap) return priv->max_bitrate; } -static void -nm_access_point_set_strength (NMAccessPoint *ap, gint8 strength) -{ - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); - - priv->strength = strength; - g_object_notify (G_OBJECT (ap), NM_ACCESS_POINT_STRENGTH); -} - -gint8 +guint8 nm_access_point_get_strength (NMAccessPoint *ap) { NMAccessPointPrivate *priv; @@ -325,7 +239,7 @@ dispose (GObject *object) priv->disposed = TRUE; - g_object_unref (priv->ap_proxy); + g_object_unref (priv->proxy); G_OBJECT_CLASS (nm_access_point_parent_class)->dispose (object); } @@ -345,38 +259,40 @@ finalize (GObject *object) } static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) +get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { NMAccessPoint *ap = NM_ACCESS_POINT (object); switch (prop_id) { case PROP_FLAGS: - nm_access_point_set_flags (ap, g_value_get_uint (value)); + g_value_set_uint (value, nm_access_point_get_flags (ap)); break; case PROP_WPA_FLAGS: - nm_access_point_set_wpa_flags (ap, g_value_get_uint (value)); + g_value_set_uint (value, nm_access_point_get_wpa_flags (ap)); break; case PROP_RSN_FLAGS: - nm_access_point_set_rsn_flags (ap, g_value_get_uint (value)); + g_value_set_uint (value, nm_access_point_get_rsn_flags (ap)); break; case PROP_SSID: - nm_access_point_set_ssid (ap, (GArray *) g_value_get_boxed (value)); + g_value_set_boxed (value, nm_access_point_get_ssid (ap)); break; case PROP_FREQUENCY: - nm_access_point_set_frequency (ap, g_value_get_uint (value)); + g_value_set_uint (value, nm_access_point_get_frequency (ap)); break; case PROP_HW_ADDRESS: - nm_access_point_set_hw_address (ap, g_value_get_string (value)); + g_value_set_string (value, nm_access_point_get_hw_address (ap)); break; case PROP_MODE: - nm_access_point_set_mode (ap, g_value_get_int (value)); + g_value_set_int (value, nm_access_point_get_mode (ap)); break; case PROP_MAX_BITRATE: - nm_access_point_set_max_bitrate (ap, g_value_get_uint (value)); + g_value_set_uint (value, nm_access_point_get_max_bitrate (ap)); break; case PROP_STRENGTH: - nm_access_point_set_strength (ap, g_value_get_char (value)); + g_value_set_uchar (value, nm_access_point_get_strength (ap)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -384,54 +300,36 @@ set_property (GObject *object, guint prop_id, } } -static void -get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +static gboolean +demarshal_ssid (NMObject *object, GParamSpec *pspec, GValue *value, gpointer field) { - NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (object); - GArray * ssid; - int len; - int i; + if (!nm_ssid_demarshal (value, (GByteArray **) field)) + return FALSE; - switch (prop_id) { - case PROP_FLAGS: - g_value_set_uint (value, priv->flags); - break; - case PROP_WPA_FLAGS: - g_value_set_uint (value, priv->wpa_flags); - break; - case PROP_RSN_FLAGS: - g_value_set_uint (value, priv->rsn_flags); - break; - case PROP_SSID: - len = priv->ssid ? priv->ssid->len : 0; - ssid = g_array_sized_new (FALSE, TRUE, sizeof (unsigned char), len); - for (i = 0; i < len; i++) - g_array_append_val (ssid, priv->ssid->data[i]); - g_value_set_boxed (value, ssid); - g_array_free (ssid, TRUE); - break; - case PROP_FREQUENCY: - g_value_set_uint (value, priv->frequency); - break; - case PROP_HW_ADDRESS: - g_value_set_string (value, priv->hw_address); - break; - case PROP_MODE: - g_value_set_int (value, priv->mode); - break; - case PROP_MAX_BITRATE: - g_value_set_uint (value, priv->max_bitrate); - break; - case PROP_STRENGTH: - g_value_set_char (value, priv->strength); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + g_object_notify (G_OBJECT (object), NM_ACCESS_POINT_SSID); + return TRUE; +} + +static void +register_for_property_changed (NMAccessPoint *ap) +{ + NMAccessPointPrivate *priv = NM_ACCESS_POINT_GET_PRIVATE (ap); + const NMPropertiesChangedInfo property_changed_info[] = { + { NM_ACCESS_POINT_FLAGS, nm_object_demarshal_generic, &priv->flags }, + { NM_ACCESS_POINT_WPA_FLAGS, nm_object_demarshal_generic, &priv->wpa_flags }, + { NM_ACCESS_POINT_RSN_FLAGS, nm_object_demarshal_generic, &priv->rsn_flags }, + { NM_ACCESS_POINT_SSID, demarshal_ssid, &priv->ssid }, + { NM_ACCESS_POINT_FREQUENCY, nm_object_demarshal_generic, &priv->frequency }, + { NM_ACCESS_POINT_HW_ADDRESS, nm_object_demarshal_generic, &priv->hw_address }, + { NM_ACCESS_POINT_MODE, nm_object_demarshal_generic, &priv->mode }, + { NM_ACCESS_POINT_MAX_BITRATE, nm_object_demarshal_generic, &priv->max_bitrate }, + { NM_ACCESS_POINT_STRENGTH, nm_object_demarshal_generic, &priv->strength }, + { NULL }, + }; + + nm_object_handle_properties_changed (NM_OBJECT (ap), + priv->proxy, + property_changed_info); } static GObject* @@ -450,12 +348,12 @@ constructor (GType type, priv = NM_ACCESS_POINT_GET_PRIVATE (object); - priv->ap_proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (object), + priv->proxy = dbus_g_proxy_new_for_name (nm_object_get_connection (object), NM_DBUS_SERVICE, nm_object_get_path (object), NM_DBUS_INTERFACE_ACCESS_POINT); - nm_object_handle_properties_changed (NM_OBJECT (object), priv->ap_proxy); + register_for_property_changed (NM_ACCESS_POINT (object)); return G_OBJECT (object); } @@ -470,7 +368,6 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) /* virtual methods */ object_class->constructor = constructor; - object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; @@ -484,7 +381,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) NM_802_11_AP_FLAGS_NONE, NM_802_11_AP_FLAGS_PRIVACY, NM_802_11_AP_FLAGS_NONE, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_WPA_FLAGS, @@ -492,7 +389,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) "WPA Flags", "WPA Flags", 0, G_MAXUINT32, 0, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_RSN_FLAGS, @@ -500,15 +397,15 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) "RSN Flags", "RSN Flags", 0, G_MAXUINT32, 0, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_SSID, g_param_spec_boxed (NM_ACCESS_POINT_SSID, "SSID", "SSID", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE)); + NM_TYPE_SSID, + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_FREQUENCY, @@ -516,7 +413,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) "Frequency", "Frequency", 0, 10000, 0, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_HW_ADDRESS, @@ -524,7 +421,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) "MAC Address", "Hardware MAC address", NULL, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_MODE, @@ -532,7 +429,7 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) "Mode", "Mode", IW_MODE_ADHOC, IW_MODE_INFRA, IW_MODE_INFRA, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_MAX_BITRATE, @@ -540,13 +437,13 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) "Max Bitrate", "Max Bitrate", 0, G_MAXUINT32, 0, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, PROP_STRENGTH, - g_param_spec_char (NM_ACCESS_POINT_STRENGTH, + g_param_spec_uchar (NM_ACCESS_POINT_STRENGTH, "Strength", "Strength", - G_MININT8, G_MAXINT8, 0, - G_PARAM_READWRITE)); + 0, G_MAXUINT8, 0, + G_PARAM_READABLE)); } |