Adding map: wire method name <--> plugin name.

This commit is contained in:
Marcello Stanisci 2019-01-30 15:17:03 +01:00
parent 452ab68423
commit f68e7d0b07
No known key found for this signature in database
GPG Key ID: 8D526861953F4C0F
4 changed files with 98 additions and 27 deletions

View File

@ -1828,7 +1828,8 @@ struct AggregationContext
* Find the relevant wire plugin. * Find the relevant wire plugin.
* *
* @param ac context to search * @param ac context to search
* @param type type of the wire plugin to load * @param type type of the wire plugin to load; it
* will be used _as is_ from the dynamic loader.
* @return NULL on error * @return NULL on error
*/ */
static struct TALER_WIRE_Plugin * static struct TALER_WIRE_Plugin *
@ -1842,6 +1843,8 @@ get_wire_plugin (struct AggregationContext *ac,
if (0 == strcmp (type, if (0 == strcmp (type,
wp->type)) wp->type))
return wp->plugin; return wp->plugin;
/* Wants the exact *plugin name* (!= method) */
plugin = TALER_WIRE_plugin_load (cfg, plugin = TALER_WIRE_plugin_load (cfg,
type); type);
if (NULL == plugin) if (NULL == plugin)
@ -2486,12 +2489,13 @@ get_wire_fee (struct AggregationContext *ac,
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to stop iteration * @return #GNUNET_OK to continue, #GNUNET_SYSERR to stop iteration
*/ */
static int static int
check_wire_out_cb (void *cls, check_wire_out_cb
uint64_t rowid, (void *cls,
struct GNUNET_TIME_Absolute date, uint64_t rowid,
const struct TALER_WireTransferIdentifierRawP *wtid, struct GNUNET_TIME_Absolute date,
const json_t *wire, const struct TALER_WireTransferIdentifierRawP *wtid,
const struct TALER_Amount *amount) const json_t *wire,
const struct TALER_Amount *amount)
{ {
struct AggregationContext *ac = cls; struct AggregationContext *ac = cls;
struct WireCheckContext wcc; struct WireCheckContext wcc;
@ -2544,12 +2548,14 @@ check_wire_out_cb (void *cls,
GNUNET_free (method); GNUNET_free (method);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != wcc.qs) if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != wcc.qs)
{ {
/* FIXME: can we provide a more detailed error report? */ /* FIXME: can we provide a more detailed error report? */
report_row_inconsistency ("wire_out", report_row_inconsistency
rowid, ("wire_out",
"audit of associated transactions failed"); rowid,
"audit of associated transactions failed");
GNUNET_free (method); GNUNET_free (method);
return GNUNET_OK; return GNUNET_OK;
} }
@ -2570,18 +2576,22 @@ check_wire_out_cb (void *cls,
&wcc.total_deposits, &wcc.total_deposits,
wire_fee)) wire_fee))
{ {
report_amount_arithmetic_inconsistency ("wire out (fee structure)",
rowid, report_amount_arithmetic_inconsistency
&wcc.total_deposits, ("wire out (fee structure)",
wire_fee, rowid,
-1); &wcc.total_deposits,
wire_fee,
-1);
GNUNET_free (method); GNUNET_free (method);
return GNUNET_OK; return GNUNET_OK;
} }
/* Round down to amount supported by wire method */ /* Round down to amount supported by wire method */
plugin = get_wire_plugin (ac, plugin = get_wire_plugin
method); (ac,
TALER_WIRE_get_plugin_from_method (method));
if (NULL == plugin) if (NULL == plugin)
{ {
GNUNET_break (0); GNUNET_break (0);

View File

@ -414,8 +414,9 @@ find_account_by_url (const char *url)
/** /**
* Function called with information about a wire account. Adds the * Function called with information about a wire account. Adds
* account to our list (if it is enabled and we can load the plugin). * the account to our list (if it is enabled and we can load the
* plugin).
* *
* @param cls closure, NULL * @param cls closure, NULL
* @param ai account information * @param ai account information

View File

@ -35,6 +35,17 @@ char *
TALER_WIRE_payto_get_method (const char *payto_url); TALER_WIRE_payto_get_method (const char *payto_url);
/**
* Get the plugin name from the payment method.
*
* @param method the method implemented by the plugin (for
* simplicity, we assume 1 method is implemented by 1 plugin).
* @return the plugin name, NULL if not found.
*/
const char *
TALER_WIRE_get_plugin_from_method (const char *method);
/** /**
* Load a WIRE plugin. * Load a WIRE plugin.
* *

View File

@ -2,16 +2,19 @@
This file is part of TALER This file is part of TALER
(C) 2018 Taler Systems SA (C) 2018 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the TALER is free software; you can redistribute it and/or modify
terms of the GNU General Public License as published by the Free Software it under the terms of the GNU General Public License as
Foundation; either version 3, or (at your option) any later version. 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 TALER is distributed in the hope that it will be useful, but
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR WITHOUT ANY WARRANTY; without even the implied warranty of
A PARTICULAR PURPOSE. See the GNU General Public License for more details. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with You should have received a copy of the GNU General Public
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> License along with TALER; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>
*/ */
/** /**
@ -29,6 +32,23 @@
#define PAYTO "payto://" #define PAYTO "payto://"
/**
* Maps wire methods to plugin names.
*/
struct ConversionTable
{
/**
* Wire method (e.g. 'sepa', 'x-taler-bank', ..)
*/
const char *method;
/**
* Plugin name, e.g. 'ebics', 'taler_bank', ..
*/
const char *plugin_name;
};
/** /**
* Obtain the payment method from a @a payto_url * Obtain the payment method from a @a payto_url
* *
@ -54,4 +74,33 @@ TALER_WIRE_payto_get_method (const char *payto_url)
end - start); end - start);
} }
/**
* Get the plugin name from the payment method.
*
* @param method the method implemented by the plugin (for
* simplicity, we assume 1 method is implemented by 1 plugin).
* @return the plugin name, NULL if not found.
*/
const char *
TALER_WIRE_get_plugin_from_method (const char *method)
{
static const struct ConversionTable ct[] = {
{"x-taler-bank", "taler_bank"},
{"sepa", "ebics"},
{NULL, NULL}
};
for (unsigned int i=0;
NULL != ct[i].method;
i++)
{
if (0 == strcmp (method,
ct[i].method))
return ct[i].plugin_name;
}
return NULL;
}
/* end of wire_helper.c */ /* end of wire_helper.c */