From: "Luis Gustavo S. Barreto" <[email protected]>

A list of available interfaces of this technology
---
 src/technology.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/src/technology.c b/src/technology.c
index 2b34f50..a06382e 100644
--- a/src/technology.c
+++ b/src/technology.c
@@ -59,6 +59,8 @@ struct connman_technology {
        char *regdom;
        connman_bool_t connected;
 
+       GSList *interface_list;
+
        connman_bool_t tethering;
        char *tethering_ident;
        char *tethering_passphrase;
@@ -170,6 +172,21 @@ void connman_technology_driver_unregister(struct 
connman_technology_driver *driv
        driver_list = g_slist_remove(driver_list, driver);
 }
 
+static void append_interfaces(DBusMessageIter *iter, void *user_data)
+{
+       struct connman_technology *technology = user_data;
+       GSList *list;
+
+       for (list = technology->interface_list; list; list = list->next) {
+               int index = GPOINTER_TO_INT(list->data);
+               char *interface = connman_inet_ifname(index);
+
+               dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, 
&interface);
+
+               g_free(interface);
+       }
+}
+
 static void tethering_changed(struct connman_technology *technology)
 {
        connman_bool_t tethering = technology->tethering;
@@ -432,6 +449,10 @@ static void append_properties(DBusMessageIter *iter,
                                        DBUS_TYPE_BOOLEAN,
                                        &technology->connected);
 
+       connman_dbus_dict_append_array(&dict, "Interfaces",
+                                       DBUS_TYPE_STRING,
+                                       append_interfaces, technology);
+
        connman_dbus_dict_append_basic(&dict, "Tethering",
                                        DBUS_TYPE_BOOLEAN,
                                        &technology->tethering);
@@ -910,6 +931,8 @@ static struct connman_technology *technology_get(enum 
connman_service_type type)
 
        technology->device_list = NULL;
 
+       technology->interface_list = NULL;
+
        technology->pending_reply = NULL;
 
        load_state(technology);
@@ -959,6 +982,7 @@ static void technology_put(struct connman_technology 
*technology)
                                                CONNMAN_TECHNOLOGY_INTERFACE);
 
        g_slist_free(technology->device_list);
+       g_slist_free(technology->interface_list);
 
        g_free(technology->path);
        g_free(technology->regdom);
@@ -990,6 +1014,9 @@ void __connman_technology_add_interface(enum 
connman_service_type type,
 
        technology = technology_find(type);
 
+       if (technology != NULL)
+               technology->interface_list = 
g_slist_append(technology->interface_list, GINT_TO_POINTER(index));
+
        if (technology == NULL || technology->driver == NULL
                        || technology->driver->add_interface == NULL)
                return;
@@ -1028,6 +1055,8 @@ void __connman_technology_remove_interface(enum 
connman_service_type type,
 
        if (technology->driver->remove_interface)
                technology->driver->remove_interface(technology, index);
+
+       technology->interface_list = g_slist_remove(technology->interface_list, 
GINT_TO_POINTER(index));
 }
 
 int __connman_technology_add_device(struct connman_device *device)
-- 
1.7.9.1

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to