From fae7db7e930af35e3dac9a6980b69464b4317a85 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 25 Jan 2016 14:23:18 +0100 Subject: skeleton for binary to implement #4141 --- src/mint/Makefile.am | 10 +++ src/mint/taler-mint-aggregator.c | 147 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 src/mint/taler-mint-aggregator.c (limited to 'src/mint') diff --git a/src/mint/Makefile.am b/src/mint/Makefile.am index aa9b1974f..fda014d56 100644 --- a/src/mint/Makefile.am +++ b/src/mint/Makefile.am @@ -7,8 +7,18 @@ if USE_COVERAGE endif bin_PROGRAMS = \ + taler-mint-aggregator \ taler-mint-httpd +taler_mint_aggregator_SOURCES = \ + taler-mint-aggregator.c +taler_mint_aggregator_LDADD = \ + $(LIBGCRYPT_LIBS) \ + $(top_builddir)/src/util/libtalerutil.la \ + $(top_builddir)/src/mintdb/libtalermintdb.la \ + -ljansson \ + -lgnunetutil + taler_mint_httpd_SOURCES = \ taler-mint-httpd.c taler-mint-httpd.h \ taler-mint-httpd_admin.c taler-mint-httpd_admin.h \ diff --git a/src/mint/taler-mint-aggregator.c b/src/mint/taler-mint-aggregator.c new file mode 100644 index 000000000..a739d87e0 --- /dev/null +++ b/src/mint/taler-mint-aggregator.c @@ -0,0 +1,147 @@ +/* + This file is part of TALER + Copyright (C) 2016 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, If not, see +*/ + +/** + * @file taler-mint-aggregator.c + * @brief Process that aggregates outgoing transactions and executes them + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include "taler_wire_plugin.h" + +/** + * Which currency is used by this mint? + */ +static char *mint_currency_string; + +/** + * Base directory of the mint (global) + */ +static char *mint_directory; + +/** + * The mint's configuration (global) + */ +static struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * Our DB plugin. + */ +static struct TALER_MINTDB_Plugin *db_plugin; + + +/** + * Load configuration parameters for the mint + * server into the corresponding global variables. + * + * @param mint_directory the mint's directory + * @return #GNUNET_OK on success + */ +static int +mint_serve_process_config (const char *mint_directory) +{ + unsigned long long port; + + cfg = TALER_config_load (mint_directory); + if (NULL == cfg) + { + fprintf (stderr, + "Failed to load mint configuration\n"); + return GNUNET_SYSERR; + } + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_string (cfg, + "mint", + "currency", + &mint_currency_string)) + { + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + "mint", + "currency"); + return GNUNET_SYSERR; + } + if (strlen (mint_currency_string) >= TALER_CURRENCY_LEN) + { + fprintf (stderr, + "Currency `%s' longer than the allowed limit of %u characters.", + mint_currency_string, + (unsigned int) TALER_CURRENCY_LEN); + return GNUNET_SYSERR; + } + + if (NULL == + (db_plugin = TALER_MINTDB_plugin_load (cfg))) + { + fprintf (stderr, + "Failed to initialize DB subsystem\n"); + return GNUNET_SYSERR; + } + + return GNUNET_OK; +} + + +/** + * The main function of the taler-mint-httpd server ("the mint"). + * + * @param argc number of arguments from the command line + * @param argv command line arguments + * @return 0 ok, 1 on error + */ +int +main (int argc, + char *const *argv) +{ + static const struct GNUNET_GETOPT_CommandLineOption options[] = { + {'d', "mint-dir", "DIR", + "mint directory with configuration and keys for operating the mint", 1, + &GNUNET_GETOPT_set_filename, &mint_directory}, + TALER_GETOPT_OPTION_HELP ("background process that aggregates and executes wire transfers to merchants"), + GNUNET_GETOPT_OPTION_VERSION (VERSION "-" VCS_VERSION), + GNUNET_GETOPT_OPTION_END + }; + int ret; + + GNUNET_assert (GNUNET_OK == + GNUNET_log_setup ("taler-mint-aggregator", + "INFO", + NULL)); + if (0 >= + GNUNET_GETOPT_run ("taler-mint-aggregator", + options, + argc, argv)) + return 1; + if (NULL == mint_directory) + { + fprintf (stderr, + "Mint directory not specified\n"); + return 1; + } + + if (GNUNET_OK != + mint_serve_process_config (mint_directory)) + return 1; + + + + TALER_MINTDB_plugin_unload (db_plugin); + return (GNUNET_SYSERR == ret) ? 1 : 0; +} + +/* end of taler-mint-aggregator.c */ -- cgit v1.2.3