From bba9a3c1bc7814dde0a948129f47d8fc6d1b9525 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Thu, 31 Mar 2011 10:02:30 +0200 Subject: [PATCH] service: Add __connman_service_get_list() 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 | 7 +++++++ src/service.c | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/connman.h b/src/connman.h index 4621d8a..4a4a442 100644 --- a/src/connman.h +++ b/src/connman.h @@ -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 int __connman_location_init(void); diff --git a/src/service.c b/src/service.c index bdee4ff..f59c720 100644 --- a/src/service.c +++ b/src/service.c @@ -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) { -- 2.7.4