[Patch] Export NM version over dbus



Hey,

Attached patch exports the NetworkManager version over DBus.
Currently, it's probably mostly needed to determine whether the NM
daemon is 0.7 or 0.8, so if this new property isn't implemented, it's
< 0.8.

Tambet
From 7234456990bba45f6c9cbe69df01cd94ee160759 Mon Sep 17 00:00:00 2001
From: Tambet Ingo <tambet gmail com>
Date: Mon, 14 Sep 2009 13:17:42 +0300
Subject: [PATCH] Export NetworkManager version over DBus.


diff --git a/introspection/nm-manager-client.xml b/introspection/nm-manager-client.xml
index cf89611..2714c64 100644
--- a/introspection/nm-manager-client.xml
+++ b/introspection/nm-manager-client.xml
@@ -43,6 +43,7 @@ object.  dbus-glib generates the same bound function names for D-Bus the methods
     <property name="WirelessHardwareEnabled" type="b" access="read"/>
     <property name="ActiveConnections" type="ao" access="read"/>
     <property name="State" type="u" access="read"/>
+    <property name="Version" type="s" access="read"/>
 
     <signal name="StateChanged">
       <arg name="state" type="u"/>
diff --git a/introspection/nm-manager.xml b/introspection/nm-manager.xml
index a93ee58..80ecbb9 100644
--- a/introspection/nm-manager.xml
+++ b/introspection/nm-manager.xml
@@ -113,6 +113,12 @@
       </tp:docstring>
     </property>
 
+    <property name="Version" type="s" access="read">
+      <tp:docstring>
+	The NetworkManager version.
+      </tp:docstring>
+    </property>
+
     <signal name="StateChanged">
       <tp:docstring>
         NetworkManager's state changed.
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index 07f77ce..80a002c 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -55,6 +55,7 @@ typedef struct {
 	DBusGProxy *bus_proxy;
 	gboolean manager_running;
 	NMState state;
+	char *version;
 	GPtrArray *devices;
 	GPtrArray *active_connections;
 
@@ -328,6 +329,8 @@ dispose (GObject *object)
 	free_object_array (&priv->devices);
 	free_object_array (&priv->active_connections);
 
+	g_free (priv->version);
+
 	G_OBJECT_CLASS (nm_client_parent_class)->dispose (object);
 }
 
@@ -569,6 +572,8 @@ proxy_name_owner_changed (DBusGProxy *proxy,
 	} else {
 		_nm_object_queue_notify (NM_OBJECT (client), NM_CLIENT_MANAGER_RUNNING);
 		update_wireless_status (client, TRUE);
+		g_free (priv->version);
+		priv->version = NULL;
 	}
 }
 
@@ -900,6 +905,29 @@ nm_client_get_state (NMClient *client)
 }
 
 /**
+ * nm_client_get_version:
+ * @client: a #NMClient
+ *
+ * Gets the current daemon version.
+ *
+ * Returns: the current NetworkManager version
+ **/
+const char *
+nm_client_get_version (NMClient *client)
+{
+	NMClientPrivate *priv;
+
+	g_return_val_if_fail (NM_IS_CLIENT (client), NULL);
+
+	priv = NM_CLIENT_GET_PRIVATE (client);
+
+	if (!priv->version)
+		priv->version = _nm_object_get_string_property (NM_OBJECT (client), NM_DBUS_INTERFACE, "Version");
+
+	return priv->version;
+}
+
+/**
  * nm_client_sleep:
  * @client: a #NMClient
  * @sleep: %TRUE to put the daemon to sleep
diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h
index 5af95d4..c9b1b04 100644
--- a/libnm-glib/nm-client.h
+++ b/libnm-glib/nm-client.h
@@ -82,6 +82,7 @@ gboolean  nm_client_wireless_get_enabled (NMClient *client);
 void      nm_client_wireless_set_enabled (NMClient *client, gboolean enabled);
 gboolean  nm_client_wireless_hardware_get_enabled (NMClient *client);
 NMState   nm_client_get_state            (NMClient *client);
+const char *nm_client_get_version        (NMClient *client);
 gboolean  nm_client_get_manager_running  (NMClient *client);
 const GPtrArray *nm_client_get_active_connections (NMClient *client);
 void      nm_client_sleep                (NMClient *client, gboolean sleep);
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 8c82f87..c94fe6b 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -19,6 +19,8 @@
  * Copyright (C) 2007 - 2009 Red Hat, Inc.
  */
 
+#include "config.h"
+
 #include <netinet/ether.h>
 #include <string.h>
 #include <dbus/dbus-glib-lowlevel.h>
@@ -210,6 +212,7 @@ enum {
 	PROP_WIRELESS_ENABLED,
 	PROP_WIRELESS_HARDWARE_ENABLED,
 	PROP_ACTIVE_CONNECTIONS,
+	PROP_VERSION,
 
 	/* Not exported */
 	PROP_HOSTNAME,
@@ -2725,6 +2728,9 @@ get_property (GObject *object, guint prop_id,
 	case PROP_ACTIVE_CONNECTIONS:
 		g_value_take_boxed (value, get_active_connections (self, NULL));
 		break;
+	case PROP_VERSION:
+		g_value_set_string (value, VERSION);
+		break;
 	case PROP_HOSTNAME:
 		g_value_set_string (value, priv->hostname);
 		break;
@@ -2842,6 +2848,14 @@ nm_manager_class_init (NMManagerClass *manager_class)
 		                     DBUS_TYPE_G_ARRAY_OF_OBJECT_PATH,
 		                     G_PARAM_READABLE));
 
+	g_object_class_install_property
+		(object_class, PROP_VERSION,
+		 g_param_spec_string (NM_MANAGER_VERSION,
+		                      "Version",
+		                      "NetworkManager version",
+		                      NULL,
+		                      G_PARAM_READABLE));
+
 	/* Hostname is not exported over D-Bus */
 	g_object_class_install_property
 		(object_class, PROP_HOSTNAME,
diff --git a/src/nm-manager.h b/src/nm-manager.h
index 0c6da15..6bf1324 100644
--- a/src/nm-manager.h
+++ b/src/nm-manager.h
@@ -39,6 +39,7 @@
 #define NM_MANAGER_WIRELESS_ENABLED "wireless-enabled"
 #define NM_MANAGER_WIRELESS_HARDWARE_ENABLED "wireless-hardware-enabled"
 #define NM_MANAGER_ACTIVE_CONNECTIONS "active-connections"
+#define NM_MANAGER_VERSION "version"
 
 /* Not exported */
 #define NM_MANAGER_HOSTNAME "hostname"
-- 
1.6.0.2



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]