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);
/*********************************************************************************************/
/*********************************************************************************************/
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));
(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)
{
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);
}
g_hash_table_unref (priv->ip4_device_routes.entries);
+ g_clear_object (&priv->platform);
+
G_OBJECT_CLASS (nm_route_manager_parent_class)->finalize (object);
}
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);
}
#define NM_IS_ROUTE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_ROUTE_MANAGER))
#define NM_ROUTE_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ROUTE_MANAGER, NMRouteManagerClass))
+#define NM_ROUTE_MANAGER_PLATFORM "platform"
+
struct _NMRouteManager {
GObject parent;
};
void nm_route_manager_ip4_route_register_device_route_purge_list (NMRouteManager *self, GArray *device_route_purge_list);
NMRouteManager *nm_route_manager_get (void);
+NMRouteManager *nm_route_manager_new (NMPlatform *platform);
#endif /* NM_ROUTE_MANAGER_H */