summaryrefslogtreecommitdiff
path: root/src/exchange-tools/taler-exchange-wire.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-04-16 12:44:45 +0200
committerChristian Grothoff <christian@grothoff.org>2016-04-16 12:44:45 +0200
commitfe36ba0062853bd9b96e2c2d166420eaa7478698 (patch)
treef2efd29184436ca2d6f19b818f7f7a436e30eaa5 /src/exchange-tools/taler-exchange-wire.c
parentecc5b6791fbcbd28c12ab578a9ed6ae50629d958 (diff)
downloadexchange-fe36ba0062853bd9b96e2c2d166420eaa7478698.tar.gz
exchange-fe36ba0062853bd9b96e2c2d166420eaa7478698.tar.bz2
exchange-fe36ba0062853bd9b96e2c2d166420eaa7478698.zip
fix taler-exchange-wire way of loading configuration
Diffstat (limited to 'src/exchange-tools/taler-exchange-wire.c')
-rw-r--r--src/exchange-tools/taler-exchange-wire.c128
1 files changed, 70 insertions, 58 deletions
diff --git a/src/exchange-tools/taler-exchange-wire.c b/src/exchange-tools/taler-exchange-wire.c
index 7623ea37..702078be 100644
--- a/src/exchange-tools/taler-exchange-wire.c
+++ b/src/exchange-tools/taler-exchange-wire.c
@@ -47,42 +47,24 @@ static char *method;
static char *output_filename;
/**
- * Our configuration.
+ * Return value from main().
*/
-static struct GNUNET_CONFIGURATION_Handle *cfg;
-
+static int global_ret;
/**
- * The main function of the taler-exchange-sepa tool. This tool is used
- * to sign the SEPA bank account details using the master key.
+ * Main function that will be run.
*
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, 1 on error
+ * @param cls closure
+ * @param args remaining command-line arguments
+ * @param cfgfile name of the configuration file used (for saving, can be NULL!)
+ * @param c configuration
*/
-int
-main (int argc,
- char *const *argv)
+static void
+run (void *cls,
+ char *const *args,
+ const char *cfgfile,
+ const struct GNUNET_CONFIGURATION_Handle *cfg)
{
- char *cfgfile = NULL;
- const struct GNUNET_GETOPT_CommandLineOption options[] = {
- GNUNET_GETOPT_OPTION_CFG_FILE (&cfgfile),
- {'j', "json", "JSON",
- "account information in JSON format", 1,
- &GNUNET_GETOPT_set_string, &json_in},
- {'m', "master-key", "FILE",
- "master key file (private key)", 1,
- &GNUNET_GETOPT_set_filename, &masterkeyfile},
- {'t', "type", "METHOD",
- "which wire transfer method (i.e. 'test' or 'sepa') is this for?", 1,
- &GNUNET_GETOPT_set_string, &method},
- {'o', "output", "FILE",
- "where to write the result", 1,
- &GNUNET_GETOPT_set_filename, &output_filename},
- GNUNET_GETOPT_OPTION_HELP ("Setup /wire response"),
- GNUNET_GETOPT_OPTION_VERSION (VERSION "-" VCS_VERSION),
- GNUNET_GETOPT_OPTION_END
- };
struct GNUNET_CRYPTO_EddsaPrivateKey *eddsa_priv;
struct TALER_MasterPrivateKeyP key;
struct TALER_MasterSignatureP sig;
@@ -92,26 +74,6 @@ main (int argc,
struct GNUNET_HashCode salt;
struct TALER_WIRE_Plugin *plugin;
- GNUNET_assert (GNUNET_OK ==
- GNUNET_log_setup ("taler-exchange-wire",
- "WARNING",
- NULL));
-
- if (GNUNET_GETOPT_run ("taler-exchange-wire",
- options,
- argc, argv) < 0)
- return 1;
- cfg = GNUNET_CONFIGURATION_create ();
- if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg,
- cfgfile))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- _("Malformed configuration file `%s', exit ...\n"),
- cfgfile);
- GNUNET_free_non_null (cfgfile);
- return 1;
- }
- GNUNET_free_non_null (cfgfile);
if ( (NULL == masterkeyfile) &&
(GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (cfg,
@@ -121,7 +83,8 @@ main (int argc,
{
fprintf (stderr,
"Master key file not given in neither configuration nor command-line\n");
- return 1;
+ global_ret = 1;
+ return;
}
eddsa_priv = GNUNET_CRYPTO_eddsa_key_create_from_file (masterkeyfile);
if (NULL == eddsa_priv)
@@ -129,19 +92,22 @@ main (int argc,
fprintf (stderr,
"Failed to initialize master key from file `%s'\n",
masterkeyfile);
- return 1;
+ global_ret = 1;
+ return;
}
if (NULL == json_in)
{
fprintf (stderr,
"Required -j argument missing\n");
- return 1;
+ global_ret = 1;
+ return;
}
if (NULL == method)
{
fprintf (stderr,
"Required -t argument missing\n");
- return 1;
+ global_ret = 1;
+ return;
}
j = json_loads (json_in,
JSON_REJECT_DUPLICATES,
@@ -152,7 +118,8 @@ main (int argc,
"Failed to parse JSON: %s (at offset %u)\n",
err.text,
(unsigned int) err.position);
- return 1;
+ global_ret = 1;
+ return;
}
json_object_set_new (j,
"type",
@@ -168,7 +135,8 @@ main (int argc,
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Wire transfer method `%s' not supported\n",
method);
- return 1;
+ global_ret = 1;
+ return;
}
if (GNUNET_OK !=
plugin->sign_wire_details (plugin->cls,
@@ -180,7 +148,8 @@ main (int argc,
/* sign function should have logged applicable errors */
json_decref (j);
TALER_WIRE_plugin_unload (plugin);
- return 1;
+ global_ret = 1;
+ return;
}
TALER_WIRE_plugin_unload (plugin);
GNUNET_free (eddsa_priv);
@@ -211,7 +180,50 @@ main (int argc,
json_out);
fflush (stdout);
free (json_out);
- return 0;
}
+
+/**
+ * The main function of the taler-exchange-wire tool. This tool is
+ * used to sign the bank account details using the master key.
+ *
+ * @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)
+{
+ const struct GNUNET_GETOPT_CommandLineOption options[] = {
+ {'j', "json", "JSON",
+ "account information in JSON format", 1,
+ &GNUNET_GETOPT_set_string, &json_in},
+ {'m', "master-key", "FILE",
+ "master key file (private key)", 1,
+ &GNUNET_GETOPT_set_filename, &masterkeyfile},
+ {'t', "type", "METHOD",
+ "which wire transfer method (i.e. 'test' or 'sepa') is this for?", 1,
+ &GNUNET_GETOPT_set_string, &method},
+ {'o', "output", "FILE",
+ "where to write the result", 1,
+ &GNUNET_GETOPT_set_filename, &output_filename},
+ GNUNET_GETOPT_OPTION_END
+ };
+
+ GNUNET_assert (GNUNET_OK ==
+ GNUNET_log_setup ("taler-exchange-wire",
+ "WARNING",
+ NULL));
+ if (GNUNET_OK !=
+ GNUNET_PROGRAM_run (argc, argv,
+ "taler-exchange-wire",
+ "Setup /wire response",
+ options,
+ &run, NULL))
+ return 1;
+ return global_ret;
+}
+
+
/* end of taler-exchange-wire.c */