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.
*
* @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
*/
static struct TALER_WIRE_Plugin *
@ -1842,6 +1843,8 @@ get_wire_plugin (struct AggregationContext *ac,
if (0 == strcmp (type,
wp->type))
return wp->plugin;
/* Wants the exact *plugin name* (!= method) */
plugin = TALER_WIRE_plugin_load (cfg,
type);
if (NULL == plugin)
@ -2486,12 +2489,13 @@ get_wire_fee (struct AggregationContext *ac,
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to stop iteration
*/
static int
check_wire_out_cb (void *cls,
uint64_t rowid,
struct GNUNET_TIME_Absolute date,
const struct TALER_WireTransferIdentifierRawP *wtid,
const json_t *wire,
const struct TALER_Amount *amount)
check_wire_out_cb
(void *cls,
uint64_t rowid,
struct GNUNET_TIME_Absolute date,
const struct TALER_WireTransferIdentifierRawP *wtid,
const json_t *wire,
const struct TALER_Amount *amount)
{
struct AggregationContext *ac = cls;
struct WireCheckContext wcc;
@ -2544,12 +2548,14 @@ check_wire_out_cb (void *cls,
GNUNET_free (method);
return GNUNET_SYSERR;
}
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT != wcc.qs)
{
/* FIXME: can we provide a more detailed error report? */
report_row_inconsistency ("wire_out",
rowid,
"audit of associated transactions failed");
report_row_inconsistency
("wire_out",
rowid,
"audit of associated transactions failed");
GNUNET_free (method);
return GNUNET_OK;
}
@ -2570,18 +2576,22 @@ check_wire_out_cb (void *cls,
&wcc.total_deposits,
wire_fee))
{
report_amount_arithmetic_inconsistency ("wire out (fee structure)",
rowid,
&wcc.total_deposits,
wire_fee,
-1);
report_amount_arithmetic_inconsistency
("wire out (fee structure)",
rowid,
&wcc.total_deposits,
wire_fee,
-1);
GNUNET_free (method);
return GNUNET_OK;
}
/* Round down to amount supported by wire method */
plugin = get_wire_plugin (ac,
method);
plugin = get_wire_plugin
(ac,
TALER_WIRE_get_plugin_from_method (method));
if (NULL == plugin)
{
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
* account to our list (if it is enabled and we can load the plugin).
* Function called with information about a wire account. Adds
* the account to our list (if it is enabled and we can load the
* plugin).
*
* @param cls closure, NULL
* @param ai account information

View File

@ -35,6 +35,17 @@ char *
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.
*

View File

@ -2,16 +2,19 @@
This file is part of TALER
(C) 2018 Taler Systems SA
TALER 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 3, or (at your option) any later version.
TALER 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 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 General Public License for more details.
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 General Public License for more details.
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
You should have received a copy of the GNU General Public
License along with TALER; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>
*/
/**
@ -29,6 +32,23 @@
#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
*
@ -54,4 +74,33 @@ TALER_WIRE_payto_get_method (const char *payto_url)
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 */