Add support for mode, security and signal strength service properties
authorMarcel Holtmann <marcel@holtmann.org>
Wed, 1 Apr 2009 03:58:54 +0000 (20:58 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 1 Apr 2009 03:58:54 +0000 (20:58 -0700)
doc/service-api.txt
src/profile.c

index 0ed686c..405dd50 100644 (file)
@@ -31,3 +31,22 @@ Properties   string Name [readonly]
                        This information should only be used to determine
                        advanced properties or showing the correct icon
                        to the user.
+
+               string Mode [readonly]
+
+                       If the service type is WiFi, then this property is
+                       present and contains the mode of the network. The
+                       possible values are "managed" or "adhoc".
+
+               string Security [readonly]
+
+                       If the service type is WiFi, then this property is
+                       present and contains the security method or key
+                       management setting.
+
+                       Possible values are "none", "wep", "wpa" and "wpa2".
+
+               uint8 Strength [readonly]
+
+                       Indicates the signal strength of the service. This
+                       is a normalized value between 0 and 100.
index e5aca9f..a270654 100644 (file)
@@ -34,7 +34,10 @@ struct connman_group {
        char *path;
        char *type;
        char *name;
-       GSList *networks;
+       char *mode;
+       char *security;
+       connman_uint8_t strength;
+       struct connman_network *network;
 };
 
 static GHashTable *groups = NULL;
@@ -69,6 +72,18 @@ static DBusMessage *get_properties(DBusConnection *conn,
                connman_dbus_dict_append_variant(&dict, "Name",
                                        DBUS_TYPE_STRING, &group->name);
 
+       if (group->mode != NULL)
+               connman_dbus_dict_append_variant(&dict, "Mode",
+                                       DBUS_TYPE_STRING, &group->mode);
+
+       if (group->security != NULL)
+               connman_dbus_dict_append_variant(&dict, "Security",
+                                       DBUS_TYPE_STRING, &group->security);
+
+       if (group->strength > 0)
+               connman_dbus_dict_append_variant(&dict, "Strength",
+                                       DBUS_TYPE_BYTE, &group->strength);
+
        dbus_message_iter_close_container(&array, &dict);
 
        return reply;
@@ -88,6 +103,8 @@ static void free_group(gpointer data)
        g_dbus_unregister_interface(connection, group->path,
                                                CONNMAN_SERVICE_INTERFACE);
 
+       g_free(group->security);
+       g_free(group->mode);
        g_free(group->name);
        g_free(group->type);
        g_free(group->path);
@@ -134,7 +151,8 @@ int __connman_profile_add_device(struct connman_device *device)
 
        DBG("device %p", device);
 
-       name = g_strdup_printf("device%d", connman_device_get_index(device));
+       name = g_strdup_printf("%s_%d", __connman_device_get_type(device),
+                                       connman_device_get_index(device));
        group = lookup_group(name);
        g_free(name);
 
@@ -154,7 +172,8 @@ int __connman_profile_remove_device(struct connman_device *device)
 
        DBG("device %p", device);
 
-       name = g_strdup_printf("device%d", connman_device_get_index(device));
+       name = g_strdup_printf("%s_%d", __connman_device_get_type(device),
+                                       connman_device_get_index(device));
        group = lookup_group(name);
        g_free(name);
 
@@ -180,6 +199,17 @@ int __connman_profile_add_network(struct connman_network *network)
        group->type = g_strdup(__connman_network_get_type(network));
        group->name = g_strdup(connman_network_get_string(network, "Name"));
 
+       group->strength = connman_network_get_uint8(network, "Strength");
+
+       if (group->network == NULL) {
+               group->network = network;
+
+               group->mode = g_strdup(connman_network_get_string(network,
+                                                               "WiFi.Mode"));
+               group->security = g_strdup(connman_network_get_string(network,
+                                                       "WiFi.Security"));
+       }
+
        return 0;
 }
 
@@ -193,6 +223,16 @@ int __connman_profile_remove_network(struct connman_network *network)
        if (group == NULL)
                return -EINVAL;
 
+       if (group->network == network) {
+               g_free(group->security);
+               group->security = NULL;
+
+               g_free(group->mode);
+               group->mode = NULL;
+
+               group->network = NULL;
+       }
+
        return 0;
 }