[PATCH v5 30/42] vpn-provider: Send ConnectionRemoved signal when needed

Jukka Rissanen jukka.rissanen at linux.intel.com
Mon Nov 12 04:07:46 PST 2012


---
 vpn/vpn-provider.c | 38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/vpn/vpn-provider.c b/vpn/vpn-provider.c
index c46c9b4..09b782a 100644
--- a/vpn/vpn-provider.c
+++ b/vpn/vpn-provider.c
@@ -989,16 +989,52 @@ int __vpn_provider_connect(struct vpn_provider *provider)
 	return err;
 }
 
+static void connection_removed_signal(struct vpn_provider *provider)
+{
+	DBusMessage *signal;
+	DBusMessageIter iter;
+
+	signal = dbus_message_new_signal(VPN_MANAGER_PATH,
+			VPN_MANAGER_INTERFACE, "ConnectionRemoved");
+	if (signal == NULL)
+		return;
+
+	dbus_message_iter_init_append(signal, &iter);
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_OBJECT_PATH,
+							&provider->path);
+	dbus_connection_send(connection, signal, NULL);
+	dbus_message_unref(signal);
+}
+
+static char *get_ident(const char *path)
+{
+	char *pos;
+
+	if (*path != '/')
+		return NULL;
+
+	pos = strrchr(path, '/');
+	if (pos == NULL)
+		return NULL;
+
+	return pos + 1;
+}
+
 int __vpn_provider_remove(const char *path)
 {
 	struct vpn_provider *provider;
+	char *ident;
 
 	DBG("path %s", path);
 
-	provider = vpn_provider_lookup(path);
+	ident = get_ident(path);
+
+	provider = vpn_provider_lookup(ident);
 	if (provider != NULL) {
 		DBG("Removing VPN %s", provider->identifier);
 
+		connection_removed_signal(provider);
+
 		provider_unregister(provider);
 		g_hash_table_remove(provider_hash, provider->identifier);
 		return 0;
-- 
1.7.11.4




More information about the connman mailing list