diff options
author | Dan Winship <danw@gnome.org> | 2014-10-03 17:23:20 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-10-03 17:23:20 -0400 |
commit | 9bd603b4d2412e5de12990b03da967feac259e9d (patch) | |
tree | c70786c4c4a0ed28cb713ad42627a67916ec42d2 | |
parent | 3b1528417aa7072b62596344184ee0ce0519aaa4 (diff) | |
parent | a91e60902eabae1de93d61323dae6ac894b5d40f (diff) | |
download | NetworkManager-9bd603b4d2412e5de12990b03da967feac259e9d.tar.gz |
libnm: make use of GParamSpecFlags and GParamSpecEnum (bgo #737485)
35 files changed, 619 insertions, 277 deletions
diff --git a/clients/cli/settings.c b/clients/cli/settings.c index 370b9d38da..4810b75e78 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -1425,7 +1425,6 @@ DEFINE_SECRET_FLAGS_GETTER (nmc_property_pppoe_get_password_flags, NM_SETTING_PP /* --- NM_SETTING_SERIAL_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_serial_get_baud, NM_SETTING_SERIAL_BAUD) DEFINE_GETTER (nmc_property_serial_get_bits, NM_SETTING_SERIAL_BITS) -DEFINE_GETTER (nmc_property_serial_get_parity, NM_SETTING_SERIAL_PARITY) DEFINE_GETTER (nmc_property_serial_get_stopbits, NM_SETTING_SERIAL_STOPBITS) DEFINE_GETTER (nmc_property_serial_get_send_delay, NM_SETTING_SERIAL_SEND_DELAY) @@ -3680,17 +3679,33 @@ nmc_property_olpc_set_channel (NMSetting *setting, const char *prop, const char /* --- NM_SETTING_SERIAL_SETTING_NAME property setter functions --- */ +static char * +nmc_property_serial_get_parity (NMSetting *setting) +{ + NMSettingSerial *s_serial = NM_SETTING_SERIAL (setting); + + switch (nm_setting_serial_get_parity (s_serial)) { + case NM_SETTING_SERIAL_PARITY_EVEN: + return g_strdup ("even"); + case NM_SETTING_SERIAL_PARITY_ODD: + return g_strdup ("odd"); + default: + case NM_SETTING_SERIAL_PARITY_NONE: + return g_strdup ("none"); + } +} + static gboolean nmc_property_serial_set_parity (NMSetting *setting, const char *prop, const char *val, GError **error) { - char parity; + NMSettingSerialParity parity; if (val[0] == 'E' || val[0] == 'e') - parity = 'E'; + parity = NM_SETTING_SERIAL_PARITY_EVEN; else if (val[0] == 'O' || val[0] == 'o') - parity = 'o'; + parity = NM_SETTING_SERIAL_PARITY_ODD; else if (val[0] == 'N' || val[0] == 'n') - parity = 'n'; + parity = NM_SETTING_SERIAL_PARITY_NONE; else { g_set_error (error, 1, 0, _("'%s' is not valid; use [e, o, n]"), val); return FALSE; diff --git a/libnm-core/nm-setting-8021x.c b/libnm-core/nm-setting-8021x.c index 1d40f8f148..352f84ef10 100644 --- a/libnm-core/nm-setting-8021x.c +++ b/libnm-core/nm-setting-8021x.c @@ -28,6 +28,7 @@ #include "crypto.h" #include "nm-utils-private.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-8021x @@ -2917,7 +2918,7 @@ set_property (GObject *object, guint prop_id, priv->password = g_value_dup_string (value); break; case PROP_PASSWORD_FLAGS: - priv->password_flags = g_value_get_uint (value); + priv->password_flags = g_value_get_flags (value); break; case PROP_PASSWORD_RAW: if (priv->password_raw) @@ -2925,7 +2926,7 @@ set_property (GObject *object, guint prop_id, priv->password_raw = g_value_dup_boxed (value); break; case PROP_PASSWORD_RAW_FLAGS: - priv->password_raw_flags = g_value_get_uint (value); + priv->password_raw_flags = g_value_get_flags (value); break; case PROP_PRIVATE_KEY: if (priv->private_key) @@ -2942,7 +2943,7 @@ set_property (GObject *object, guint prop_id, priv->private_key_password = g_value_dup_string (value); break; case PROP_PRIVATE_KEY_PASSWORD_FLAGS: - priv->private_key_password_flags = g_value_get_uint (value); + priv->private_key_password_flags = g_value_get_flags (value); break; case PROP_PHASE2_PRIVATE_KEY: if (priv->phase2_private_key) @@ -2959,14 +2960,14 @@ set_property (GObject *object, guint prop_id, priv->phase2_private_key_password = g_value_dup_string (value); break; case PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS: - priv->phase2_private_key_password_flags = g_value_get_uint (value); + priv->phase2_private_key_password_flags = g_value_get_flags (value); break; case PROP_PIN: g_free (priv->pin); priv->pin = g_value_dup_string (value); break; case PROP_PIN_FLAGS: - priv->pin_flags = g_value_get_uint (value); + priv->pin_flags = g_value_get_flags (value); break; case PROP_SYSTEM_CA_CERTS: priv->system_ca_certs = g_value_get_boolean (value); @@ -3046,13 +3047,13 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->password); break; case PROP_PASSWORD_FLAGS: - g_value_set_uint (value, priv->password_flags); + g_value_set_flags (value, priv->password_flags); break; case PROP_PASSWORD_RAW: g_value_set_boxed (value, priv->password_raw); break; case PROP_PASSWORD_RAW_FLAGS: - g_value_set_uint (value, priv->password_raw_flags); + g_value_set_flags (value, priv->password_raw_flags); break; case PROP_PRIVATE_KEY: g_value_set_boxed (value, priv->private_key); @@ -3061,7 +3062,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->private_key_password); break; case PROP_PRIVATE_KEY_PASSWORD_FLAGS: - g_value_set_uint (value, priv->private_key_password_flags); + g_value_set_flags (value, priv->private_key_password_flags); break; case PROP_PHASE2_PRIVATE_KEY: g_value_set_boxed (value, priv->phase2_private_key); @@ -3070,13 +3071,13 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->phase2_private_key_password); break; case PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS: - g_value_set_uint (value, priv->phase2_private_key_password_flags); + g_value_set_flags (value, priv->phase2_private_key_password_flags); break; case PROP_PIN: g_value_set_string (value, priv->pin); break; case PROP_PIN_FLAGS: - g_value_set_uint (value, priv->pin_flags); + g_value_set_flags (value, priv->pin_flags); break; case PROP_SYSTEM_CA_CERTS: g_value_set_boolean (value, priv->system_ca_certs); @@ -3468,12 +3469,11 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_802_1X_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_802_1X_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSetting8021x:password-raw: @@ -3502,12 +3502,11 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PASSWORD_RAW_FLAGS, - g_param_spec_uint (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_802_1X_PASSWORD_RAW_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSetting8021x:private-key: @@ -3576,12 +3575,11 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PRIVATE_KEY_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_802_1X_PRIVATE_KEY_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSetting8021x:phase2-private-key: @@ -3645,12 +3643,11 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSetting8021x:pin: @@ -3672,12 +3669,11 @@ nm_setting_802_1x_class_init (NMSetting8021xClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PIN_FLAGS, - g_param_spec_uint (NM_SETTING_802_1X_PIN_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_802_1X_PIN_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSetting8021x:system-ca-certs: diff --git a/libnm-core/nm-setting-adsl.c b/libnm-core/nm-setting-adsl.c index 8307e209ae..26b01070ea 100644 --- a/libnm-core/nm-setting-adsl.c +++ b/libnm-core/nm-setting-adsl.c @@ -26,6 +26,7 @@ #include "nm-setting-ppp.h" #include "nm-setting-private.h" #include "nm-utils.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-adsl @@ -301,7 +302,7 @@ set_property (GObject *object, guint prop_id, priv->password = g_value_dup_string (value); break; case PROP_PASSWORD_FLAGS: - priv->password_flags = g_value_get_uint (value); + priv->password_flags = g_value_get_flags (value); break; case PROP_PROTOCOL: g_free (priv->protocol); @@ -337,7 +338,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_adsl_get_password (setting)); break; case PROP_PASSWORD_FLAGS: - g_value_set_uint (value, nm_setting_adsl_get_password_flags (setting)); + g_value_set_flags (value, nm_setting_adsl_get_password_flags (setting)); break; case PROP_PROTOCOL: g_value_set_string (value, nm_setting_adsl_get_protocol (setting)); @@ -406,12 +407,11 @@ nm_setting_adsl_class_init (NMSettingAdslClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_ADSL_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_ADSL_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingAdsl:protocol: diff --git a/libnm-core/nm-setting-cdma.c b/libnm-core/nm-setting-cdma.c index ffd266cff9..88f1954db8 100644 --- a/libnm-core/nm-setting-cdma.c +++ b/libnm-core/nm-setting-cdma.c @@ -25,6 +25,7 @@ #include "nm-setting-cdma.h" #include "nm-utils.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-cdma @@ -243,7 +244,7 @@ set_property (GObject *object, guint prop_id, priv->password = g_value_dup_string (value); break; case PROP_PASSWORD_FLAGS: - priv->password_flags = g_value_get_uint (value); + priv->password_flags = g_value_get_flags (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -268,7 +269,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_cdma_get_password (setting)); break; case PROP_PASSWORD_FLAGS: - g_value_set_uint (value, nm_setting_cdma_get_password_flags (setting)); + g_value_set_flags (value, nm_setting_cdma_get_password_flags (setting)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -343,10 +344,9 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_CDMA_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_CDMA_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); } diff --git a/libnm-core/nm-setting-dcb.c b/libnm-core/nm-setting-dcb.c index 8943db6b8f..b708098caa 100644 --- a/libnm-core/nm-setting-dcb.c +++ b/libnm-core/nm-setting-dcb.c @@ -26,6 +26,7 @@ #include "nm-utils.h" #include "nm-utils-private.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-dcb @@ -802,7 +803,7 @@ set_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_APP_FCOE_FLAGS: - priv->app_fcoe_flags = g_value_get_uint (value); + priv->app_fcoe_flags = g_value_get_flags (value); break; case PROP_APP_FCOE_PRIORITY: priv->app_fcoe_priority = g_value_get_int (value); @@ -811,25 +812,25 @@ set_property (GObject *object, guint prop_id, priv->app_fcoe_mode = g_value_dup_string (value); break; case PROP_APP_ISCSI_FLAGS: - priv->app_iscsi_flags = g_value_get_uint (value); + priv->app_iscsi_flags = g_value_get_flags (value); break; case PROP_APP_ISCSI_PRIORITY: priv->app_iscsi_priority = g_value_get_int (value); break; case PROP_APP_FIP_FLAGS: - priv->app_fip_flags = g_value_get_uint (value); + priv->app_fip_flags = g_value_get_flags (value); break; case PROP_APP_FIP_PRIORITY: priv->app_fip_priority = g_value_get_int (value); break; case PROP_PFC_FLAGS: - priv->pfc_flags = g_value_get_uint (value); + priv->pfc_flags = g_value_get_flags (value); break; case PROP_PFC: SET_ARRAY_FROM_GVALUE (value, priv->pfc); break; case PROP_PRIORITY_GROUP_FLAGS: - priv->priority_group_flags = g_value_get_uint (value); + priv->priority_group_flags = g_value_get_flags (value); break; case PROP_PRIORITY_GROUP_ID: SET_ARRAY_FROM_GVALUE (value, priv->priority_group_id); @@ -861,7 +862,7 @@ get_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_APP_FCOE_FLAGS: - g_value_set_uint (value, priv->app_fcoe_flags); + g_value_set_flags (value, priv->app_fcoe_flags); break; case PROP_APP_FCOE_PRIORITY: g_value_set_int (value, priv->app_fcoe_priority); @@ -870,25 +871,25 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->app_fcoe_mode); break; case PROP_APP_ISCSI_FLAGS: - g_value_set_uint (value, priv->app_iscsi_flags); + g_value_set_flags (value, priv->app_iscsi_flags); break; case PROP_APP_ISCSI_PRIORITY: g_value_set_int (value, priv->app_iscsi_priority); break; case PROP_APP_FIP_FLAGS: - g_value_set_uint (value, priv->app_fip_flags); + g_value_set_flags (value, priv->app_fip_flags); break; case PROP_APP_FIP_PRIORITY: g_value_set_int (value, priv->app_fip_priority); break; case PROP_PFC_FLAGS: - g_value_set_uint (value, priv->pfc_flags); + g_value_set_flags (value, priv->pfc_flags); break; case PROP_PFC: SET_GVALUE_FROM_ARRAY (value, priv->pfc); break; case PROP_PRIORITY_GROUP_FLAGS: - g_value_set_uint (value, priv->priority_group_flags); + g_value_set_flags (value, priv->priority_group_flags); break; case PROP_PRIORITY_GROUP_ID: SET_GVALUE_FROM_ARRAY (value, priv->priority_group_id); @@ -934,10 +935,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class) **/ g_object_class_install_property (object_class, PROP_APP_FCOE_FLAGS, - g_param_spec_uint (NM_SETTING_DCB_APP_FCOE_FLAGS, "", "", - 0, DCB_FLAGS_ALL, 0, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_DCB_APP_FCOE_FLAGS, "", "", + NM_TYPE_SETTING_DCB_FLAGS, + NM_SETTING_DCB_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingDcb:app-fcoe-priority: @@ -977,10 +979,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class) **/ g_object_class_install_property (object_class, PROP_APP_ISCSI_FLAGS, - g_param_spec_uint (NM_SETTING_DCB_APP_ISCSI_FLAGS, "", "", - 0, DCB_FLAGS_ALL, 0, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_DCB_APP_ISCSI_FLAGS, "", "", + NM_TYPE_SETTING_DCB_FLAGS, + NM_SETTING_DCB_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingDcb:app-iscsi-priority: @@ -1006,10 +1009,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class) **/ g_object_class_install_property (object_class, PROP_APP_FIP_FLAGS, - g_param_spec_uint (NM_SETTING_DCB_APP_FIP_FLAGS, "", "", - 0, DCB_FLAGS_ALL, 0, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_DCB_APP_FIP_FLAGS, "", "", + NM_TYPE_SETTING_DCB_FLAGS, + NM_SETTING_DCB_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingDcb:app-fip-priority: @@ -1035,10 +1039,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PFC_FLAGS, - g_param_spec_uint (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, "", "", - 0, DCB_FLAGS_ALL, 0, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_DCB_PRIORITY_FLOW_CONTROL_FLAGS, "", "", + NM_TYPE_SETTING_DCB_FLAGS, + NM_SETTING_DCB_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingDcb:priority-flow-control: @@ -1069,10 +1074,11 @@ nm_setting_dcb_class_init (NMSettingDcbClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PRIORITY_GROUP_FLAGS, - g_param_spec_uint (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, "", "", - 0, DCB_FLAGS_ALL, 0, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_DCB_PRIORITY_GROUP_FLAGS, "", "", + NM_TYPE_SETTING_DCB_FLAGS, + NM_SETTING_DCB_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingDcb:priority-group-id: diff --git a/libnm-core/nm-setting-dcb.h b/libnm-core/nm-setting-dcb.h index 1fd9df6302..ab3c6bc9d0 100644 --- a/libnm-core/nm-setting-dcb.h +++ b/libnm-core/nm-setting-dcb.h @@ -65,7 +65,7 @@ GQuark nm_setting_dcb_error_quark (void); * * DCB feature flags. **/ -typedef enum { +typedef enum { /*< flags >*/ NM_SETTING_DCB_FLAG_NONE = 0x00000000, NM_SETTING_DCB_FLAG_ENABLE = 0x00000001, NM_SETTING_DCB_FLAG_ADVERTISE = 0x00000002, diff --git a/libnm-core/nm-setting-gsm.c b/libnm-core/nm-setting-gsm.c index 3d497f7540..84ea468a9f 100644 --- a/libnm-core/nm-setting-gsm.c +++ b/libnm-core/nm-setting-gsm.c @@ -26,6 +26,7 @@ #include "nm-setting-gsm.h" #include "nm-utils.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-gsm @@ -400,7 +401,7 @@ set_property (GObject *object, guint prop_id, priv->password = g_value_dup_string (value); break; case PROP_PASSWORD_FLAGS: - priv->password_flags = g_value_get_uint (value); + priv->password_flags = g_value_get_flags (value); break; case PROP_APN: g_free (priv->apn); @@ -421,7 +422,7 @@ set_property (GObject *object, guint prop_id, priv->pin = g_value_dup_string (value); break; case PROP_PIN_FLAGS: - priv->pin_flags = g_value_get_uint (value); + priv->pin_flags = g_value_get_flags (value); break; case PROP_HOME_ONLY: priv->home_only = g_value_get_boolean (value); @@ -449,7 +450,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_gsm_get_password (setting)); break; case PROP_PASSWORD_FLAGS: - g_value_set_uint (value, nm_setting_gsm_get_password_flags (setting)); + g_value_set_flags (value, nm_setting_gsm_get_password_flags (setting)); break; case PROP_APN: g_value_set_string (value, nm_setting_gsm_get_apn (setting)); @@ -461,7 +462,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_gsm_get_pin (setting)); break; case PROP_PIN_FLAGS: - g_value_set_uint (value, nm_setting_gsm_get_pin_flags (setting)); + g_value_set_flags (value, nm_setting_gsm_get_pin_flags (setting)); break; case PROP_HOME_ONLY: g_value_set_boolean (value, nm_setting_gsm_get_home_only (setting)); @@ -540,12 +541,11 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_GSM_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_GSM_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingGsm:apn: @@ -603,12 +603,11 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PIN_FLAGS, - g_param_spec_uint (NM_SETTING_GSM_PIN_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_GSM_PIN_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingGsm:home-only: diff --git a/libnm-core/nm-setting-ip6-config.c b/libnm-core/nm-setting-ip6-config.c index 81e04dbf37..5e03e68913 100644 --- a/libnm-core/nm-setting-ip6-config.c +++ b/libnm-core/nm-setting-ip6-config.c @@ -27,6 +27,7 @@ #include "nm-utils-private.h" #include "nm-glib-compat.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-ip6-config @@ -1006,7 +1007,7 @@ set_property (GObject *object, guint prop_id, priv->may_fail = g_value_get_boolean (value); break; case PROP_IP6_PRIVACY: - priv->ip6_privacy = g_value_get_int (value); + priv->ip6_privacy = g_value_get_enum (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1052,7 +1053,7 @@ get_property (GObject *object, guint prop_id, g_value_set_boolean (value, priv->may_fail); break; case PROP_IP6_PRIVACY: - g_value_set_int (value, priv->ip6_privacy); + g_value_set_enum (value, priv->ip6_privacy); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1268,13 +1269,12 @@ nm_setting_ip6_config_class_init (NMSettingIP6ConfigClass *setting_class) **/ g_object_class_install_property (object_class, PROP_IP6_PRIVACY, - g_param_spec_int (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, "", "", - NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN, - NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR, - NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT | - G_PARAM_STATIC_STRINGS)); + g_param_spec_enum (NM_SETTING_IP6_CONFIG_IP6_PRIVACY, "", "", + NM_TYPE_SETTING_IP6_CONFIG_PRIVACY, + NM_SETTING_IP6_CONFIG_PRIVACY_UNKNOWN, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_STRINGS)); } /********************************************************************/ diff --git a/libnm-core/nm-setting-pppoe.c b/libnm-core/nm-setting-pppoe.c index 54edd3de63..dab6d942c5 100644 --- a/libnm-core/nm-setting-pppoe.c +++ b/libnm-core/nm-setting-pppoe.c @@ -26,6 +26,7 @@ #include "nm-setting-pppoe.h" #include "nm-setting-ppp.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-pppoe @@ -221,7 +222,7 @@ set_property (GObject *object, guint prop_id, priv->password = g_value_dup_string (value); break; case PROP_PASSWORD_FLAGS: - priv->password_flags = g_value_get_uint (value); + priv->password_flags = g_value_get_flags (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -246,7 +247,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_pppoe_get_password (setting)); break; case PROP_PASSWORD_FLAGS: - g_value_set_uint (value, nm_setting_pppoe_get_password_flags (setting)); + g_value_set_flags (value, nm_setting_pppoe_get_password_flags (setting)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -329,10 +330,9 @@ nm_setting_pppoe_class_init (NMSettingPppoeClass *setting_class) **/ g_object_class_install_property (object_class, PROP_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_PPPOE_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_PPPOE_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); } diff --git a/libnm-core/nm-setting-serial.c b/libnm-core/nm-setting-serial.c index 7ee2eb710b..f2651a1821 100644 --- a/libnm-core/nm-setting-serial.c +++ b/libnm-core/nm-setting-serial.c @@ -127,7 +127,7 @@ nm_setting_serial_get_bits (NMSettingSerial *setting) * * Returns: the #NMSettingSerial:parity property of the setting **/ -char +NMSettingSerialParity nm_setting_serial_get_parity (NMSettingSerial *setting) { g_return_val_if_fail (NM_IS_SETTING_SERIAL (setting), 0); @@ -174,6 +174,37 @@ nm_setting_serial_init (NMSettingSerial *setting) { } +static GVariant * +parity_to_dbus (const GValue *from) +{ + switch (g_value_get_enum (from)) { + case NM_SETTING_SERIAL_PARITY_EVEN: + return g_variant_new_byte ('E'); + case NM_SETTING_SERIAL_PARITY_ODD: + return g_variant_new_byte ('o'); + case NM_SETTING_SERIAL_PARITY_NONE: + default: + return g_variant_new_byte ('n'); + } +} + +static void +parity_from_dbus (GVariant *from, GValue *to) +{ + switch (g_variant_get_byte (from)) { + case 'E': + g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_EVEN); + break; + case 'o': + g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_ODD); + break; + case 'n': + default: + g_value_set_enum (to, NM_SETTING_SERIAL_PARITY_NONE); + break; + } +} + static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) @@ -188,7 +219,7 @@ set_property (GObject *object, guint prop_id, priv->bits = g_value_get_uint (value); break; case PROP_PARITY: - priv->parity = g_value_get_schar (value); + priv->parity = g_value_get_enum (value); break; case PROP_STOPBITS: priv->stopbits = g_value_get_uint (value); @@ -216,7 +247,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, nm_setting_serial_get_bits (setting)); break; case PROP_PARITY: - g_value_set_schar (value, nm_setting_serial_get_parity (setting)); + g_value_set_enum (value, nm_setting_serial_get_parity (setting)); break; case PROP_STOPBITS: g_value_set_uint (value, nm_setting_serial_get_stopbits (setting)); @@ -276,16 +307,21 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class) /** * NMSettingSerial:parity: * - * Parity setting of the serial port. Either 'E' for even parity, 'o' for - * odd parity, or 'n' for no parity. + * Parity setting of the serial port. **/ g_object_class_install_property (object_class, PROP_PARITY, - g_param_spec_char (NM_SETTING_SERIAL_PARITY, "", "", - 'E', 'o', 'n', + g_param_spec_enum (NM_SETTING_SERIAL_PARITY, "", "", + NM_TYPE_SETTING_SERIAL_PARITY, + NM_SETTING_SERIAL_PARITY_NONE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, + NM_SETTING_SERIAL_PARITY, + G_VARIANT_TYPE_BYTE, + parity_to_dbus, + parity_from_dbus); /** * NMSettingSerial:stopbits: diff --git a/libnm-core/nm-setting-serial.h b/libnm-core/nm-setting-serial.h index b1274a86cb..80600ff80f 100644 --- a/libnm-core/nm-setting-serial.h +++ b/libnm-core/nm-setting-serial.h @@ -59,6 +59,20 @@ typedef enum { #define NM_SETTING_SERIAL_ERROR nm_setting_serial_error_quark () GQuark nm_setting_serial_error_quark (void); +/** + * NMSettingSerialParity: + * @NM_SETTING_SERIAL_PARITY_NONE: No parity bits (default) + * @NM_SETTING_SERIAL_PARITY_EVEN: Even parity + * @NM_SETTING_SERIAL_PARITY_ODD: Odd parity + * + * The parity setting of a serial port. + */ +typedef enum { + NM_SETTING_SERIAL_PARITY_NONE = 0, + NM_SETTING_SERIAL_PARITY_EVEN, + NM_SETTING_SERIAL_PARITY_ODD +} NMSettingSerialParity; + #define NM_SETTING_SERIAL_BAUD "baud" #define NM_SETTING_SERIAL_BITS "bits" #define NM_SETTING_SERIAL_PARITY "parity" @@ -78,12 +92,12 @@ typedef struct { GType nm_setting_serial_get_type (void); -NMSetting *nm_setting_serial_new (void); -guint nm_setting_serial_get_baud (NMSettingSerial *setting); -guint nm_setting_serial_get_bits (NMSettingSerial *setting); -char nm_setting_serial_get_parity (NMSettingSerial *setting); -guint nm_setting_serial_get_stopbits (NMSettingSerial *setting); -guint64 nm_setting_serial_get_send_delay (NMSettingSerial *setting); +NMSetting *nm_setting_serial_new (void); +guint nm_setting_serial_get_baud (NMSettingSerial *setting); +guint nm_setting_serial_get_bits (NMSettingSerial *setting); +NMSettingSerialParity nm_setting_serial_get_parity (NMSettingSerial *setting); +guint nm_setting_serial_get_stopbits (NMSettingSerial *setting); +guint64 nm_setting_serial_get_send_delay (NMSettingSerial *setting); G_END_DECLS diff --git a/libnm-core/nm-setting-vlan.c b/libnm-core/nm-setting-vlan.c index e043518615..d797164f29 100644 --- a/libnm-core/nm-setting-vlan.c +++ b/libnm-core/nm-setting-vlan.c @@ -27,6 +27,7 @@ #include "nm-utils.h" #include "nm-setting-connection.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-vlan @@ -603,7 +604,7 @@ set_property (GObject *object, guint prop_id, priv->id = g_value_get_uint (value); break; case PROP_FLAGS: - priv->flags = g_value_get_uint (value); + priv->flags = g_value_get_flags (value); break; case PROP_INGRESS_PRIORITY_MAP: g_slist_free_full (priv->ingress_priority_map, g_free); @@ -654,7 +655,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, priv->id); break; case PROP_FLAGS: - g_value_set_uint (value, priv->flags); + g_value_set_flags (value, priv->flags); break; case PROP_INGRESS_PRIORITY_MAP: g_value_take_boxed (value, priority_maplist_to_strv (priv->ingress_priority_map)); @@ -740,12 +741,13 @@ nm_setting_vlan_class_init (NMSettingVlanClass *setting_class) **/ g_object_class_install_property (object_class, PROP_FLAGS, - g_param_spec_uint (NM_SETTING_VLAN_FLAGS, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_VLAN_FLAGS, "", "", + NM_TYPE_VLAN_FLAGS, + 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingVlan:ingress-priority-map: diff --git a/libnm-core/nm-setting-vlan.h b/libnm-core/nm-setting-vlan.h index c22f3235c8..0ce5efbbd2 100644 --- a/libnm-core/nm-setting-vlan.h +++ b/libnm-core/nm-setting-vlan.h @@ -101,7 +101,7 @@ typedef enum { * * #NMVlanFlags values control the behavior of the VLAN interface. **/ -typedef enum { +typedef enum { /*< flags >*/ NM_VLAN_FLAG_REORDER_HEADERS = 0x1, NM_VLAN_FLAG_GVRP = 0x2, NM_VLAN_FLAG_LOOSE_BINDING = 0x4, diff --git a/libnm-core/nm-setting-wireless-security.c b/libnm-core/nm-setting-wireless-security.c index c84d123b2d..c3e38bfc5b 100644 --- a/libnm-core/nm-setting-wireless-security.c +++ b/libnm-core/nm-setting-wireless-security.c @@ -29,6 +29,7 @@ #include "nm-utils.h" #include "nm-utils-private.h" #include "nm-setting-private.h" +#include "nm-core-enum-types.h" /** * SECTION:nm-setting-wireless-security @@ -1165,6 +1166,15 @@ finalize (GObject *object) G_OBJECT_CLASS (nm_setting_wireless_security_parent_class)->finalize (object); } +/* NMSettingWirelessSecurity:wep-key-type is an enum, but needs to be marshalled + * as 'u', not 'i', for backward-compatibility. + */ +static GVariant * +wep_key_type_to_dbus (const GValue *from) +{ + return g_variant_new_uint32 (g_value_get_enum (from)); +} + static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) @@ -1220,24 +1230,24 @@ set_property (GObject *object, guint prop_id, priv->wep_key3 = g_value_dup_string (value); break; case PROP_WEP_KEY_FLAGS: - priv->wep_key_flags = g_value_get_uint (value); + priv->wep_key_flags = g_value_get_flags (value); break; case PROP_PSK: g_free (priv->psk); priv->psk = g_value_dup_string (value); break; case PROP_PSK_FLAGS: - priv->psk_flags = g_value_get_uint (value); + priv->psk_flags = g_value_get_flags (value); break; case PROP_LEAP_PASSWORD: g_free (priv->leap_password); priv->leap_password = g_value_dup_string (value); break; case PROP_LEAP_PASSWORD_FLAGS: - priv->leap_password_flags = g_value_get_uint (value); + priv->leap_password_flags = g_value_get_flags (value); break; case PROP_WEP_KEY_TYPE: - priv->wep_key_type = g_value_get_uint (value); + priv->wep_key_type = g_value_get_enum (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1287,22 +1297,22 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->wep_key3); break; case PROP_WEP_KEY_FLAGS: - g_value_set_uint (value, priv->wep_key_flags); + g_value_set_flags (value, priv->wep_key_flags); break; case PROP_PSK: g_value_set_string (value, priv->psk); break; case PROP_PSK_FLAGS: - g_value_set_uint (value, priv->psk_flags); + g_value_set_flags (value, priv->psk_flags); break; case PROP_LEAP_PASSWORD: g_value_set_string (value, priv->leap_password); break; case PROP_LEAP_PASSWORD_FLAGS: - g_value_set_uint (value, priv->leap_password_flags); + g_value_set_flags (value, priv->leap_password_flags); break; case PROP_WEP_KEY_TYPE: - g_value_set_uint (value, priv->wep_key_type); + g_value_set_enum (value, priv->wep_key_type); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1499,12 +1509,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting **/ g_object_class_install_property (object_class, PROP_WEP_KEY_FLAGS, - g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingWirelessSecurity:psk: @@ -1532,12 +1541,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting **/ g_object_class_install_property (object_class, PROP_PSK_FLAGS, - g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingWirelessSecurity:leap-password: @@ -1561,12 +1569,11 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting **/ g_object_class_install_property (object_class, PROP_LEAP_PASSWORD_FLAGS, - g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, "", "", - NM_SETTING_SECRET_FLAG_NONE, - NM_SETTING_SECRET_FLAGS_ALL, - NM_SETTING_SECRET_FLAG_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_SETTING_WIRELESS_SECURITY_LEAP_PASSWORD_FLAGS, "", "", + NM_TYPE_SETTING_SECRET_FLAGS, + NM_SETTING_SECRET_FLAG_NONE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); /** * NMSettingWirelessSecurity:wep-key-type: @@ -1580,11 +1587,15 @@ nm_setting_wireless_security_class_init (NMSettingWirelessSecurityClass *setting **/ g_object_class_install_property (object_class, PROP_WEP_KEY_TYPE, - g_param_spec_uint (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, "", "", - NM_WEP_KEY_TYPE_UNKNOWN, - NM_WEP_KEY_TYPE_LAST, + g_param_spec_enum (NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, "", "", + NM_TYPE_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_UNKNOWN, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, + NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, + G_VARIANT_TYPE_UINT32, + wep_key_type_to_dbus, + NULL); } diff --git a/libnm-core/nm-setting.c b/libnm-core/nm-setting.c index d49a7320f1..f4ad8bbd16 100644 --- a/libnm-core/nm-setting.c +++ b/libnm-core/nm-setting.c @@ -690,6 +690,10 @@ get_property_for_dbus (NMSetting *setting, dbus_value = property->to_dbus (&prop_value); else if (property->dbus_type) dbus_value = g_dbus_gvalue_to_gvariant (&prop_value, property->dbus_type); + else if (g_type_is_a (prop_value.g_type, G_TYPE_ENUM)) + dbus_value = g_variant_new_int32 (g_value_get_enum (&prop_value)); + else if (g_type_is_a (prop_value.g_type, G_TYPE_FLAGS)) + dbus_value = g_variant_new_uint32 (g_value_get_flags (&prop_value)); else dbus_value = g_dbus_gvalue_to_gvariant (&prop_value, variant_type_for_gtype (prop_value.g_type)); g_value_unset (&prop_value); diff --git a/libnm-core/nm-setting.h b/libnm-core/nm-setting.h index 80fc7bb6a6..5ed3e6b4f7 100644 --- a/libnm-core/nm-setting.h +++ b/libnm-core/nm-setting.h @@ -102,7 +102,7 @@ GQuark nm_setting_error_quark (void); * is to be stored and/or requested when it is needed. * **/ -typedef enum { +typedef enum { /*< flags >*/ NM_SETTING_SECRET_FLAG_NONE = 0x00000000, NM_SETTING_SECRET_FLAG_AGENT_OWNED = 0x00000001, NM_SETTING_SECRET_FLAG_NOT_SAVED = 0x00000002, diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index af1a6fb549..2cb6137866 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -575,6 +575,7 @@ make_test_wsec_setting (const char *detail) NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "foobarbaz", NM_SETTING_WIRELESS_SECURITY_PSK, "random psk", + NM_SETTING_WIRELESS_SECURITY_PSK_FLAGS, NM_SETTING_SECRET_FLAG_NOT_SAVED, NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "aaaaaaaaaa", NULL); @@ -707,6 +708,72 @@ test_setting_to_dbus_transform (void) } static void +test_setting_to_dbus_enum (void) +{ + NMSetting *s_ip6, *s_wsec, *s_serial; + GVariant *dict, *val; + + /* enum */ + s_ip6 = nm_setting_ip6_config_new (); + g_object_set (s_ip6, + NM_SETTING_IP6_CONFIG_IP6_PRIVACY, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR, + NULL); + + dict = _nm_setting_to_dbus (s_ip6, NULL, NM_CONNECTION_SERIALIZE_ALL); + g_assert (dict != NULL); + + val = g_variant_lookup_value (dict, NM_SETTING_IP6_CONFIG_IP6_PRIVACY, G_VARIANT_TYPE_INT32); + g_assert (val != NULL); + g_assert_cmpint (g_variant_get_int32 (val), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR); + g_variant_unref (val); + + g_variant_unref (dict); + g_object_unref (s_ip6); + + /* flags (and a transformed enum) */ + s_wsec = nm_setting_wireless_security_new (); + g_object_set (s_wsec, + NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, NM_WEP_KEY_TYPE_KEY, + NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, (NM_SETTING_SECRET_FLAG_AGENT_OWNED | + NM_SETTING_SECRET_FLAG_NOT_SAVED), + NULL); + + dict = _nm_setting_to_dbus (s_wsec, NULL, NM_CONNECTION_SERIALIZE_ALL); + g_assert (dict != NULL); + + val = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, G_VARIANT_TYPE_UINT32); + g_assert (val != NULL); + g_assert_cmpint (g_variant_get_uint32 (val), ==, NM_WEP_KEY_TYPE_KEY); + g_variant_unref (val); + + val = g_variant_lookup_value (dict, NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, G_VARIANT_TYPE_UINT32); + g_assert (val != NULL); + g_assert_cmpint (g_variant_get_uint32 (val), ==, (NM_SETTING_SECRET_FLAG_AGENT_OWNED | + NM_SETTING_SECRET_FLAG_NOT_SAVED)); + g_variant_unref (val); + + g_variant_unref (dict); + g_object_unref (s_wsec); + + /* another transformed enum */ + s_serial = nm_setting_serial_new (); + g_object_set (s_serial, + NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_ODD, + NULL); + + dict = _nm_setting_to_dbus (s_serial, NULL, NM_CONNECTION_SERIALIZE_ALL); + g_assert (dict != NULL); + + val = g_variant_lookup_value (dict, NM_SETTING_SERIAL_PARITY, G_VARIANT_TYPE_BYTE); + g_assert (val != NULL); + g_assert_cmpint (g_variant_get_byte (val), ==, 'o'); + g_variant_unref (val); + + g_variant_unref (dict); + g_object_unref (s_serial); +} + +static void test_connection_to_dbus_setting_name (void) { NMConnection *connection; @@ -832,6 +899,68 @@ test_setting_new_from_dbus_transform (void) g_object_unref (s_wired); } +static void +test_setting_new_from_dbus_enum (void) +{ + NMSettingIP6Config *s_ip6; + NMSettingWirelessSecurity *s_wsec; + NMSettingSerial *s_serial; + GVariant *dict; + GVariantBuilder builder; + GError *error = NULL; + + /* enum */ + g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING); + g_variant_builder_add (&builder, "{sv}", + NM_SETTING_IP6_CONFIG_IP6_PRIVACY, + g_variant_new_int32 (NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR)); + dict = g_variant_builder_end (&builder); + + s_ip6 = (NMSettingIP6Config *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_IP6_CONFIG, dict, NULL, &error); + g_assert_no_error (error); + + g_assert_cmpint (nm_setting_ip6_config_get_ip6_privacy (s_ip6), ==, NM_SETTING_IP6_CONFIG_PRIVACY_PREFER_TEMP_ADDR); + + g_variant_unref (dict); + g_object_unref (s_ip6); + + /* flags (and a transformed enum) */ + g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING); + g_variant_builder_add (&builder, "{sv}", + NM_SETTING_WIRELESS_SECURITY_WEP_KEY_TYPE, + g_variant_new_uint32 (NM_WEP_KEY_TYPE_KEY)); + g_variant_builder_add (&builder, "{sv}", + NM_SETTING_WIRELESS_SECURITY_WEP_KEY_FLAGS, + g_variant_new_uint32 (NM_SETTING_SECRET_FLAG_AGENT_OWNED | + NM_SETTING_SECRET_FLAG_NOT_SAVED)); + dict = g_variant_builder_end (&builder); + + s_wsec = (NMSettingWirelessSecurity *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRELESS_SECURITY, dict, NULL, &error); + g_assert_no_error (error); + + g_assert_cmpint (nm_setting_wireless_security_get_wep_key_type (s_wsec), ==, NM_WEP_KEY_TYPE_KEY); + g_assert_cmpint (nm_setting_wireless_security_get_wep_key_flags (s_wsec), ==, (NM_SETTING_SECRET_FLAG_AGENT_OWNED | + NM_SETTING_SECRET_FLAG_NOT_SAVED)); + + g_variant_unref (dict); + g_object_unref (s_wsec); + + /* another transformed enum */ + g_variant_builder_init (&builder, NM_VARIANT_TYPE_SETTING); + g_variant_builder_add (&builder, "{sv}", + NM_SETTING_SERIAL_PARITY, + g_variant_new_byte ('E')); + dict = g_variant_builder_end (&builder); + + s_serial = (NMSettingSerial *) _nm_setting_new_from_dbus (NM_TYPE_SETTING_SERIAL, dict, NULL, &error); + g_assert_no_error (error); + + g_assert_cmpint (nm_setting_serial_get_parity (s_serial), ==, NM_SETTING_SERIAL_PARITY_EVEN); + + g_variant_unref (dict); + g_object_unref (s_serial); +} + static NMConnection * new_test_connection (void) { @@ -3184,6 +3313,7 @@ int main (int argc, char **argv) g_test_add_func ("/core/general/test_setting_to_dbus_no_secrets", test_setting_to_dbus_no_secrets); g_test_add_func ("/core/general/test_setting_to_dbus_only_secrets", test_setting_to_dbus_only_secrets); g_test_add_func ("/core/general/test_setting_to_dbus_transform", test_setting_to_dbus_transform); + g_test_add_func ("/core/general/test_setting_to_dbus_enum", test_setting_to_dbus_enum); g_test_add_func ("/core/general/test_setting_compare_id", test_setting_compare_id); #define ADD_FUNC(func, secret_flags, comp_flags, remove_secret) \ g_test_add_data_func_full ("/core/general/" G_STRINGIFY (func), \ @@ -3203,6 +3333,7 @@ int main (int argc, char **argv) g_test_add_func ("/core/general/test_connection_to_dbus_deprecated_props", test_connection_to_dbus_deprecated_props); g_test_add_func ("/core/general/test_setting_new_from_dbus", test_setting_new_from_dbus); g_test_add_func ("/core/general/test_setting_new_from_dbus_transform", test_setting_new_from_dbus_transform); + g_test_add_func ("/core/general/test_setting_new_from_dbus_enum", test_setting_new_from_dbus_enum); g_test_add_func ("/core/general/test_connection_replace_settings", test_connection_replace_settings); g_test_add_func ("/core/general/test_connection_replace_settings_from_connection", test_connection_replace_settings_from_connection); g_test_add_func ("/core/general/test_connection_replace_settings_bad", test_connection_replace_settings_bad); diff --git a/libnm-util/nm-setting-serial.c b/libnm-util/nm-setting-serial.c index 4a7ee89e65..0f03e29ffe 100644 --- a/libnm-util/nm-setting-serial.c +++ b/libnm-util/nm-setting-serial.c @@ -283,6 +283,16 @@ nm_setting_serial_class_init (NMSettingSerialClass *setting_class) * Parity setting of the serial port. Either 'E' for even parity, 'o' for * odd parity, or 'n' for no parity. **/ + /* plugins docs + * ---keyfile--- + * property: parity + * format: 'e', 'o', or 'n' + * description: The connection parity; even, odd, or none. Note that older + * versions of NetworkManager stored this as an integer: 69 ('E') for even, + * 111 ('o') for odd, or 110 ('n') for none. + * example: parity=n + * ---end--- + */ g_object_class_install_property (object_class, PROP_PARITY, g_param_spec_char (NM_SETTING_SERIAL_PARITY, "", "", diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 98a80082df..08182f8c09 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -742,6 +742,7 @@ global: nm_setting_serial_get_stopbits; nm_setting_serial_get_type; nm_setting_serial_new; + nm_setting_serial_parity_get_type; nm_setting_set_secret_flags; nm_setting_team_error_get_type; nm_setting_team_error_quark; diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index bca5220a50..0bb2c21409 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -388,13 +388,13 @@ get_property (GObject *object, switch (prop_id) { case PROP_FLAGS: - g_value_set_uint (value, nm_access_point_get_flags (ap)); + g_value_set_flags (value, nm_access_point_get_flags (ap)); break; case PROP_WPA_FLAGS: - g_value_set_uint (value, nm_access_point_get_wpa_flags (ap)); + g_value_set_flags (value, nm_access_point_get_wpa_flags (ap)); break; case PROP_RSN_FLAGS: - g_value_set_uint (value, nm_access_point_get_rsn_flags (ap)); + g_value_set_flags (value, nm_access_point_get_rsn_flags (ap)); break; case PROP_SSID: g_value_set_boxed (value, nm_access_point_get_ssid (ap)); @@ -409,7 +409,7 @@ get_property (GObject *object, g_value_set_string (value, nm_access_point_get_bssid (ap)); break; case PROP_MODE: - g_value_set_uint (value, nm_access_point_get_mode (ap)); + g_value_set_enum (value, nm_access_point_get_mode (ap)); break; case PROP_MAX_BITRATE: g_value_set_uint (value, nm_access_point_get_max_bitrate (ap)); @@ -474,12 +474,11 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) **/ g_object_class_install_property (object_class, PROP_FLAGS, - g_param_spec_uint (NM_ACCESS_POINT_FLAGS, "", "", - NM_802_11_AP_FLAGS_NONE, - NM_802_11_AP_FLAGS_PRIVACY, - NM_802_11_AP_FLAGS_NONE, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_ACCESS_POINT_FLAGS, "", "", + NM_TYPE_802_11_AP_FLAGS, + NM_802_11_AP_FLAGS_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMAccessPoint:wpa-flags: @@ -488,10 +487,11 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) **/ g_object_class_install_property (object_class, PROP_WPA_FLAGS, - g_param_spec_uint (NM_ACCESS_POINT_WPA_FLAGS, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_ACCESS_POINT_WPA_FLAGS, "", "", + NM_TYPE_802_11_AP_SECURITY_FLAGS, + NM_802_11_AP_SEC_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMAccessPoint:rsn-flags: @@ -500,10 +500,11 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) **/ g_object_class_install_property (object_class, PROP_RSN_FLAGS, - g_param_spec_uint (NM_ACCESS_POINT_RSN_FLAGS, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_ACCESS_POINT_RSN_FLAGS, "", "", + NM_TYPE_802_11_AP_SECURITY_FLAGS, + NM_802_11_AP_SEC_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMAccessPoint:ssid: @@ -564,8 +565,9 @@ nm_access_point_class_init (NMAccessPointClass *ap_class) **/ g_object_class_install_property (object_class, PROP_MODE, - g_param_spec_uint (NM_ACCESS_POINT_MODE, "", "", - NM_802_11_MODE_ADHOC, NM_802_11_MODE_INFRA, NM_802_11_MODE_INFRA, + g_param_spec_enum (NM_ACCESS_POINT_MODE, "", "", + NM_TYPE_802_11_MODE, + NM_802_11_MODE_INFRA, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm/nm-active-connection.c b/libnm/nm-active-connection.c index e2fcbb0a0a..2c6c2ec8f8 100644 --- a/libnm/nm-active-connection.c +++ b/libnm/nm-active-connection.c @@ -417,7 +417,7 @@ get_property (GObject *object, g_value_take_boxed (value, _nm_utils_copy_object_array (nm_active_connection_get_devices (self))); break; case PROP_STATE: - g_value_set_uint (value, nm_active_connection_get_state (self)); + g_value_set_enum (value, nm_active_connection_get_state (self)); break; case PROP_DEFAULT: g_value_set_boolean (value, nm_active_connection_get_default (self)); @@ -581,9 +581,8 @@ nm_active_connection_class_init (NMActiveConnectionClass *ap_class) **/ g_object_class_install_property (object_class, PROP_STATE, - g_param_spec_uint (NM_ACTIVE_CONNECTION_STATE, "", "", - NM_ACTIVE_CONNECTION_STATE_UNKNOWN, - NM_ACTIVE_CONNECTION_STATE_DEACTIVATING, + g_param_spec_enum (NM_ACTIVE_CONNECTION_STATE, "", "", + NM_TYPE_ACTIVE_CONNECTION_STATE, NM_ACTIVE_CONNECTION_STATE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 43165be95a..0f64786b9d 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -2017,7 +2017,7 @@ get_property (GObject *object, g_value_set_string (value, nm_client_get_version (self)); break; case PROP_STATE: - g_value_set_uint (value, nm_client_get_state (self)); + g_value_set_enum (value, nm_client_get_state (self)); break; case PROP_STARTUP: g_value_set_boolean (value, nm_client_get_startup (self)); @@ -2050,7 +2050,7 @@ get_property (GObject *object, g_value_take_boxed (value, _nm_utils_copy_object_array (nm_client_get_active_connections (self))); break; case PROP_CONNECTIVITY: - g_value_set_uint (value, priv->connectivity); + g_value_set_enum (value, priv->connectivity); break; case PROP_PRIMARY_CONNECTION: g_value_set_object (value, priv->primary_connection); @@ -2109,8 +2109,9 @@ nm_client_class_init (NMClientClass *client_class) **/ g_object_class_install_property (object_class, PROP_STATE, - g_param_spec_uint (NM_CLIENT_STATE, "", "", - NM_STATE_UNKNOWN, NM_STATE_CONNECTED_GLOBAL, NM_STATE_UNKNOWN, + g_param_spec_enum (NM_CLIENT_STATE, "", "", + NM_TYPE_STATE, + NM_STATE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); @@ -2243,8 +2244,9 @@ nm_client_class_init (NMClientClass *client_class) */ g_object_class_install_property (object_class, PROP_CONNECTIVITY, - g_param_spec_uint (NM_CLIENT_CONNECTIVITY, "", "", - NM_CONNECTIVITY_UNKNOWN, NM_CONNECTIVITY_FULL, NM_CONNECTIVITY_UNKNOWN, + g_param_spec_enum (NM_CLIENT_CONNECTIVITY, "", "", + NM_TYPE_CONNECTIVITY_STATE, + NM_CONNECTIVITY_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c index b5cefe817f..5bd93b9773 100644 --- a/libnm/nm-device-bt.c +++ b/libnm/nm-device-bt.c @@ -31,6 +31,7 @@ #include "nm-device-bt.h" #include "nm-device-private.h" #include "nm-object-private.h" +#include "nm-enum-types.h" G_DEFINE_TYPE (NMDeviceBt, nm_device_bt, NM_TYPE_DEVICE) @@ -257,7 +258,7 @@ get_property (GObject *object, g_value_set_string (value, nm_device_bt_get_name (device)); break; case PROP_BT_CAPABILITIES: - g_value_set_uint (value, nm_device_bt_get_capabilities (device)); + g_value_set_flags (value, nm_device_bt_get_capabilities (device)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -319,9 +320,10 @@ nm_device_bt_class_init (NMDeviceBtClass *bt_class) **/ g_object_class_install_property (object_class, PROP_BT_CAPABILITIES, - g_param_spec_uint (NM_DEVICE_BT_CAPABILITIES, "", "", - NM_BT_CAPABILITY_NONE, G_MAXUINT32, NM_BT_CAPABILITY_NONE, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_DEVICE_BT_CAPABILITIES, "", "", + NM_TYPE_BLUETOOTH_CAPABILITIES, + NM_BT_CAPABILITY_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); } diff --git a/libnm/nm-device-modem.c b/libnm/nm-device-modem.c index 4983864cb4..1f8a91406a 100644 --- a/libnm/nm-device-modem.c +++ b/libnm/nm-device-modem.c @@ -31,6 +31,7 @@ #include "nm-device-modem.h" #include "nm-device-private.h" #include "nm-object-private.h" +#include "nm-enum-types.h" G_DEFINE_TYPE (NMDeviceModem, nm_device_modem, NM_TYPE_DEVICE) @@ -208,10 +209,10 @@ get_property (GObject *object, switch (prop_id) { case PROP_MODEM_CAPS: - g_value_set_uint (value, nm_device_modem_get_modem_capabilities (self)); + g_value_set_flags (value, nm_device_modem_get_modem_capabilities (self)); break; case PROP_CURRENT_CAPS: - g_value_set_uint (value, nm_device_modem_get_current_capabilities (self)); + g_value_set_flags (value, nm_device_modem_get_current_capabilities (self)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -249,10 +250,11 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class) **/ g_object_class_install_property (object_class, PROP_MODEM_CAPS, - g_param_spec_uint (NM_DEVICE_MODEM_MODEM_CAPABILITIES, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_DEVICE_MODEM_MODEM_CAPABILITIES, "", "", + NM_TYPE_DEVICE_MODEM_CAPABILITIES, + NM_DEVICE_MODEM_CAPABILITY_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMDeviceModem:current-capabilities: @@ -262,8 +264,9 @@ nm_device_modem_class_init (NMDeviceModemClass *modem_class) **/ g_object_class_install_property (object_class, PROP_CURRENT_CAPS, - g_param_spec_uint (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_DEVICE_MODEM_CURRENT_CAPABILITIES, "", "", + NM_TYPE_DEVICE_MODEM_CAPABILITIES, + NM_DEVICE_MODEM_CAPABILITY_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); } diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index dbbcecbdea..84c8288e0e 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -588,7 +588,7 @@ get_property (GObject *object, g_value_set_string (value, nm_device_wifi_get_permanent_hw_address (self)); break; case PROP_MODE: - g_value_set_uint (value, nm_device_wifi_get_mode (self)); + g_value_set_enum (value, nm_device_wifi_get_mode (self)); break; case PROP_BITRATE: g_value_set_uint (value, nm_device_wifi_get_bitrate (self)); @@ -597,7 +597,7 @@ get_property (GObject *object, g_value_set_object (value, nm_device_wifi_get_active_access_point (self)); break; case PROP_WIRELESS_CAPABILITIES: - g_value_set_uint (value, nm_device_wifi_get_capabilities (self)); + g_value_set_flags (value, nm_device_wifi_get_capabilities (self)); break; case PROP_ACCESS_POINTS: g_value_take_boxed (value, _nm_utils_copy_object_array (nm_device_wifi_get_access_points (self))); @@ -753,8 +753,9 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class) **/ g_object_class_install_property (object_class, PROP_MODE, - g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "", - NM_802_11_MODE_UNKNOWN, NM_802_11_MODE_AP, NM_802_11_MODE_INFRA, + g_param_spec_enum (NM_DEVICE_WIFI_MODE, "", "", + NM_TYPE_802_11_MODE, + NM_802_11_MODE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); @@ -789,10 +790,11 @@ nm_device_wifi_class_init (NMDeviceWifiClass *wifi_class) **/ g_object_class_install_property (object_class, PROP_WIRELESS_CAPABILITIES, - g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_DEVICE_WIFI_CAPABILITIES, "", "", + NM_TYPE_DEVICE_WIFI_CAPABILITIES, + NM_WIFI_DEVICE_CAP_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMDeviceWifi:access-points: diff --git a/libnm/nm-device.c b/libnm/nm-device.c index a808cdbd0f..f523fdf1f2 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -389,7 +389,7 @@ get_property (GObject *object, switch (prop_id) { case PROP_DEVICE_TYPE: - g_value_set_uint (value, nm_device_get_device_type (device)); + g_value_set_enum (value, nm_device_get_device_type (device)); break; case PROP_UDI: g_value_set_string (value, nm_device_get_udi (device)); @@ -410,7 +410,7 @@ get_property (GObject *object, g_value_set_string (value, nm_device_get_firmware_version (device)); break; case PROP_CAPABILITIES: - g_value_set_uint (value, nm_device_get_capabilities (device)); + g_value_set_flags (value, nm_device_get_capabilities (device)); break; case PROP_MANAGED: g_value_set_boolean (value, nm_device_get_managed (device)); @@ -434,7 +434,7 @@ get_property (GObject *object, g_value_set_object (value, nm_device_get_dhcp6_config (device)); break; case PROP_STATE: - g_value_set_uint (value, nm_device_get_state (device)); + g_value_set_enum (value, nm_device_get_state (device)); break; case PROP_STATE_REASON: g_value_set_uint (value, nm_device_get_state_reason (device)); @@ -476,7 +476,7 @@ set_property (GObject *object, switch (prop_id) { case PROP_DEVICE_TYPE: /* Construct only */ - priv->device_type = g_value_get_uint (value); + priv->device_type = g_value_get_enum (value); break; case PROP_AUTOCONNECT: b = g_value_get_boolean (value); @@ -545,8 +545,9 @@ nm_device_class_init (NMDeviceClass *device_class) **/ g_object_class_install_property (object_class, PROP_DEVICE_TYPE, - g_param_spec_uint (NM_DEVICE_DEVICE_TYPE, "", "", - NM_DEVICE_TYPE_UNKNOWN, G_MAXUINT32, NM_DEVICE_TYPE_UNKNOWN, + g_param_spec_enum (NM_DEVICE_DEVICE_TYPE, "", "", + NM_TYPE_DEVICE_TYPE, + NM_DEVICE_TYPE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); /** @@ -609,10 +610,11 @@ nm_device_class_init (NMDeviceClass *device_class) **/ g_object_class_install_property (object_class, PROP_CAPABILITIES, - g_param_spec_uint (NM_DEVICE_CAPABILITIES, "", "", - 0, G_MAXUINT32, 0, - G_PARAM_READABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_flags (NM_DEVICE_CAPABILITIES, "", "", + NM_TYPE_DEVICE_CAPABILITIES, + NM_DEVICE_CAP_NONE, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS)); /** * NMDevice:managed: @@ -706,8 +708,9 @@ nm_device_class_init (NMDeviceClass *device_class) **/ g_object_class_install_property (object_class, PROP_STATE, - g_param_spec_uint (NM_DEVICE_STATE, "", "", - 0, G_MAXUINT32, 0, + g_param_spec_enum (NM_DEVICE_STATE, "", "", + NM_TYPE_DEVICE_STATE, + NM_DEVICE_STATE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm/nm-object.c b/libnm/nm-object.c index f3d758e422..73dbade4ab 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -1198,11 +1198,11 @@ handle_property_changed (NMObject *self, const char *dbus_name, if (G_UNLIKELY (debug)) { char *s; s = g_variant_print (value, FALSE); - dbgmsg ("PC: (%p) %s::%s => '%s' (%s%s%s)", + dbgmsg ("PC: (%p) %s:%s => '%s' (%s%s%s)", self, G_OBJECT_TYPE_NAME (self), prop_name, s, - G_VALUE_TYPE_NAME (value), + g_variant_get_type_string (value), pi->object_type ? " / " : "", pi->object_type ? g_type_name (pi->object_type) : ""); g_free (s); @@ -1264,15 +1264,16 @@ property_proxy_signal (GDBusProxy *proxy, g_variant_unref (properties); } -#define HANDLE_TYPE(gtype, vtype, ctype, getter) \ - } else if (pspec->value_type == gtype) { \ +#define HANDLE_TYPE(vtype, ctype, getter) \ + G_STMT_START { \ if (g_variant_is_of_type (value, vtype)) { \ ctype *param = (ctype *) field; \ *param = getter (value); \ } else { \ success = FALSE; \ goto done; \ - } + } \ + } G_STMT_END static gboolean demarshal_generic (NMObject *object, @@ -1317,21 +1318,52 @@ demarshal_generic (NMObject *object, *param = g_bytes_new (val, length); else *param = NULL; - HANDLE_TYPE (G_TYPE_BOOLEAN, G_VARIANT_TYPE_BOOLEAN, gboolean, g_variant_get_boolean) - HANDLE_TYPE (G_TYPE_UCHAR, G_VARIANT_TYPE_BYTE, guchar, g_variant_get_byte) - HANDLE_TYPE (G_TYPE_DOUBLE, G_VARIANT_TYPE_DOUBLE, gdouble, g_variant_get_double) - HANDLE_TYPE (G_TYPE_INT, G_VARIANT_TYPE_INT32, gint, g_variant_get_int32) - HANDLE_TYPE (G_TYPE_UINT, G_VARIANT_TYPE_UINT32, guint, g_variant_get_uint32) - HANDLE_TYPE (G_TYPE_INT64, G_VARIANT_TYPE_INT64, gint, g_variant_get_int64) - HANDLE_TYPE (G_TYPE_UINT64, G_VARIANT_TYPE_UINT64, guint, g_variant_get_uint64) - HANDLE_TYPE (G_TYPE_LONG, G_VARIANT_TYPE_INT64, glong, g_variant_get_int64) - HANDLE_TYPE (G_TYPE_ULONG, G_VARIANT_TYPE_UINT64, gulong, g_variant_get_uint64) - } else { - dbgmsg ("%s: %s/%s unhandled type %s.", - __func__, - G_OBJECT_TYPE_NAME (object), - pspec->name, - g_type_name (pspec->value_type)); + } else if (G_IS_PARAM_SPEC_ENUM (pspec)) { + int *param = (int *) field; + + if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT32)) + *param = g_variant_get_int32 (value); + else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)) + *param = g_variant_get_uint32 (value); + else { + success = FALSE; + goto done; + } + } else if (G_IS_PARAM_SPEC_FLAGS (pspec)) { + guint *param = (guint *) field; + + if (g_variant_is_of_type (value, G_VARIANT_TYPE_INT32)) + *param = g_variant_get_int32 (value); + else if (g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32)) + *param = g_variant_get_uint32 (value); + else { + success = FALSE; + goto done; + } + } else if (pspec->value_type == G_TYPE_BOOLEAN) + HANDLE_TYPE (G_VARIANT_TYPE_BOOLEAN, gboolean, g_variant_get_boolean); + else if (pspec->value_type == G_TYPE_UCHAR) + HANDLE_TYPE (G_VARIANT_TYPE_BYTE, guchar, g_variant_get_byte); + else if (pspec->value_type == G_TYPE_DOUBLE) + HANDLE_TYPE (G_VARIANT_TYPE_DOUBLE, gdouble, g_variant_get_double); + else if (pspec->value_type == G_TYPE_INT) + HANDLE_TYPE (G_VARIANT_TYPE_INT32, gint, g_variant_get_int32); + else if (pspec->value_type == G_TYPE_UINT) + HANDLE_TYPE (G_VARIANT_TYPE_UINT32, guint, g_variant_get_uint32); + else if (pspec->value_type == G_TYPE_INT64) + HANDLE_TYPE (G_VARIANT_TYPE_INT64, gint, g_variant_get_int64); + else if (pspec->value_type == G_TYPE_UINT64) + HANDLE_TYPE (G_VARIANT_TYPE_UINT64, guint, g_variant_get_uint64); + else if (pspec->value_type == G_TYPE_LONG) + HANDLE_TYPE (G_VARIANT_TYPE_INT64, glong, g_variant_get_int64); + else if (pspec->value_type == G_TYPE_ULONG) + HANDLE_TYPE (G_VARIANT_TYPE_UINT64, gulong, g_variant_get_uint64); + else { + g_warning ("%s: %s:%s unhandled type %s.", + __func__, + G_OBJECT_TYPE_NAME (object), + pspec->name, + g_type_name (pspec->value_type)); success = FALSE; } @@ -1339,9 +1371,9 @@ done: if (success) { _nm_object_queue_notify (object, pspec->name); } else { - dbgmsg ("%s: %s/%s (type %s) couldn't be set with type %s.", + dbgmsg ("%s: %s:%s (type %s) couldn't be set from D-Bus type %s.", __func__, G_OBJECT_TYPE_NAME (object), pspec->name, - g_type_name (pspec->value_type), G_VALUE_TYPE_NAME (value)); + g_type_name (pspec->value_type), g_variant_get_type_string (value)); } return success; } diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c index cea9397631..8e7605aef3 100644 --- a/libnm/nm-vpn-connection.c +++ b/libnm/nm-vpn-connection.c @@ -163,7 +163,7 @@ get_property (GObject *object, switch (prop_id) { case PROP_VPN_STATE: - g_value_set_uint (value, nm_vpn_connection_get_vpn_state (self)); + g_value_set_enum (value, nm_vpn_connection_get_vpn_state (self)); break; case PROP_BANNER: g_value_set_string (value, nm_vpn_connection_get_banner (self)); @@ -201,9 +201,8 @@ nm_vpn_connection_class_init (NMVpnConnectionClass *connection_class) **/ g_object_class_install_property (object_class, PROP_VPN_STATE, - g_param_spec_uint (NM_VPN_CONNECTION_VPN_STATE, "", "", - NM_VPN_CONNECTION_STATE_UNKNOWN, - NM_VPN_CONNECTION_STATE_DISCONNECTED, + g_param_spec_enum (NM_VPN_CONNECTION_VPN_STATE, "", "", + NM_TYPE_VPN_CONNECTION_STATE, NM_VPN_CONNECTION_STATE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm/nm-vpn-plugin.c b/libnm/nm-vpn-plugin.c index ba5ecdc1f9..674c7a97f3 100644 --- a/libnm/nm-vpn-plugin.c +++ b/libnm/nm-vpn-plugin.c @@ -796,7 +796,7 @@ set_property (GObject *object, guint prop_id, break; case PROP_STATE: nm_vpn_plugin_set_state (NM_VPN_PLUGIN (object), - (NMVpnServiceState) g_value_get_uint (value)); + (NMVpnServiceState) g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -815,7 +815,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, priv->dbus_service_name); break; case PROP_STATE: - g_value_set_uint (value, nm_vpn_plugin_get_state (NM_VPN_PLUGIN (object))); + g_value_set_enum (value, nm_vpn_plugin_get_state (NM_VPN_PLUGIN (object))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -949,9 +949,8 @@ nm_vpn_plugin_class_init (NMVpnPluginClass *plugin_class) */ g_object_class_install_property (object_class, PROP_STATE, - g_param_spec_uint (NM_VPN_PLUGIN_STATE, "", "", - NM_VPN_SERVICE_STATE_UNKNOWN, - NM_VPN_SERVICE_STATE_STOPPED, + g_param_spec_enum (NM_VPN_PLUGIN_STATE, "", "", + NM_TYPE_VPN_SERVICE_STATE, NM_VPN_SERVICE_STATE_INIT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); diff --git a/libnm/nm-wimax-nsp.c b/libnm/nm-wimax-nsp.c index 57170893be..2387000569 100644 --- a/libnm/nm-wimax-nsp.c +++ b/libnm/nm-wimax-nsp.c @@ -30,6 +30,7 @@ #include "nm-wimax-nsp.h" #include "nm-dbus-interface.h" #include "nm-object-private.h" +#include "nm-enum-types.h" G_DEFINE_TYPE (NMWimaxNsp, nm_wimax_nsp, NM_TYPE_OBJECT) @@ -206,7 +207,7 @@ get_property (GObject *object, g_value_set_uint (value, nm_wimax_nsp_get_signal_quality (nsp)); break; case PROP_NETWORK_TYPE: - g_value_set_uint (value, nm_wimax_nsp_get_network_type (nsp)); + g_value_set_enum (value, nm_wimax_nsp_get_network_type (nsp)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -281,8 +282,9 @@ nm_wimax_nsp_class_init (NMWimaxNspClass *nsp_class) **/ g_object_class_install_property (object_class, PROP_NETWORK_TYPE, - g_param_spec_uint (NM_WIMAX_NSP_NETWORK_TYPE, "", "", - 0, G_MAXUINT32, 0, + g_param_spec_enum (NM_WIMAX_NSP_NETWORK_TYPE, "", "", + NM_TYPE_WIMAX_NSP_NETWORK_TYPE, + NM_WIMAX_NSP_NETWORK_TYPE_UNKNOWN, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); } diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index c48e9ed44e..c27f50a033 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -11331,7 +11331,7 @@ test_write_mobile_broadband (gboolean gsm) g_object_set (s_serial, NM_SETTING_SERIAL_BAUD, 115200, NM_SETTING_SERIAL_BITS, 8, - NM_SETTING_SERIAL_PARITY, 'n', + NM_SETTING_SERIAL_PARITY, NM_SETTING_SERIAL_PARITY_NONE, NM_SETTING_SERIAL_STOPBITS, 1, NULL); diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index 15410bbf6d..c925dc5028 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -893,6 +893,56 @@ cert_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char g_bytes_unref (bytes); } +static void +parity_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path) +{ + const char *setting_name = nm_setting_get_name (setting); + NMSettingSerialParity parity; + int int_val; + char *str_val; + + /* Keyfile traditionally stored this as the ASCII value for 'E', 'o', or 'n'. + * We now accept either that or the (case-insensitive) character itself (but + * still always write it the old way, for backward compatibility). + */ + int_val = nm_keyfile_plugin_kf_get_integer (keyfile, setting_name, key, NULL); + if (!int_val) { + str_val = nm_keyfile_plugin_kf_get_string (keyfile, setting_name, key, NULL); + if (str_val) { + if (str_val[0] && !str_val[1]) + int_val = str_val[0]; + else { + /* This will hit the warning below */ + int_val = 'X'; + } + } + } + + if (!int_val) + return; + + switch (int_val) { + case 'E': + case 'e': + parity = NM_SETTING_SERIAL_PARITY_EVEN; + break; + case 'O': + case 'o': + parity = NM_SETTING_SERIAL_PARITY_ODD; + break; + case 'N': + case 'n': + parity = NM_SETTING_SERIAL_PARITY_NONE; + break; + default: + nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid value for %s / %s", + __func__, setting_name, key); + return; + } + + g_object_set (setting, key, parity, NULL); +} + typedef struct { const char *setting_name; const char *key; @@ -1003,6 +1053,10 @@ static KeyParser key_parsers[] = { NM_SETTING_802_1X_PHASE2_PRIVATE_KEY, TRUE, cert_parser }, + { NM_SETTING_SERIAL_SETTING_NAME, + NM_SETTING_SERIAL_PARITY, + TRUE, + parity_parser }, { NULL, NULL, FALSE } }; diff --git a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT index cc8a9ee390..162bf72e58 100644 --- a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT +++ b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_BT @@ -16,6 +16,7 @@ apn=ISP.CINGULAR [serial] baud=115200 +parity=o [bluetooth] bdaddr=00:11:22:33:44:55 diff --git a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain index 236cca0edf..902b842797 100644 --- a/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain +++ b/src/settings/plugins/keyfile/tests/keyfiles/ATT_Data_Connect_Plain @@ -18,3 +18,4 @@ pin=2345 [serial] baud=115200 +parity=111 diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c index 5fbea1204b..ab705503bb 100644 --- a/src/settings/plugins/keyfile/tests/test-keyfile.c +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c @@ -1724,6 +1724,7 @@ test_read_bt_dun_connection (void) const char *bdaddr; const guint8 expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; const char *tmp; + NMSettingSerialParity parity; const char *expected_id = "AT&T Data Connect BT"; const char *expected_uuid = "089130ab-ce28-46e4-ad77-d44869b03d19"; const char *expected_apn = "ISP.CINGULAR"; @@ -1860,6 +1861,13 @@ test_read_bt_dun_connection (void) TEST_BT_DUN_FILE, NM_SETTING_SERIAL_SETTING_NAME); + parity = nm_setting_serial_get_parity (s_serial); + ASSERT (parity == NM_SETTING_SERIAL_PARITY_ODD, + "connection-verify-serial", "failed to verify %s: unexpected %s / %s key value", + TEST_BT_DUN_FILE, + NM_SETTING_SERIAL_SETTING_NAME, + NM_SETTING_SERIAL_PARITY); + g_object_unref (connection); } @@ -1965,6 +1973,7 @@ test_read_gsm_connection (void) NMSettingBluetooth *s_bluetooth; GError *error = NULL; const char *tmp; + NMSettingSerialParity parity; const char *expected_id = "AT&T Data Connect"; const char *expected_apn = "ISP.CINGULAR"; const char *expected_username = "ISP@CINGULARGPRS.COM"; @@ -2102,6 +2111,13 @@ test_read_gsm_connection (void) TEST_GSM_FILE, NM_SETTING_SERIAL_SETTING_NAME); + parity = nm_setting_serial_get_parity (s_serial); + ASSERT (parity == NM_SETTING_SERIAL_PARITY_ODD, + "connection-verify-serial", "failed to verify %s: unexpected %s / %s key value", + TEST_GSM_FILE, + NM_SETTING_SERIAL_SETTING_NAME, + NM_SETTING_SERIAL_PARITY); + g_object_unref (connection); } |