diff options
Diffstat (limited to 'src/libstrongswan/database')
-rw-r--r-- | src/libstrongswan/database/database.c | 22 | ||||
-rw-r--r-- | src/libstrongswan/database/database.h | 7 | ||||
-rw-r--r-- | src/libstrongswan/database/database_factory.c | 47 |
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; } |