diff options
Diffstat (limited to 'src/nm-route-manager.c')
| -rw-r--r-- | src/nm-route-manager.c | 48 |
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); } |