db: Implement plugin loading and unloading

This commit is contained in:
Sree Harsha Totakura 2015-03-26 18:06:37 +01:00
parent a3ac2587cf
commit f94bb0a3a0
4 changed files with 39 additions and 3 deletions

View File

@ -43,7 +43,34 @@ static char *old_dlsearchpath;
int
TALER_MINT_plugin_load (const struct GNUNET_CONFIGURATION_Handle *cfg)
{
return GNUNET_SYSERR;
char *plugin_name;
char *lib_name;
struct GNUNET_CONFIGURATION_Handle *cfg_dup;
if (NULL != plugin)
return GNUNET_OK;
if (GNUNET_SYSERR ==
GNUNET_CONFIGURATION_get_value_string (cfg,
"mint",
"db",
&plugin_name))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"mint",
"db");
return GNUNET_SYSERR;
}
(void) GNUNET_asprintf (&lib_name,
"libtaler_plugin_mintdb_%s",
plugin_name);
GNUNET_free (plugin_name);
cfg_dup = GNUNET_CONFIGURATION_dup (cfg);
plugin = GNUNET_PLUGIN_load (lib_name, cfg_dup);
GNUNET_CONFIGURATION_destroy (cfg_dup);
GNUNET_free (lib_name);
if (NULL == plugin)
return GNUNET_SYSERR;
return GNUNET_OK;
}
@ -55,6 +82,8 @@ TALER_MINT_plugin_unload ()
{
if (NULL == plugin)
return;
GNUNET_assert (NULL == GNUNET_PLUGIN_unload (plugin->library_name,
plugin));
}

View File

@ -2289,16 +2289,17 @@ libtaler_plugin_mintdb_postgres_init (void *cls)
/* FIXME: use configuration section with "postgres" in its name... */
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"mint", "db",
"mint", "db_conn_str",
&pg->TALER_MINT_db_connection_cfg_str))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"mint",
"db");
"db_conn_str");
return NULL;
}
plugin = GNUNET_new (struct TALER_MINTDB_Plugin);
plugin->cls = pg;
plugin->library_name = "libtaler_plugin_mintdb_postgres";
plugin->get_session = &postgres_get_session;
plugin->drop_temporary = &postgres_drop_temporary;
plugin->create_tables = &postgres_create_tables;

View File

@ -478,6 +478,11 @@ struct TALER_MINTDB_Plugin
*/
void *cls;
/**
* Name of the library which generated this plugin
*/
const char *library_name;
/**
* Get the thread-local database-handle.
* Connect to the db if the connection does not exist yet.

View File

@ -343,6 +343,7 @@ run (void *cls,
if (NULL != cbc2.sig.rsa_signature)
GNUNET_CRYPTO_rsa_signature_free (cbc2.sig.rsa_signature);
dkp = NULL;
TALER_MINT_plugin_unload ();
}