summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-08-19 14:55:58 +0200
committerThomas Haller <thaller@redhat.com>2016-08-23 10:51:18 +0200
commitd52195475bf8a0b06b8050e8b38a4bbad1ad97c5 (patch)
tree334500372fb1db7fed39925682d67bc060b5520e
parentc5682d601b14da72db1ad01f9e2a426d716d7265 (diff)
downloadNetworkManager-d52195475bf8a0b06b8050e8b38a4bbad1ad97c5.tar.gz
vpn: embed private data in NMVpnConnection structure
-rw-r--r--src/vpn-manager/nm-vpn-connection.c81
-rw-r--r--src/vpn-manager/nm-vpn-connection.h22
2 files changed, 58 insertions, 45 deletions
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index ad4c6a2446..5bf53daf99 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -50,8 +50,6 @@
#include "nmdbus-vpn-connection.h"
-G_DEFINE_TYPE (NMVpnConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
-
typedef enum {
/* Only system secrets */
SECRETS_REQ_SYSTEM = 0,
@@ -80,6 +78,27 @@ typedef enum {
STATE_FAILED,
} VpnState;
+enum {
+ VPN_STATE_CHANGED,
+ INTERNAL_STATE_CHANGED,
+ INTERNAL_RETRY_AFTER_FAILURE,
+
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+enum {
+ PROP_0,
+ PROP_VPN_STATE,
+ PROP_BANNER,
+ PROP_IP4_CONFIG,
+ PROP_IP6_CONFIG,
+ PROP_MASTER = 2000,
+
+ LAST_PROP
+};
+
typedef struct {
gboolean service_can_persist;
gboolean connection_can_persist;
@@ -128,29 +147,45 @@ typedef struct {
guint32 mtu;
} NMVpnConnectionPrivate;
-#define NM_VPN_CONNECTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_CONNECTION, NMVpnConnectionPrivate))
-
-enum {
- VPN_STATE_CHANGED,
- INTERNAL_STATE_CHANGED,
- INTERNAL_RETRY_AFTER_FAILURE,
-
- LAST_SIGNAL
+struct _NMVpnConnection {
+ NMActiveConnection parent;
+ NMVpnConnectionPrivate _priv;
};
-static guint signals[LAST_SIGNAL] = { 0 };
+struct _NMVpnConnectionClass {
+ NMActiveConnectionClass parent;
-enum {
- PROP_0,
- PROP_VPN_STATE,
- PROP_BANNER,
- PROP_IP4_CONFIG,
- PROP_IP6_CONFIG,
- PROP_MASTER = 2000,
+ /* Signals */
+ void (*vpn_state_changed) (NMVpnConnection *self,
+ NMVpnConnectionState new_state,
+ NMVpnConnectionStateReason reason);
- LAST_PROP
+ /* not exported over D-Bus */
+ void (*internal_state_changed) (NMVpnConnection *self,
+ NMVpnConnectionState new_state,
+ NMVpnConnectionState old_state,
+ NMVpnConnectionStateReason reason);
+
+ void (*internal_failed_retry) (NMVpnConnection *self);
};
+G_DEFINE_TYPE (NMVpnConnection, nm_vpn_connection, NM_TYPE_ACTIVE_CONNECTION)
+
+#define NM_VPN_CONNECTION_GET_PRIVATE(self) \
+ ({ \
+ /* preserve the const-ness of self. Unfortunately, that
+ * way, @self cannot be a void pointer */ \
+ typeof (self) _self = (self); \
+ \
+ /* Get compiler error if variable is of wrong type */ \
+ _nm_unused const NMVpnConnection *_self2 = (_self); \
+ \
+ nm_assert (NM_IS_VPN_CONNECTION (_self)); \
+ &_self->_priv; \
+ })
+
+/*****************************************************************************/
+
static NMSettingsConnection *_get_settings_connection (NMVpnConnection *self,
gboolean allow_missing);
@@ -2504,7 +2539,7 @@ device_changed (NMActiveConnection *active,
NMDevice *new_device,
NMDevice *old_device)
{
- NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (active);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE ((NMVpnConnection *) active);
if (!_service_and_connection_can_persist (NM_VPN_CONNECTION (active)))
return;
@@ -2577,7 +2612,7 @@ dispose (GObject *object)
static void
finalize (GObject *object)
{
- NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE ((NMVpnConnection *) object);
g_free (priv->banner);
g_free (priv->ip_iface);
@@ -2598,7 +2633,7 @@ static void
get_property (GObject *object, guint prop_id,
GValue *value, GParamSpec *pspec)
{
- NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE (object);
+ NMVpnConnectionPrivate *priv = NM_VPN_CONNECTION_GET_PRIVATE ((NMVpnConnection *) object);
NMDevice *parent_dev;
switch (prop_id) {
@@ -2630,8 +2665,6 @@ nm_vpn_connection_class_init (NMVpnConnectionClass *connection_class)
GObjectClass *object_class = G_OBJECT_CLASS (connection_class);
NMActiveConnectionClass *active_class = NM_ACTIVE_CONNECTION_CLASS (connection_class);
- g_type_class_add_private (connection_class, sizeof (NMVpnConnectionPrivate));
-
/* virtual methods */
object_class->get_property = get_property;
object_class->dispose = dispose;
diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h
index 6837432926..3fe5605467 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -47,27 +47,7 @@
#define NM_VPN_ROUTE_METRIC_DEFAULT 50
-
-struct _NMVpnConnection {
- NMActiveConnection parent;
-};
-
-typedef struct {
- NMActiveConnectionClass parent;
-
- /* Signals */
- void (*vpn_state_changed) (NMVpnConnection *self,
- NMVpnConnectionState new_state,
- NMVpnConnectionStateReason reason);
-
- /* not exported over D-Bus */
- void (*internal_state_changed) (NMVpnConnection *self,
- NMVpnConnectionState new_state,
- NMVpnConnectionState old_state,
- NMVpnConnectionStateReason reason);
-
- void (*internal_failed_retry) (NMVpnConnection *self);
-} NMVpnConnectionClass;
+typedef struct _NMVpnConnectionClass NMVpnConnectionClass;
GType nm_vpn_connection_get_type (void);