default-route-manager: make NMDefaultRouteManager namespace aware
authorThomas Haller <thaller@redhat.com>
Tue, 8 Mar 2016 12:43:40 +0000 (13:43 +0100)
committerThomas Haller <thaller@redhat.com>
Tue, 15 Mar 2016 11:56:58 +0000 (12:56 +0100)
src/nm-default-route-manager.c
src/nm-default-route-manager.h

index 084749e..3ee634a 100644 (file)
@@ -58,6 +58,10 @@ typedef struct {
 
 G_DEFINE_TYPE (NMDefaultRouteManager, nm_default_route_manager, G_TYPE_OBJECT)
 
+NM_GOBJECT_PROPERTIES_DEFINE_BASE (
+       PROP_PLATFORM,
+);
+
 NM_DEFINE_SINGLETON_GETTER (NMDefaultRouteManager, nm_default_route_manager_get, NM_TYPE_DEFAULT_ROUTE_MANAGER);
 
 #define _NMLOG_PREFIX_NAME   "default-route"
@@ -1380,21 +1384,55 @@ _platform_changed_cb (NMPlatform *platform,
 
 /***********************************************************************************/
 
+static void
+set_property (GObject *object, guint prop_id,
+              const GValue *value, GParamSpec *pspec)
+{
+       NMDefaultRouteManager *self = NM_DEFAULT_ROUTE_MANAGER (object);
+       NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
+
+       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_default_route_manager_init (NMDefaultRouteManager *self)
 {
+}
+
+static void
+constructed (GObject *object)
+{
+       NMDefaultRouteManager *self = NM_DEFAULT_ROUTE_MANAGER (object);
        NMDefaultRouteManagerPrivate *priv = NM_DEFAULT_ROUTE_MANAGER_GET_PRIVATE (self);
 
        priv->entries_ip4 = g_ptr_array_new_full (0, (GDestroyNotify) _entry_free);
        priv->entries_ip6 = g_ptr_array_new_full (0, (GDestroyNotify) _entry_free);
 
-       priv->platform = g_object_ref (NM_PLATFORM_GET);
        g_signal_connect (priv->platform, NM_PLATFORM_SIGNAL_IP4_ADDRESS_CHANGED, G_CALLBACK (_platform_changed_cb), self);
        g_signal_connect (priv->platform, NM_PLATFORM_SIGNAL_IP6_ADDRESS_CHANGED, G_CALLBACK (_platform_changed_cb), self);
        g_signal_connect (priv->platform, NM_PLATFORM_SIGNAL_IP4_ROUTE_CHANGED, G_CALLBACK (_platform_changed_cb), self);
        g_signal_connect (priv->platform, NM_PLATFORM_SIGNAL_IP6_ROUTE_CHANGED, G_CALLBACK (_platform_changed_cb), self);
 }
 
+NMDefaultRouteManager *
+nm_default_route_manager_new (NMPlatform *platform)
+{
+       return g_object_new (NM_TYPE_DEFAULT_ROUTE_MANAGER,
+                            NM_DEFAULT_ROUTE_MANAGER_PLATFORM, platform,
+                            NULL);
+}
+
 static void
 dispose (GObject *object)
 {
@@ -1437,6 +1475,17 @@ nm_default_route_manager_class_init (NMDefaultRouteManagerClass *klass)
        g_type_class_add_private (klass, sizeof (NMDefaultRouteManagerPrivate));
 
        /* virtual methods */
+       object_class->constructed = constructed;
        object_class->dispose = dispose;
+       object_class->set_property = set_property;
+
+       obj_properties[PROP_PLATFORM] =
+           g_param_spec_object (NM_DEFAULT_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);
+
 }
 
index 2ee4b6d..ca92814 100644 (file)
@@ -33,7 +33,7 @@
 #define NM_IS_DEFAULT_ROUTE_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEFAULT_ROUTE_MANAGER))
 #define NM_DEFAULT_ROUTE_MANAGER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEFAULT_ROUTE_MANAGER, NMDefaultRouteManagerClass))
 
-
+#define NM_DEFAULT_ROUTE_MANAGER_PLATFORM "platform"
 
 struct _NMDefaultRouteManager {
        GObject parent;
@@ -46,6 +46,7 @@ typedef struct {
 GType nm_default_route_manager_get_type (void);
 
 NMDefaultRouteManager *nm_default_route_manager_get (void);
+NMDefaultRouteManager *nm_default_route_manager_new (NMPlatform *platform);
 
 void nm_default_route_manager_ip4_update_default_route (NMDefaultRouteManager *manager, gpointer source);
 void nm_default_route_manager_ip6_update_default_route (NMDefaultRouteManager *manager, gpointer source);