Add callbacks for service storage functions
authorMarcel Holtmann <marcel@holtmann.org>
Thu, 23 Apr 2009 15:29:24 +0000 (16:29 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 23 Apr 2009 15:29:24 +0000 (16:29 +0100)
include/storage.h
src/connman.h
src/service.c
src/storage.c

index cd31b69..61cbf9a 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <connman/device.h>
 #include <connman/network.h>
+#include <connman/service.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -50,6 +51,9 @@ struct connman_storage {
        int (*network_init) (struct connman_device *device);
        int (*network_load) (struct connman_network *network);
        int (*network_save) (struct connman_network *network);
+       enum connman_service_type service_type;
+       int (*service_load) (struct connman_service *service);
+       int (*service_save) (struct connman_service *service);
 };
 
 extern int connman_storage_register(struct connman_storage *storage);
index b941185..4339251 100644 (file)
@@ -98,9 +98,12 @@ void __connman_storage_cleanup(void);
 int __connman_storage_init_device();
 int __connman_storage_load_device(struct connman_device *device);
 int __connman_storage_save_device(struct connman_device *device);
-int __connman_storage_init_network();
+int __connman_storage_init_network(struct connman_device *device);
 int __connman_storage_load_network(struct connman_network *network);
 int __connman_storage_save_network(struct connman_network *network);
+int __connman_storage_init_service();
+int __connman_storage_load_service(struct connman_service *service);
+int __connman_storage_save_service(struct connman_service *service);
 
 #include <connman/driver.h>
 
index 7761814..2b60783 100644 (file)
@@ -978,12 +978,36 @@ done:
        return service;
 }
 
+static int service_load(struct connman_service *service)
+{
+       DBG("service %p", service);
+
+       return 0;
+}
+
+static int service_save(struct connman_service *service)
+{
+       DBG("service %p", service);
+
+       return 0;
+}
+
+static struct connman_storage service_storage = {
+       .name           = "service",
+       .priority       = CONNMAN_STORAGE_PRIORITY_LOW,
+       .service_load   = service_load,
+       .service_save   = service_save,
+};
+
 int __connman_service_init(void)
 {
        DBG("");
 
        connection = connman_dbus_get_connection();
 
+       if (connman_storage_register(&service_storage) < 0)
+               connman_error("Failed to register service storage");
+
        service_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
                                                                NULL, NULL);
 
@@ -1002,5 +1026,7 @@ void __connman_service_cleanup(void)
        g_hash_table_destroy(service_hash);
        service_hash = NULL;
 
+       connman_storage_unregister(&service_storage);
+
        dbus_connection_unref(connection);
 }
index b63c43b..08b7249 100644 (file)
@@ -174,6 +174,49 @@ int __connman_storage_save_network(struct connman_network *network)
        return -ENOENT;
 }
 
+int __connman_storage_init_service(void)
+{
+       DBG("");
+
+       return -ENOENT;
+}
+
+int __connman_storage_load_service(struct connman_service *service)
+{
+       GSList *list;
+
+       DBG("service %p", service);
+
+       for (list = storage_list; list; list = list->next) {
+               struct connman_storage *storage = list->data;
+
+               if (storage->service_load) {
+                       if (storage->service_load(service) == 0)
+                               return 0;
+               }
+       }
+
+       return -ENOENT;
+}
+
+int __connman_storage_save_service(struct connman_service *service)
+{
+       GSList *list;
+
+       DBG("service %p", service);
+
+       for (list = storage_list; list; list = list->next) {
+               struct connman_storage *storage = list->data;
+
+               if (storage->service_save) {
+                       if (storage->service_save(service) == 0)
+                               return 0;
+               }
+       }
+
+       return -ENOENT;
+}
+
 int __connman_storage_init(void)
 {
        DBG("");