summaryrefslogtreecommitdiff
path: root/src/libstrongswan/database
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstrongswan/database')
-rw-r--r--src/libstrongswan/database/database.c22
-rw-r--r--src/libstrongswan/database/database.h7
-rw-r--r--src/libstrongswan/database/database_factory.c47
3 files changed, 49 insertions, 27 deletions
diff --git a/src/libstrongswan/database/database.c b/src/libstrongswan/database/database.c
new file mode 100644
index 000000000..60ef6cd7c
--- /dev/null
+++ b/src/libstrongswan/database/database.c
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2011 Martin Willi
+ * Copyright (C) 2011 revosec AG
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#include "database.h"
+
+ENUM(db_driver_names, DB_ANY, DB_MYSQL,
+ "any",
+ "SQLite",
+ "MySQL",
+);
diff --git a/src/libstrongswan/database/database.h b/src/libstrongswan/database/database.h
index 8df1c6f7f..dda29b5fb 100644
--- a/src/libstrongswan/database/database.h
+++ b/src/libstrongswan/database/database.h
@@ -49,6 +49,8 @@ enum db_type_t {
* Database implementation type.
*/
enum db_driver_t {
+ /** matches to other databases */
+ DB_ANY = 0,
/** SQLite database */
DB_SQLITE,
/** MySQL database */
@@ -56,6 +58,11 @@ enum db_driver_t {
};
/**
+ * Names for db_driver_t
+ */
+extern enum_name_t *db_driver_names;
+
+/**
* Interface for a database implementation.
*
* @code
diff --git a/src/libstrongswan/database/database_factory.c b/src/libstrongswan/database/database_factory.c
index 3936565a1..909522d64 100644
--- a/src/libstrongswan/database/database_factory.c
+++ b/src/libstrongswan/database/database_factory.c
@@ -41,10 +41,8 @@ struct private_database_factory_t {
mutex_t *mutex;
};
-/**
- * Implementation of database_factory_t.create.
- */
-static database_t* create(private_database_factory_t *this, char *uri)
+METHOD(database_factory_t, create, database_t*,
+ private_database_factory_t *this, char *uri)
{
enumerator_t *enumerator;
database_t *database = NULL;
@@ -65,32 +63,24 @@ static database_t* create(private_database_factory_t *this, char *uri)
return database;
}
-/**
- * Implementation of database_factory_t.add_database.
- */
-static void add_database(private_database_factory_t *this,
- database_constructor_t create)
+METHOD(database_factory_t, add_database, void,
+ private_database_factory_t *this, database_constructor_t create)
{
this->mutex->lock(this->mutex);
this->databases->insert_last(this->databases, create);
this->mutex->unlock(this->mutex);
}
-/**
- * Implementation of database_factory_t.remove_database.
- */
-static void remove_database(private_database_factory_t *this,
- database_constructor_t create)
+METHOD(database_factory_t, remove_database, void,
+ private_database_factory_t *this, database_constructor_t create)
{
this->mutex->lock(this->mutex);
this->databases->remove(this->databases, create, NULL);
this->mutex->unlock(this->mutex);
}
-/**
- * Implementation of database_factory_t.destroy
- */
-static void destroy(private_database_factory_t *this)
+METHOD(database_factory_t, destroy, void,
+ private_database_factory_t *this)
{
this->databases->destroy(this->databases);
this->mutex->destroy(this->mutex);
@@ -102,15 +92,18 @@ static void destroy(private_database_factory_t *this)
*/
database_factory_t *database_factory_create()
{
- private_database_factory_t *this = malloc_thing(private_database_factory_t);
-
- this->public.create = (database_t*(*)(database_factory_t*, char *url))create;
- this->public.add_database = (void(*)(database_factory_t*, database_constructor_t))add_database;
- this->public.remove_database = (void(*)(database_factory_t*, database_constructor_t))remove_database;
- this->public.destroy = (void(*)(database_factory_t*))destroy;
-
- this->databases = linked_list_create();
- this->mutex = mutex_create(MUTEX_TYPE_DEFAULT);
+ private_database_factory_t *this;
+
+ INIT(this,
+ .public = {
+ .create = _create,
+ .add_database = _add_database,
+ .remove_database = _remove_database,
+ .destroy = _destroy,
+ },
+ .databases = linked_list_create(),
+ .mutex = mutex_create(MUTEX_TYPE_DEFAULT),
+ );
return &this->public;
}