summary refs log tree commit diff
path: root/src/nm-route-manager.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2016-03-30 00:56:30 +0200
committerMichael Biebl <biebl@debian.org>2016-03-30 00:56:30 +0200
commitd9c99a29a0d3384c9c3d2adce430f5cb1134ab6a (patch)
treefa41baf72753961e71dd8d5bdbe2b89c9109e4f1 /src/nm-route-manager.c
parentc2de0d98ba39e0a1a970d066fd19be786092f376 (diff)
Imported Upstream version 1.1.92 upstream/1.1.92
Diffstat (limited to 'src/nm-route-manager.c')
-rw-r--r--src/nm-route-manager.c48
1 files changed, 44 insertions, 4 deletions
diff --git a/src/nm-route-manager.c b/src/nm-route-manager.c
index 84811d5a..3cf24118 100644
--- a/src/nm-route-manager.c
+++ b/src/nm-route-manager.c
@@ -73,6 +73,10 @@ typedef struct {
 
 G_DEFINE_TYPE (NMRouteManager, nm_route_manager, G_TYPE_OBJECT);
 
+NM_GOBJECT_PROPERTIES_DEFINE_BASE (
+	PROP_PLATFORM,
+);
+
 NM_DEFINE_SINGLETON_GETTER (NMRouteManager, nm_route_manager_get, NM_TYPE_ROUTE_MANAGER);
 
 /*********************************************************************************************/
@@ -1139,11 +1143,30 @@ static const VTableIP vtable_v6 = {
 /*********************************************************************************************/
 
 static void
-nm_route_manager_init (NMRouteManager *self)
+set_property (GObject *object, guint prop_id,
+              const GValue *value, GParamSpec *pspec)
 {
+	NMRouteManager *self = NM_ROUTE_MANAGER (object);
 	NMRouteManagerPrivate *priv = NM_ROUTE_MANAGER_GET_PRIVATE (self);
 
-	priv->platform = g_object_ref (NM_PLATFORM_GET);
+	switch (prop_id) {
+	case PROP_PLATFORM:
+		/* construct-only */
+		priv->platform = g_value_get_object (value) ? : NM_PLATFORM_GET;
+		if (!priv->platform)
+			g_return_if_reached ();
+		g_object_ref (priv->platform);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+nm_route_manager_init (NMRouteManager *self)
+{
+	NMRouteManagerPrivate *priv = NM_ROUTE_MANAGER_GET_PRIVATE (self);
 
 	priv->ip4_routes.entries = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP4Route));
 	priv->ip6_routes.entries = g_array_new (FALSE, FALSE, sizeof (NMPlatformIP6Route));
@@ -1159,6 +1182,14 @@ nm_route_manager_init (NMRouteManager *self)
 	                                                         (GDestroyNotify) _ip4_device_routes_purge_entry_free);
 }
 
+NMRouteManager *
+nm_route_manager_new (NMPlatform *platform)
+{
+	return g_object_new (NM_TYPE_ROUTE_MANAGER,
+	                     NM_ROUTE_MANAGER_PLATFORM, platform,
+	                     NULL);
+}
+
 static void
 dispose (GObject *object)
 {
@@ -1168,8 +1199,6 @@ dispose (GObject *object)
 	g_hash_table_remove_all (priv->ip4_device_routes.entries);
 	_ip4_device_routes_cancel (self);
 
-	g_clear_object (&priv->platform);
-
 	G_OBJECT_CLASS (nm_route_manager_parent_class)->dispose (object);
 }
 
@@ -1189,6 +1218,8 @@ finalize (GObject *object)
 
 	g_hash_table_unref (priv->ip4_device_routes.entries);
 
+	g_clear_object (&priv->platform);
+
 	G_OBJECT_CLASS (nm_route_manager_parent_class)->finalize (object);
 }
 
@@ -1200,6 +1231,15 @@ nm_route_manager_class_init (NMRouteManagerClass *klass)
 	g_type_class_add_private (klass, sizeof (NMRouteManagerPrivate));
 
 	/* virtual methods */
+	object_class->set_property = set_property;
 	object_class->dispose = dispose;
 	object_class->finalize = finalize;
+
+	obj_properties[PROP_PLATFORM] =
+	    g_param_spec_object (NM_ROUTE_MANAGER_PLATFORM, "", "",
+	                         NM_TYPE_PLATFORM,
+	                         G_PARAM_WRITABLE |
+	                         G_PARAM_CONSTRUCT_ONLY |
+	                         G_PARAM_STATIC_STRINGS);
+	g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
 }