service: Add __connman_service_get_list()
authorDaniel Wagner <daniel.wagner@bmw-carit.de>
Thu, 31 Mar 2011 08:02:30 +0000 (10:02 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Thu, 31 Mar 2011 10:37:07 +0000 (12:37 +0200)
In order to get a list of services which can than be process further
in session.c, service.c has to populate a list of services.

src/connman.h
src/service.c

index 4621d8a..4a4a442 100644 (file)
@@ -557,6 +557,13 @@ void __connman_service_notify(struct connman_service *service,
 int __connman_service_counter_register(const char *counter);
 void __connman_service_counter_unregister(const char *counter);
 
+struct connman_session;
+typedef connman_bool_t (* service_match_cb) (struct connman_session *session,
+                                       struct connman_service *service);
+
+GSequence *__connman_service_get_list(struct connman_session *session,
+                                       service_match_cb service_match);
+
 #include <connman/location.h>
 
 int __connman_location_init(void);
index bdee4ff..f59c720 100644 (file)
@@ -1549,6 +1549,30 @@ void __connman_service_counter_unregister(const char *counter)
        counter_list = g_slist_remove(counter_list, counter);
 }
 
+GSequence *__connman_service_get_list(struct connman_session *session,
+                                       service_match_cb service_match)
+{
+       GSequence *list;
+       GSequenceIter *iter;
+
+       list = g_sequence_new(NULL);
+       if (list == NULL)
+               return NULL;
+
+       iter = g_sequence_get_begin_iter(service_list);
+
+       while (g_sequence_iter_is_end(iter) == FALSE) {
+               service = g_sequence_get(iter);
+
+               if (service_match(session, service) == TRUE)
+                       g_sequence_append(list, service);
+
+               iter = g_sequence_iter_next(iter);
+       }
+
+       return list;
+}
+
 static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                                        struct connman_service *service)
 {