From f68e7d0b07aa36364ef9d546afc51ecaea650479 Mon Sep 17 00:00:00 2001 From: Marcello Stanisci Date: Wed, 30 Jan 2019 15:17:03 +0100 Subject: Adding map: wire method name <--> plugin name. --- src/auditor/taler-auditor.c | 44 ++++++++++++--------- src/exchange/taler-exchange-aggregator.c | 5 ++- src/include/taler_wire_lib.h | 11 ++++++ src/wire/wire_helper.c | 65 ++++++++++++++++++++++++++++---- 4 files changed, 98 insertions(+), 27 deletions(-) diff --git a/src/auditor/taler-auditor.c b/src/auditor/taler-auditor.c index 4b88abd62..dced807b1 100644 --- a/src/auditor/taler-auditor.c +++ b/src/auditor/taler-auditor.c @@ -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); diff --git a/src/exchange/taler-exchange-aggregator.c b/src/exchange/taler-exchange-aggregator.c index 07b4dc474..38654aaaa 100644 --- a/src/exchange/taler-exchange-aggregator.c +++ b/src/exchange/taler-exchange-aggregator.c @@ -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 diff --git a/src/include/taler_wire_lib.h b/src/include/taler_wire_lib.h index b75c107b0..aef61f61c 100644 --- a/src/include/taler_wire_lib.h +++ b/src/include/taler_wire_lib.h @@ -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. * diff --git a/src/wire/wire_helper.c b/src/wire/wire_helper.c index 34d40e11e..13e9bd79c 100644 --- a/src/wire/wire_helper.c +++ b/src/wire/wire_helper.c @@ -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 + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, see + */ /** @@ -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 */ -- cgit v1.2.3