summaryrefslogtreecommitdiff
path: root/src/service.c
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2013-06-07 13:41:10 +0200
committerPatrik Flykt <patrik.flykt@linux.intel.com>2013-06-10 09:48:22 +0300
commit934226962d3caaa538e1424eba9364915bbe7278 (patch)
tree6071f8ac7e5808976dc4e66e23766b16df4b3325 /src/service.c
parent2386b677cb7223094b3348d852514df06d39b16b (diff)
downloadconnman-934226962d3caaa538e1424eba9364915bbe7278.tar.gz
connman-934226962d3caaa538e1424eba9364915bbe7278.tar.bz2
connman-934226962d3caaa538e1424eba9364915bbe7278.zip
session: Use service iterator instead of match/creation callbacks
When a new session is created we need to get the initial list of services which match the session AllowedBearers criteria. As soon the session is running add or removed services are tracked via the notifier interface. We concluded that exposing all the services is not really necessary and therefore we are using currently two callbacks to get the initial list. That exposes implementation details from session to service, that is GSequence. We also need to expose the type 'struct service_entry'. Instead doing so we are using an iterator and keep all the implementation details in session.c.
Diffstat (limited to 'src/service.c')
-rw-r--r--src/service.c25
1 files changed, 4 insertions, 21 deletions
diff --git a/src/service.c b/src/service.c
index 5649788b..df5a10d2 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2125,38 +2125,21 @@ 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,
- create_service_entry_cb create_service_entry,
- GDestroyNotify destroy_service_entry)
+int __connman_service_iterate_services(service_iterate_cb cb, void *user_data)
{
- GSequence *list;
GSequenceIter *iter;
- struct connman_service *service;
- struct service_entry *entry;
-
- list = g_sequence_new(destroy_service_entry);
- 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) {
- entry = create_service_entry(session, service,
- service->name, service->state);
- if (entry == NULL)
- return list;
+ struct connman_service *service = g_sequence_get(iter);
- g_sequence_append(list, entry);
- }
+ cb(service, service->name, service->state, user_data);
iter = g_sequence_iter_next(iter);
}
- return list;
+ return 0;
}
void __connman_service_session_inc(struct connman_service *service)