From 5006342308bf9c9523a9753f3d45ed38be8eddf4 Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Thu, 7 Nov 2019 10:21:54 +1300 Subject: [PATCH] network: Convert EAPMethod to an interface and make the subclasses GObjects --- .../wireless-security/eap-method-fast.c | 54 +++++--- .../wireless-security/eap-method-fast.h | 15 +-- .../wireless-security/eap-method-leap.c | 54 +++++--- .../wireless-security/eap-method-leap.h | 13 +- .../wireless-security/eap-method-peap.c | 86 +++++++----- .../wireless-security/eap-method-peap.h | 13 +- .../wireless-security/eap-method-simple.c | 89 ++++++++----- .../wireless-security/eap-method-simple.h | 15 +-- .../wireless-security/eap-method-tls.c | 125 ++++++++++-------- .../wireless-security/eap-method-tls.h | 13 +- .../wireless-security/eap-method-ttls.c | 86 +++++++----- .../wireless-security/eap-method-ttls.h | 13 +- panels/network/wireless-security/eap-method.c | 100 +++----------- panels/network/wireless-security/eap-method.h | 61 +++------ 14 files changed, 366 insertions(+), 371 deletions(-) diff --git a/panels/network/wireless-security/eap-method-fast.c b/panels/network/wireless-security/eap-method-fast.c index 475ea1008..df8bf77df 100644 --- a/panels/network/wireless-security/eap-method-fast.c +++ b/panels/network/wireless-security/eap-method-fast.c @@ -36,7 +36,7 @@ #define I_METHOD_COLUMN 1 struct _EAPMethodFAST { - EAPMethod parent; + GObject parent; GtkBuilder *builder; GtkEntry *anon_identity_entry; @@ -55,13 +55,20 @@ struct _EAPMethodFAST { gboolean is_editor; }; +static void eap_method_iface_init (EAPMethodInterface *); + +G_DEFINE_TYPE_WITH_CODE (EAPMethodFAST, eap_method_fast, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (eap_method_get_type (), eap_method_iface_init)) + static void -destroy (EAPMethod *parent) +eap_method_fast_dispose (GObject *object) { - EAPMethodFAST *self = (EAPMethodFAST *) parent; + EAPMethodFAST *self = EAP_METHOD_FAST (object); g_clear_object (&self->builder); g_clear_object (&self->size_group); + + G_OBJECT_CLASS (eap_method_fast_parent_class)->dispose (object); } static gboolean @@ -312,13 +319,37 @@ changed_cb (EAPMethodFAST *self) wireless_security_notify_changed (self->sec_parent); } +static void +eap_method_fast_init (EAPMethodFAST *self) +{ +} + +static void +eap_method_fast_class_init (EAPMethodFASTClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = eap_method_fast_dispose; +} + +static void +eap_method_iface_init (EAPMethodInterface *iface) +{ + iface->validate = validate; + iface->add_to_size_group = add_to_size_group; + iface->fill_connection = fill_connection; + iface->update_secrets = update_secrets; + iface->get_widget = get_widget; + iface->get_default_field = get_default_field; + iface->get_password_flags_name = get_password_flags_name; +} + EAPMethodFAST * eap_method_fast_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean is_editor, gboolean secrets_only) { - EAPMethod *parent; EAPMethodFAST *self; GtkFileFilter *filter; NMSetting8021x *s_8021x = NULL; @@ -326,20 +357,7 @@ eap_method_fast_new (WirelessSecurity *ws_parent, gboolean provisioning_enabled = TRUE; g_autoptr(GError) error = NULL; - parent = eap_method_init (sizeof (EAPMethodFAST), - validate, - add_to_size_group, - fill_connection, - update_secrets, - get_widget, - get_default_field, - get_password_flags_name, - NULL, - destroy); - if (!parent) - return NULL; - - self = (EAPMethodFAST *) parent; + self = g_object_new (eap_method_fast_get_type (), NULL); self->sec_parent = ws_parent; self->is_editor = is_editor; diff --git a/panels/network/wireless-security/eap-method-fast.h b/panels/network/wireless-security/eap-method-fast.h index c19722058..4401f5315 100644 --- a/panels/network/wireless-security/eap-method-fast.h +++ b/panels/network/wireless-security/eap-method-fast.h @@ -20,20 +20,19 @@ * (C) Copyright 2012 Red Hat, Inc. */ -#ifndef EAP_METHOD_FAST_H -#define EAP_METHOD_FAST_H +#pragma once + +#include #include "wireless-security.h" -typedef struct _EAPMethodFAST EAPMethodFAST; +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (EAPMethodFAST, eap_method_fast, EAP, METHOD_FAST, GObject) EAPMethodFAST *eap_method_fast_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean is_editor, gboolean secrets_only); -static void eap_method_fast_unref (EAPMethodFAST *method) { eap_method_unref (EAP_METHOD (method)); } -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethodFAST, eap_method_fast_unref) - -#endif /* EAP_METHOD_FAST_H */ - +G_END_DECLS diff --git a/panels/network/wireless-security/eap-method-leap.c b/panels/network/wireless-security/eap-method-leap.c index ef427eafc..fe5997f0b 100644 --- a/panels/network/wireless-security/eap-method-leap.c +++ b/panels/network/wireless-security/eap-method-leap.c @@ -33,7 +33,7 @@ #include "utils.h" struct _EAPMethodLEAP { - EAPMethod parent; + GObject parent; GtkBuilder *builder; GtkGrid *grid; @@ -48,6 +48,11 @@ struct _EAPMethodLEAP { gboolean editing_connection; }; +static void eap_method_iface_init (EAPMethodInterface *); + +G_DEFINE_TYPE_WITH_CODE (EAPMethodLEAP, eap_method_leap, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (eap_method_get_type (), eap_method_iface_init)) + static void show_toggled_cb (EAPMethodLEAP *self) { @@ -183,15 +188,17 @@ widgets_unrealized (EAPMethodLEAP *self) } static void -destroy (EAPMethod *parent) +eap_method_leap_dispose (GObject *object) { - EAPMethodLEAP *self = (EAPMethodLEAP *) parent; + EAPMethodLEAP *self = EAP_METHOD_LEAP (object); g_clear_object (&self->builder); g_signal_handlers_disconnect_by_data (self->grid, self); g_signal_handlers_disconnect_by_data (self->username_entry, self->ws_parent); g_signal_handlers_disconnect_by_data (self->password_entry, self->ws_parent); g_signal_handlers_disconnect_by_data (self->show_password_check, self); + + G_OBJECT_CLASS (eap_method_leap_parent_class)->dispose (object); } static void @@ -200,30 +207,41 @@ changed_cb (EAPMethodLEAP *self) wireless_security_notify_changed (self->ws_parent); } +static void +eap_method_leap_init (EAPMethodLEAP *self) +{ +} + +static void +eap_method_leap_class_init (EAPMethodLEAPClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = eap_method_leap_dispose; +} + +static void +eap_method_iface_init (EAPMethodInterface *iface) +{ + iface->validate = validate; + iface->add_to_size_group = add_to_size_group; + iface->fill_connection = fill_connection; + iface->update_secrets = update_secrets; + iface->get_widget = get_widget; + iface->get_default_field = get_default_field; + iface->get_password_flags_name = get_password_flags_name; +} + EAPMethodLEAP * eap_method_leap_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean secrets_only) { EAPMethodLEAP *self; - EAPMethod *parent; NMSetting8021x *s_8021x = NULL; g_autoptr(GError) error = NULL; - parent = eap_method_init (sizeof (EAPMethodLEAP), - validate, - add_to_size_group, - fill_connection, - update_secrets, - get_widget, - get_default_field, - get_password_flags_name, - NULL, - destroy); - if (!parent) - return NULL; - - self = (EAPMethodLEAP *) parent; + self = g_object_new (eap_method_leap_get_type (), NULL); self->editing_connection = secrets_only ? FALSE : TRUE; self->ws_parent = ws_parent; diff --git a/panels/network/wireless-security/eap-method-leap.h b/panels/network/wireless-security/eap-method-leap.h index 2d205d719..b8522ebab 100644 --- a/panels/network/wireless-security/eap-method-leap.h +++ b/panels/network/wireless-security/eap-method-leap.h @@ -20,19 +20,16 @@ * (C) Copyright 2007 - 2010 Red Hat, Inc. */ -#ifndef EAP_METHOD_LEAP_H -#define EAP_METHOD_LEAP_H +#pragma once #include "wireless-security.h" -typedef struct _EAPMethodLEAP EAPMethodLEAP; +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (EAPMethodLEAP, eap_method_leap, EAP, METHOD_LEAP, GObject) EAPMethodLEAP *eap_method_leap_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean secrets_only); -static void eap_method_leap_unref (EAPMethodLEAP *method) { eap_method_unref (EAP_METHOD (method)); } -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethodLEAP, eap_method_leap_unref) - -#endif /* EAP_METHOD_LEAP_H */ - +G_END_DECLS diff --git a/panels/network/wireless-security/eap-method-peap.c b/panels/network/wireless-security/eap-method-peap.c index 25b700f18..70e1b3e8c 100644 --- a/panels/network/wireless-security/eap-method-peap.c +++ b/panels/network/wireless-security/eap-method-peap.c @@ -35,7 +35,7 @@ #define I_METHOD_COLUMN 1 struct _EAPMethodPEAP { - EAPMethod parent; + GObject parent; GtkBuilder *builder; GtkEntry *anon_identity_entry; @@ -55,19 +55,26 @@ struct _EAPMethodPEAP { gboolean is_editor; }; +static void eap_method_iface_init (EAPMethodInterface *); + +G_DEFINE_TYPE_WITH_CODE (EAPMethodPEAP, eap_method_peap, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (eap_method_get_type (), eap_method_iface_init)) + static void -destroy (EAPMethod *parent) +eap_method_peap_dispose (GObject *object) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; + EAPMethodPEAP *self = EAP_METHOD_PEAP (object); g_clear_object (&self->builder); g_clear_object (&self->size_group); + + G_OBJECT_CLASS (eap_method_peap_parent_class)->dispose (object); } static gboolean -validate (EAPMethod *parent, GError **error) +validate (EAPMethod *method, GError **error) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; + EAPMethodPEAP *self = EAP_METHOD_PEAP (method); GtkTreeModel *model; GtkTreeIter iter; g_autoptr(EAPMethod) eap = NULL; @@ -102,9 +109,9 @@ ca_cert_not_required_toggled (EAPMethodPEAP *self) } static void -add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) +add_to_size_group (EAPMethod *method, GtkSizeGroup *group) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; + EAPMethodPEAP *self = EAP_METHOD_PEAP (method); GtkTreeModel *model; GtkTreeIter iter; g_autoptr(EAPMethod) eap = NULL; @@ -126,9 +133,9 @@ add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) } static void -fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFlags flags) +fill_connection (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags flags) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; + EAPMethodPEAP *self = EAP_METHOD_PEAP (method); NMSetting8021x *s_8021x; NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; const char *text; @@ -154,7 +161,7 @@ fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFla g_warning ("Couldn't read CA certificate '%s': %s", filename, error ? error->message : "(unknown)"); ca_cert_error = TRUE; } - eap_method_ca_cert_ignore_set (parent, connection, filename, ca_cert_error); + eap_method_ca_cert_ignore_set (method, connection, filename, ca_cert_error); peapver_active = gtk_combo_box_get_active (self->version_combo); switch (peapver_active) { @@ -286,31 +293,31 @@ inner_auth_combo_init (EAPMethodPEAP *self, } static void -update_secrets (EAPMethod *parent, NMConnection *connection) +update_secrets (EAPMethod *method, NMConnection *connection) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; - eap_method_phase2_update_secrets_helper (parent, + EAPMethodPEAP *self = EAP_METHOD_PEAP (method); + eap_method_phase2_update_secrets_helper (method, connection, self->inner_auth_combo, I_METHOD_COLUMN); } static GtkWidget * -get_widget (EAPMethod *parent) +get_widget (EAPMethod *method) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; + EAPMethodPEAP *self = EAP_METHOD_PEAP (method); return GTK_WIDGET (self->grid); } static GtkWidget * -get_default_field (EAPMethod *parent) +get_default_field (EAPMethod *method) { - EAPMethodPEAP *self = (EAPMethodPEAP *) parent; + EAPMethodPEAP *self = EAP_METHOD_PEAP (method); return GTK_WIDGET (self->anon_identity_entry); } static const gchar * -get_password_flags_name (EAPMethod *parent) +get_password_flags_name (EAPMethod *method) { return NM_SETTING_802_1X_PASSWORD; } @@ -321,33 +328,44 @@ changed_cb (EAPMethodPEAP *self) wireless_security_notify_changed (self->sec_parent); } +static void +eap_method_peap_init (EAPMethodPEAP *self) +{ +} + +static void +eap_method_peap_class_init (EAPMethodPEAPClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = eap_method_peap_dispose; +} + +static void +eap_method_iface_init (EAPMethodInterface *iface) +{ + iface->validate = validate; + iface->add_to_size_group = add_to_size_group; + iface->fill_connection = fill_connection; + iface->update_secrets = update_secrets; + iface->get_widget = get_widget; + iface->get_default_field = get_default_field; + iface->get_password_flags_name = get_password_flags_name; +} + EAPMethodPEAP * eap_method_peap_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean is_editor, gboolean secrets_only) { - EAPMethod *parent; EAPMethodPEAP *self; GtkFileFilter *filter; NMSetting8021x *s_8021x = NULL; const char *filename; g_autoptr(GError) error = NULL; - parent = eap_method_init (sizeof (EAPMethodPEAP), - validate, - add_to_size_group, - fill_connection, - update_secrets, - get_widget, - get_default_field, - get_password_flags_name, - NULL, - destroy); - if (!parent) - return NULL; - - self = (EAPMethodPEAP *) parent; + self = g_object_new (eap_method_peap_get_type (), NULL); self->sec_parent = ws_parent; self->is_editor = is_editor; @@ -388,7 +406,7 @@ eap_method_peap_new (WirelessSecurity *ws_parent, gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (self->ca_cert_button), filename); } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->ca_cert_not_required_check), - !filename && eap_method_ca_cert_ignore_get (parent, connection)); + !filename && eap_method_ca_cert_ignore_get (EAP_METHOD (self), connection)); } inner_auth_combo_init (self, connection, s_8021x, secrets_only); diff --git a/panels/network/wireless-security/eap-method-peap.h b/panels/network/wireless-security/eap-method-peap.h index 45625fb93..64952c689 100644 --- a/panels/network/wireless-security/eap-method-peap.h +++ b/panels/network/wireless-security/eap-method-peap.h @@ -20,20 +20,17 @@ * (C) Copyright 2007 - 2010 Red Hat, Inc. */ -#ifndef EAP_METHOD_PEAP_H -#define EAP_METHOD_PEAP_H +#pragma once #include "wireless-security.h" -typedef struct _EAPMethodPEAP EAPMethodPEAP; +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (EAPMethodPEAP, eap_method_peap, EAP, METHOD_PEAP, GObject) EAPMethodPEAP *eap_method_peap_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean is_editor, gboolean secrets_only); -static void eap_method_peap_unref (EAPMethodPEAP *method) { eap_method_unref (EAP_METHOD (method)); } -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethodPEAP, eap_method_peap_unref) - -#endif /* EAP_METHOD_PEAP_H */ - +G_END_DECLS diff --git a/panels/network/wireless-security/eap-method-simple.c b/panels/network/wireless-security/eap-method-simple.c index 599b440f6..2eabf64d7 100644 --- a/panels/network/wireless-security/eap-method-simple.c +++ b/panels/network/wireless-security/eap-method-simple.c @@ -33,7 +33,7 @@ #include "utils.h" struct _EAPMethodSimple { - EAPMethod parent; + GObject parent; GtkBuilder *builder; GtkGrid *grid; @@ -51,6 +51,11 @@ struct _EAPMethodSimple { guint idle_func_id; }; +static void eap_method_iface_init (EAPMethodInterface *); + +G_DEFINE_TYPE_WITH_CODE (EAPMethodSimple, eap_method_simple, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (eap_method_get_type (), eap_method_iface_init)) + static void show_toggled_cb (EAPMethodSimple *self) { @@ -68,9 +73,9 @@ always_ask_selected (GtkEntry *passwd_entry) } static gboolean -validate (EAPMethod *parent, GError **error) +validate (EAPMethod *method, GError **error) { - EAPMethodSimple *self = (EAPMethodSimple *)parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); const char *text; gboolean ret = TRUE; @@ -101,9 +106,9 @@ validate (EAPMethod *parent, GError **error) } static void -add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) +add_to_size_group (EAPMethod *method, GtkSizeGroup *group) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); gtk_size_group_add_widget (group, GTK_WIDGET (self->username_label)); gtk_size_group_add_widget (group, GTK_WIDGET (self->password_label)); } @@ -126,9 +131,9 @@ static const EapType eap_table[EAP_METHOD_SIMPLE_TYPE_LAST] = { }; static void -fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFlags prev_flags) +fill_connection (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags prev_flags) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); NMSetting8021x *s_8021x; gboolean not_saved = FALSE; NMSettingSecretFlags flags; @@ -140,11 +145,11 @@ fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFla /* If this is the main EAP method, clear any existing methods because the * user-selected on will replace it. */ - if (eap_method_get_phase2 (parent) == FALSE) + if (eap_method_get_phase2 (method) == FALSE) nm_setting_802_1x_clear_eap_methods (s_8021x); eap_type = &eap_table[self->type]; - if (eap_method_get_phase2 (parent)) { + if (eap_method_get_phase2 (method)) { /* If the outer EAP method (TLS, TTLS, PEAP, etc) allows inner/phase2 * EAP methods (which only TTLS allows) *and* the inner/phase2 method * supports being an inner EAP method, then set PHASE2_AUTHEAP. @@ -183,9 +188,9 @@ fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFla } static void -update_secrets (EAPMethod *parent, NMConnection *connection) +update_secrets (EAPMethod *method, NMConnection *connection) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); helper_fill_secret_entry (connection, self->password_entry, NM_TYPE_SETTING_802_1X, @@ -193,29 +198,29 @@ update_secrets (EAPMethod *parent, NMConnection *connection) } static GtkWidget * -get_widget (EAPMethod *parent) +get_widget (EAPMethod *method) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); return GTK_WIDGET (self->grid); } static GtkWidget * -get_default_field (EAPMethod *parent) +get_default_field (EAPMethod *method) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); return GTK_WIDGET (self->username_entry); } static const gchar * -get_password_flags_name (EAPMethod *parent) +get_password_flags_name (EAPMethod *method) { return NM_SETTING_802_1X_PASSWORD; } static const gboolean -get_phase2 (EAPMethod *parent) +get_phase2 (EAPMethod *method) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (method); return self->flags & EAP_METHOD_SIMPLE_FLAG_PHASE2; } @@ -283,9 +288,9 @@ widgets_unrealized (EAPMethodSimple *self) } static void -destroy (EAPMethod *parent) +eap_method_simple_dispose (GObject *object) { - EAPMethodSimple *self = (EAPMethodSimple *) parent; + EAPMethodSimple *self = EAP_METHOD_SIMPLE (object); g_clear_object (&self->builder); g_signal_handlers_disconnect_by_data (self->grid, self); @@ -295,6 +300,8 @@ destroy (EAPMethod *parent) g_signal_handlers_disconnect_by_data (self->show_password_check, self); nm_clear_g_source (&self->idle_func_id); + + G_OBJECT_CLASS (eap_method_simple_parent_class)->dispose (object); } static void @@ -303,31 +310,43 @@ changed_cb (EAPMethodSimple *self) wireless_security_notify_changed (self->ws_parent); } +static void +eap_method_simple_init (EAPMethodSimple *self) +{ +} + +static void +eap_method_simple_class_init (EAPMethodSimpleClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = eap_method_simple_dispose; +} + +static void +eap_method_iface_init (EAPMethodInterface *iface) +{ + iface->validate = validate; + iface->add_to_size_group = add_to_size_group; + iface->fill_connection = fill_connection; + iface->update_secrets = update_secrets; + iface->get_widget = get_widget; + iface->get_default_field = get_default_field; + iface->get_password_flags_name = get_password_flags_name; + iface->get_phase2 = get_phase2; +} + EAPMethodSimple * eap_method_simple_new (WirelessSecurity *ws_parent, NMConnection *connection, EAPMethodSimpleType type, EAPMethodSimpleFlags flags) { - EAPMethod *parent; EAPMethodSimple *self; NMSetting8021x *s_8021x = NULL; g_autoptr(GError) error = NULL; - parent = eap_method_init (sizeof (EAPMethodSimple), - validate, - add_to_size_group, - fill_connection, - update_secrets, - get_widget, - get_default_field, - get_password_flags_name, - get_phase2, - destroy); - if (!parent) - return NULL; - - self = (EAPMethodSimple *) parent; + self = g_object_new (eap_method_simple_get_type (), NULL); self->ws_parent = ws_parent; self->flags = flags; self->type = type; diff --git a/panels/network/wireless-security/eap-method-simple.h b/panels/network/wireless-security/eap-method-simple.h index 8a2c3400e..be418dd09 100644 --- a/panels/network/wireless-security/eap-method-simple.h +++ b/panels/network/wireless-security/eap-method-simple.h @@ -20,11 +20,14 @@ * (C) Copyright 2007 - 2010 Red Hat, Inc. */ -#ifndef EAP_METHOD_SIMPLE_H -#define EAP_METHOD_SIMPLE_H +#pragma once #include "wireless-security.h" +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (EAPMethodSimple, eap_method_simple, EAP, METHOD_SIMPLE, GObject) + typedef enum { /* NOTE: when updating this table, also update eap_methods[] */ EAP_METHOD_SIMPLE_TYPE_PAP = 0, @@ -52,15 +55,9 @@ typedef enum { EAP_METHOD_SIMPLE_FLAG_SECRETS_ONLY = 0x08 } EAPMethodSimpleFlags; -typedef struct _EAPMethodSimple EAPMethodSimple; - EAPMethodSimple *eap_method_simple_new (WirelessSecurity *ws_parent, NMConnection *connection, EAPMethodSimpleType type, EAPMethodSimpleFlags flags); -static void eap_method_simple_unref (EAPMethodSimple *method) { eap_method_unref (EAP_METHOD (method)); } -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethodSimple, eap_method_simple_unref) - -#endif /* EAP_METHOD_SIMPLE_H */ - +G_END_DECLS diff --git a/panels/network/wireless-security/eap-method-tls.c b/panels/network/wireless-security/eap-method-tls.c index 13e85689a..8263d56e6 100644 --- a/panels/network/wireless-security/eap-method-tls.c +++ b/panels/network/wireless-security/eap-method-tls.c @@ -33,7 +33,7 @@ #include "utils.h" struct _EAPMethodTLS { - EAPMethod parent; + GObject parent; GtkBuilder *builder; GtkFileChooserButton *ca_cert_button; @@ -56,12 +56,19 @@ struct _EAPMethodTLS { gboolean editing_connection; }; +static void eap_method_iface_init (EAPMethodInterface *); + +G_DEFINE_TYPE_WITH_CODE (EAPMethodTLS, eap_method_tls, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (eap_method_get_type (), eap_method_iface_init)) + static void -destroy (EAPMethod *parent) +eap_method_tls_dispose (GObject *object) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (object); g_clear_object (&self->builder); + + G_OBJECT_CLASS (eap_method_tls_parent_class)->dispose (object); } static void @@ -74,9 +81,9 @@ show_toggled_cb (EAPMethodTLS *self) } static gboolean -validate (EAPMethod *parent, GError **error) +validate (EAPMethod *method, GError **error) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; const char *password, *identity; g_autoptr(GError) ca_cert_error = NULL; @@ -146,9 +153,9 @@ ca_cert_not_required_toggled (EAPMethodTLS *self) } static void -add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) +add_to_size_group (EAPMethod *method, GtkSizeGroup *group) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); gtk_size_group_add_widget (group, GTK_WIDGET (self->ca_cert_not_required_check)); gtk_size_group_add_widget (group, GTK_WIDGET (self->identity_label)); @@ -159,9 +166,9 @@ add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) } static void -fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFlags flags) +fill_connection (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags flags) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; NMSetting8021x *s_8021x; NMSettingSecretFlags secret_flags; @@ -246,13 +253,12 @@ fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFla ca_cert_error = TRUE; } } - eap_method_ca_cert_ignore_set (parent, connection, ca_filename, ca_cert_error); + eap_method_ca_cert_ignore_set (method, connection, ca_filename, ca_cert_error); } static void -private_key_picker_helper (EAPMethod *parent, const char *filename, gboolean changed) +private_key_picker_helper (EAPMethodTLS *self, const char *filename, gboolean changed) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; g_autoptr(NMSetting8021x) setting = NULL; NMSetting8021xCKFormat cert_format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; const char *password; @@ -296,12 +302,12 @@ private_key_picker_helper (EAPMethod *parent, const char *filename, gboolean cha static void private_key_picker_file_set_cb (GtkWidget *chooser, gpointer user_data) { - EAPMethod *parent = (EAPMethod *) user_data; + EAPMethodTLS *self = user_data; g_autofree gchar *filename = NULL; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser)); if (filename) - private_key_picker_helper (parent, filename, TRUE); + private_key_picker_helper (self, filename, TRUE); } static void reset_filter (GtkWidget *widget, GParamSpec *spec, gpointer user_data) @@ -323,10 +329,10 @@ changed_cb (EAPMethodTLS *self) } static void -setup_filepicker (GtkFileChooserButton *button, +setup_filepicker (EAPMethodTLS *self, + GtkFileChooserButton *button, const char *title, WirelessSecurity *ws_parent, - EAPMethod *parent, NMSetting8021x *s_8021x, SchemeFunc scheme_func, PathFunc path_func, @@ -353,12 +359,12 @@ setup_filepicker (GtkFileChooserButton *button, if (privkey) { g_signal_connect (button, "selection-changed", (GCallback) private_key_picker_file_set_cb, - parent); + self); if (filename) - private_key_picker_helper (parent, filename, FALSE); + private_key_picker_helper (self, filename, FALSE); } - g_signal_connect_swapped (button, "selection-changed", G_CALLBACK (changed_cb), parent); + g_signal_connect_swapped (button, "selection-changed", G_CALLBACK (changed_cb), self); filter = eap_method_default_file_chooser_filter_new (privkey); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (button), filter); @@ -373,9 +379,9 @@ setup_filepicker (GtkFileChooserButton *button, } static void -update_secrets (EAPMethod *parent, NMConnection *connection) +update_secrets (EAPMethod *method, NMConnection *connection) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); NMSetting8021x *s_8021x; HelperSecretFunc password_func; SchemeFunc scheme_func; @@ -407,33 +413,59 @@ update_secrets (EAPMethod *parent, NMConnection *connection) } static GtkWidget * -get_widget (EAPMethod *parent) +get_widget (EAPMethod *method) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); return GTK_WIDGET (self->grid); } static GtkWidget * -get_default_field (EAPMethod *parent) +get_default_field (EAPMethod *method) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); return GTK_WIDGET (self->identity_entry); } static const gchar * -get_password_flags_name (EAPMethod *parent) +get_password_flags_name (EAPMethod *method) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); return self->password_flags_name; } static gboolean -get_phase2 (EAPMethod *parent) +get_phase2 (EAPMethod *method) { - EAPMethodTLS *self = (EAPMethodTLS *) parent; + EAPMethodTLS *self = EAP_METHOD_TLS (method); return self->phase2; } +static void +eap_method_tls_init (EAPMethodTLS *self) +{ +} + +static void +eap_method_tls_class_init (EAPMethodTLSClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = eap_method_tls_dispose; +} + +static void +eap_method_iface_init (EAPMethodInterface *iface) +{ + iface->validate = validate; + iface->add_to_size_group = add_to_size_group; + iface->fill_connection = fill_connection; + iface->update_secrets = update_secrets; + iface->get_widget = get_widget; + iface->get_default_field = get_default_field; + iface->get_password_flags_name = get_password_flags_name; + iface->get_phase2 = get_phase2; +} + EAPMethodTLS * eap_method_tls_new (WirelessSecurity *ws_parent, NMConnection *connection, @@ -441,25 +473,11 @@ eap_method_tls_new (WirelessSecurity *ws_parent, gboolean secrets_only) { EAPMethodTLS *self; - EAPMethod *parent; NMSetting8021x *s_8021x = NULL; gboolean ca_not_required = FALSE; g_autoptr(GError) error = NULL; - parent = eap_method_init (sizeof (EAPMethodTLS), - validate, - add_to_size_group, - fill_connection, - update_secrets, - get_widget, - get_default_field, - get_password_flags_name, - get_phase2, - destroy); - if (!parent) - return NULL; - - self = (EAPMethodTLS *) parent; + self = g_object_new (eap_method_tls_get_type (), NULL); self->phase2 = phase2; self->password_flags_name = phase2 ? NM_SETTING_802_1X_PHASE2_PRIVATE_KEY_PASSWORD : @@ -496,32 +514,35 @@ eap_method_tls_new (WirelessSecurity *ws_parent, if (s_8021x && nm_setting_802_1x_get_identity (s_8021x)) gtk_entry_set_text (self->identity_entry, nm_setting_802_1x_get_identity (s_8021x)); - setup_filepicker (self->user_cert_button, + setup_filepicker (self, + self->user_cert_button, _("Choose your personal certificate"), - ws_parent, parent, s_8021x, + ws_parent, s_8021x, phase2 ? nm_setting_802_1x_get_phase2_client_cert_scheme : nm_setting_802_1x_get_client_cert_scheme, phase2 ? nm_setting_802_1x_get_phase2_client_cert_path : nm_setting_802_1x_get_client_cert_path, FALSE, TRUE); - setup_filepicker (self->ca_cert_button, + setup_filepicker (self, + self->ca_cert_button, _("Choose a Certificate Authority certificate"), - ws_parent, parent, s_8021x, + ws_parent, s_8021x, phase2 ? nm_setting_802_1x_get_phase2_ca_cert_scheme : nm_setting_802_1x_get_ca_cert_scheme, phase2 ? nm_setting_802_1x_get_phase2_ca_cert_path : nm_setting_802_1x_get_ca_cert_path, FALSE, FALSE); - setup_filepicker (self->private_key_button, + setup_filepicker (self, + self->private_key_button, _("Choose your private key"), - ws_parent, parent, s_8021x, + ws_parent, s_8021x, phase2 ? nm_setting_802_1x_get_phase2_private_key_scheme : nm_setting_802_1x_get_private_key_scheme, phase2 ? nm_setting_802_1x_get_phase2_private_key_path : nm_setting_802_1x_get_private_key_path, TRUE, FALSE); - if (connection && eap_method_ca_cert_ignore_get (parent, connection)) + if (connection && eap_method_ca_cert_ignore_get (EAP_METHOD (self), connection)) ca_not_required = !gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (self->ca_cert_button)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->ca_cert_not_required_check), ca_not_required); /* Fill secrets, if any */ if (connection) - update_secrets (parent, connection); + update_secrets (EAP_METHOD (self), connection); g_signal_connect_swapped (self->private_key_password_entry, "changed", G_CALLBACK (changed_cb), self); diff --git a/panels/network/wireless-security/eap-method-tls.h b/panels/network/wireless-security/eap-method-tls.h index 341580f09..3507b0ffc 100644 --- a/panels/network/wireless-security/eap-method-tls.h +++ b/panels/network/wireless-security/eap-method-tls.h @@ -20,20 +20,17 @@ * (C) Copyright 2007 - 2010 Red Hat, Inc. */ -#ifndef EAP_METHOD_TLS_H -#define EAP_METHOD_TLS_H +#pragma once #include "wireless-security.h" -typedef struct _EAPMethodTLS EAPMethodTLS; +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (EAPMethodTLS, eap_method_tls, EAP, METHOD_TLS, GObject) EAPMethodTLS *eap_method_tls_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean phase2, gboolean secrets_only); -static void eap_method_tls_unref (EAPMethodTLS *method) { eap_method_unref (EAP_METHOD (method)); } -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethodTLS, eap_method_tls_unref) - -#endif /* EAP_METHOD_TLS_H */ - +G_END_DECLS diff --git a/panels/network/wireless-security/eap-method-ttls.c b/panels/network/wireless-security/eap-method-ttls.c index 9a9553dec..e21c2f83e 100644 --- a/panels/network/wireless-security/eap-method-ttls.c +++ b/panels/network/wireless-security/eap-method-ttls.c @@ -35,7 +35,7 @@ #define I_METHOD_COLUMN 1 struct _EAPMethodTTLS { - EAPMethod parent; + GObject parent; GtkBuilder *builder; GtkEntry *anon_identity_entry; @@ -55,19 +55,26 @@ struct _EAPMethodTTLS { gboolean is_editor; }; +static void eap_method_iface_init (EAPMethodInterface *); + +G_DEFINE_TYPE_WITH_CODE (EAPMethodTTLS, eap_method_ttls, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (eap_method_get_type (), eap_method_iface_init)) + static void -destroy (EAPMethod *parent) +eap_method_ttls_dispose (GObject *object) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; + EAPMethodTTLS *self = EAP_METHOD_TTLS (object); g_clear_object (&self->builder); g_clear_object (&self->size_group); + + G_OBJECT_CLASS (eap_method_ttls_parent_class)->dispose (object); } static gboolean -validate (EAPMethod *parent, GError **error) +validate (EAPMethod *method, GError **error) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; + EAPMethodTTLS *self = EAP_METHOD_TTLS (method); GtkTreeModel *model; GtkTreeIter iter; g_autoptr(EAPMethod) eap = NULL; @@ -102,9 +109,9 @@ ca_cert_not_required_toggled (EAPMethodTTLS *self) } static void -add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) +add_to_size_group (EAPMethod *method, GtkSizeGroup *group) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; + EAPMethodTTLS *self = EAP_METHOD_TTLS (method); GtkTreeModel *model; GtkTreeIter iter; g_autoptr(EAPMethod) eap = NULL; @@ -126,9 +133,9 @@ add_to_size_group (EAPMethod *parent, GtkSizeGroup *group) } static void -fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFlags flags) +fill_connection (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags flags) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; + EAPMethodTTLS *self = EAP_METHOD_TTLS (method); NMSetting8021x *s_8021x; NMSetting8021xCKFormat format = NM_SETTING_802_1X_CK_FORMAT_UNKNOWN; const char *text; @@ -157,7 +164,7 @@ fill_connection (EAPMethod *parent, NMConnection *connection, NMSettingSecretFla g_warning ("Couldn't read CA certificate '%s': %s", filename, error ? error->message : "(unknown)"); ca_cert_error = TRUE; } - eap_method_ca_cert_ignore_set (parent, connection, filename, ca_cert_error); + eap_method_ca_cert_ignore_set (method, connection, filename, ca_cert_error); model = gtk_combo_box_get_model (self->inner_auth_combo); gtk_combo_box_get_active_iter (self->inner_auth_combo, &iter); @@ -339,31 +346,31 @@ inner_auth_combo_init (EAPMethodTTLS *self, } static void -update_secrets (EAPMethod *parent, NMConnection *connection) +update_secrets (EAPMethod *method, NMConnection *connection) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; - eap_method_phase2_update_secrets_helper (parent, + EAPMethodTTLS *self = EAP_METHOD_TTLS (method); + eap_method_phase2_update_secrets_helper (method, connection, self->inner_auth_combo, I_METHOD_COLUMN); } static GtkWidget * -get_widget (EAPMethod *parent) +get_widget (EAPMethod *method) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; + EAPMethodTTLS *self = EAP_METHOD_TTLS (method); return GTK_WIDGET (self->grid); } static GtkWidget * -get_default_field (EAPMethod *parent) +get_default_field (EAPMethod *method) { - EAPMethodTTLS *self = (EAPMethodTTLS *) parent; + EAPMethodTTLS *self = EAP_METHOD_TTLS (method); return GTK_WIDGET (self->anon_identity_entry); } static const gchar * -get_password_flags_name (EAPMethod *parent) +get_password_flags_name (EAPMethod *method) { return NM_SETTING_802_1X_PASSWORD; } @@ -374,33 +381,44 @@ changed_cb (EAPMethodTTLS *self) wireless_security_notify_changed (self->sec_parent); } +static void +eap_method_ttls_init (EAPMethodTTLS *self) +{ +} + +static void +eap_method_ttls_class_init (EAPMethodTTLSClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = eap_method_ttls_dispose; +} + +static void +eap_method_iface_init (EAPMethodInterface *iface) +{ + iface->validate = validate; + iface->add_to_size_group = add_to_size_group; + iface->fill_connection = fill_connection; + iface->update_secrets = update_secrets; + iface->get_widget = get_widget; + iface->get_default_field = get_default_field; + iface->get_password_flags_name = get_password_flags_name; +} + EAPMethodTTLS * eap_method_ttls_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean is_editor, gboolean secrets_only) { - EAPMethod *parent; EAPMethodTTLS *self; GtkFileFilter *filter; NMSetting8021x *s_8021x = NULL; const char *filename; g_autoptr(GError) error = NULL; - parent = eap_method_init (sizeof (EAPMethodTTLS), - validate, - add_to_size_group, - fill_connection, - update_secrets, - get_widget, - get_default_field, - get_password_flags_name, - NULL, - destroy); - if (!parent) - return NULL; - - self = (EAPMethodTTLS *) parent; + self = g_object_new (eap_method_ttls_get_type (), NULL); self->sec_parent = ws_parent; self->is_editor = is_editor; @@ -441,7 +459,7 @@ eap_method_ttls_new (WirelessSecurity *ws_parent, gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (self->ca_cert_button), filename); } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->ca_cert_not_required_check), - !filename && eap_method_ca_cert_ignore_get (parent, connection)); + !filename && eap_method_ca_cert_ignore_get (EAP_METHOD (self), connection)); } if (s_8021x && nm_setting_802_1x_get_anonymous_identity (s_8021x)) diff --git a/panels/network/wireless-security/eap-method-ttls.h b/panels/network/wireless-security/eap-method-ttls.h index 836a6d9e6..58af57805 100644 --- a/panels/network/wireless-security/eap-method-ttls.h +++ b/panels/network/wireless-security/eap-method-ttls.h @@ -20,20 +20,17 @@ * (C) Copyright 2007 - 2010 Red Hat, Inc. */ -#ifndef EAP_METHOD_TTLS_H -#define EAP_METHOD_TTLS_H +#pragma once #include "wireless-security.h" -typedef struct _EAPMethodTTLS EAPMethodTTLS; +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE (EAPMethodTTLS, eap_method_ttls, EAP, METHOD_TTLS, GObject) EAPMethodTTLS *eap_method_ttls_new (WirelessSecurity *ws_parent, NMConnection *connection, gboolean is_editor, gboolean secrets_only); -static void eap_method_ttls_unref (EAPMethodTTLS *method) { eap_method_unref (EAP_METHOD (method)); } -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethodTTLS, eap_method_ttls_unref) - -#endif /* EAP_METHOD_TTLS_H */ - +G_END_DECLS diff --git a/panels/network/wireless-security/eap-method.c b/panels/network/wireless-security/eap-method.c index 3bad3d9b6..e1a147c03 100644 --- a/panels/network/wireless-security/eap-method.c +++ b/panels/network/wireless-security/eap-method.c @@ -33,18 +33,11 @@ #include "utils.h" #include "helpers.h" -GType -eap_method_get_type (void) +G_DEFINE_INTERFACE (EAPMethod, eap_method, G_TYPE_OBJECT) + +static void +eap_method_default_init (EAPMethodInterface *iface) { - static GType type_id = 0; - - if (!type_id) { - type_id = g_boxed_type_register_static ("CcEAPMethod", - (GBoxedCopyFunc) eap_method_ref, - (GBoxedFreeFunc) eap_method_unref); - } - - return type_id; } GtkWidget * @@ -52,7 +45,7 @@ eap_method_get_widget (EAPMethod *self) { g_return_val_if_fail (self != NULL, NULL); - return self->get_widget (self); + return EAP_METHOD_GET_IFACE (self)->get_widget (self); } GtkWidget * @@ -60,7 +53,7 @@ eap_method_get_default_field (EAPMethod *self) { g_return_val_if_fail (self != NULL, NULL); - return self->get_default_field (self); + return EAP_METHOD_GET_IFACE (self)->get_default_field (self); } const gchar * @@ -68,8 +61,8 @@ eap_method_get_password_flags_name (EAPMethod *self) { g_return_val_if_fail (self != NULL, NULL); - if (self->get_password_flags_name) - return self->get_password_flags_name (self); + if (EAP_METHOD_GET_IFACE (self)->get_password_flags_name) + return EAP_METHOD_GET_IFACE (self)->get_password_flags_name (self); else return NULL; } @@ -79,8 +72,8 @@ eap_method_get_phase2 (EAPMethod *self) { g_return_val_if_fail (self != NULL, FALSE); - if (self->get_phase2) - return self->get_phase2 (self); + if (EAP_METHOD_GET_IFACE (self)->get_phase2) + return EAP_METHOD_GET_IFACE (self)->get_phase2 (self); else return FALSE; } @@ -92,8 +85,7 @@ eap_method_validate (EAPMethod *self, GError **error) g_return_val_if_fail (self != NULL, FALSE); - g_assert (self->validate); - result = (*(self->validate)) (self, error); + result = (*(EAP_METHOD_GET_IFACE (self)->validate)) (self, error); if (!result && error && !*error) g_set_error_literal (error, NMA_ERROR, NMA_ERROR_GENERIC, _("undefined error in 802.1X security (wpa-eap)")); return result; @@ -105,8 +97,7 @@ eap_method_add_to_size_group (EAPMethod *self, GtkSizeGroup *group) g_return_if_fail (self != NULL); g_return_if_fail (group != NULL); - g_assert (self->add_to_size_group); - return (*(self->add_to_size_group)) (self, group); + return (*(EAP_METHOD_GET_IFACE (self)->add_to_size_group)) (self, group); } void @@ -117,8 +108,7 @@ eap_method_fill_connection (EAPMethod *self, g_return_if_fail (self != NULL); g_return_if_fail (connection != NULL); - g_assert (self->fill_connection); - return (*(self->fill_connection)) (self, connection, flags); + return (*(EAP_METHOD_GET_IFACE (self)->fill_connection)) (self, connection, flags); } void @@ -141,72 +131,12 @@ eap_method_phase2_update_secrets_helper (EAPMethod *self, g_autoptr(EAPMethod) eap = NULL; gtk_tree_model_get (model, &iter, column, &eap, -1); - if (eap && eap->update_secrets) - eap->update_secrets (self, connection); + if (eap && EAP_METHOD_GET_IFACE (eap)->update_secrets) + EAP_METHOD_GET_IFACE (eap)->update_secrets (self, connection); } while (gtk_tree_model_iter_next (model, &iter)); } } -EAPMethod * -eap_method_init (gsize obj_size, - EMValidateFunc validate, - EMAddToSizeGroupFunc add_to_size_group, - EMFillConnectionFunc fill_connection, - EMUpdateSecretsFunc update_secrets, - EMGetWidgetFunc get_widget, - EMGetWidgetFunc get_default_field, - EMGetStringFunc get_password_flags_name, - EMGetBooleanFunc get_phase2, - EMDestroyFunc destroy) -{ - g_autoptr(EAPMethod) self = NULL; - - g_return_val_if_fail (obj_size > 0, NULL); - - self = g_slice_alloc0 (obj_size); - g_assert (self); - - self->refcount = 1; - self->obj_size = obj_size; - self->validate = validate; - self->add_to_size_group = add_to_size_group; - self->fill_connection = fill_connection; - self->update_secrets = update_secrets; - self->get_widget = get_widget; - self->get_default_field = get_default_field; - self->get_password_flags_name = get_password_flags_name; - self->get_phase2 = get_phase2; - self->destroy = destroy; - - return g_steal_pointer (&self); -} - - -EAPMethod * -eap_method_ref (EAPMethod *self) -{ - g_return_val_if_fail (self != NULL, NULL); - g_return_val_if_fail (self->refcount > 0, NULL); - - self->refcount++; - return self; -} - -void -eap_method_unref (EAPMethod *self) -{ - g_return_if_fail (self != NULL); - g_return_if_fail (self->refcount > 0); - - self->refcount--; - if (self->refcount == 0) { - if (self->destroy) - self->destroy (self); - - g_slice_free1 (self->obj_size, self); - } -} - gboolean eap_method_validate_filepicker (GtkFileChooser *chooser, guint32 item_type, diff --git a/panels/network/wireless-security/eap-method.h b/panels/network/wireless-security/eap-method.h index 199dbfc06..3910a9e9f 100644 --- a/panels/network/wireless-security/eap-method.h +++ b/panels/network/wireless-security/eap-method.h @@ -20,40 +20,28 @@ * Copyright 2007 - 2014 Red Hat, Inc. */ -#ifndef EAP_METHOD_H -#define EAP_METHOD_H +#pragma once +#include #include -typedef struct _EAPMethod EAPMethod; +G_BEGIN_DECLS -typedef void (*EMAddToSizeGroupFunc) (EAPMethod *method, GtkSizeGroup *group); -typedef void (*EMFillConnectionFunc) (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags flags); -typedef void (*EMUpdateSecretsFunc) (EAPMethod *method, NMConnection *connection); -typedef void (*EMDestroyFunc) (EAPMethod *method); -typedef gboolean (*EMValidateFunc) (EAPMethod *method, GError **error); -typedef GtkWidget* (*EMGetWidgetFunc) (EAPMethod *method); -typedef const gchar* (*EMGetStringFunc) (EAPMethod *method); -typedef gboolean (*EMGetBooleanFunc) (EAPMethod *method); +G_DECLARE_INTERFACE (EAPMethod, eap_method, EAP, METHOD, GObject) -struct _EAPMethod { - guint32 refcount; - gsize obj_size; +struct _EAPMethodInterface { + GTypeInterface g_iface; - EMAddToSizeGroupFunc add_to_size_group; - EMFillConnectionFunc fill_connection; - EMUpdateSecretsFunc update_secrets; - EMValidateFunc validate; - EMGetWidgetFunc get_widget; - EMGetWidgetFunc get_default_field; - EMGetStringFunc get_password_flags_name; - EMGetBooleanFunc get_phase2; - EMDestroyFunc destroy; + void (*add_to_size_group) (EAPMethod *method, GtkSizeGroup *group); + void (*fill_connection) (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags flags); + void (*update_secrets) (EAPMethod *method, NMConnection *connection); + gboolean (*validate) (EAPMethod *method, GError **error); + GtkWidget* (*get_widget) (EAPMethod *method); + GtkWidget* (*get_default_field) (EAPMethod *method); + const gchar* (*get_password_flags_name) (EAPMethod *method); + gboolean (*get_phase2) (EAPMethod *method); }; -#define EAP_METHOD(x) ((EAPMethod *) x) - - GtkWidget *eap_method_get_widget (EAPMethod *method); GtkWidget *eap_method_get_default_field (EAPMethod *method); @@ -70,25 +58,8 @@ void eap_method_fill_connection (EAPMethod *method, NMConnection *connection, NMSettingSecretFlags flags); -EAPMethod *eap_method_ref (EAPMethod *method); - -void eap_method_unref (EAPMethod *method); - -GType eap_method_get_type (void); - /* Below for internal use only */ -EAPMethod *eap_method_init (gsize obj_size, - EMValidateFunc validate, - EMAddToSizeGroupFunc add_to_size_group, - EMFillConnectionFunc fill_connection, - EMUpdateSecretsFunc update_secrets, - EMGetWidgetFunc get_widget, - EMGetWidgetFunc get_default_field, - EMGetStringFunc get_password_flags_name, - EMGetBooleanFunc get_phase2, - EMDestroyFunc destroy); - GtkFileFilter * eap_method_default_file_chooser_filter_new (gboolean privkey); gboolean eap_method_is_encrypted_private_key (const char *path); @@ -122,6 +93,4 @@ gboolean eap_method_ca_cert_ignore_get (EAPMethod *method, NMConnection *connect void eap_method_ca_cert_ignore_save (NMConnection *connection); void eap_method_ca_cert_ignore_load (NMConnection *connection); -G_DEFINE_AUTOPTR_CLEANUP_FUNC (EAPMethod, eap_method_unref) - -#endif /* EAP_METHOD_H */ +G_END_DECLS