diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-03-02 21:07:27 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-03-02 21:07:27 +0100 |
commit | 17ff4f5e97b981f0b3eebd6e3923fe60dc75edd5 (patch) | |
tree | 585b6cbe92aec91b2e186206c1bfe746a0cd85e6 /src/mint/taler-mint-httpd_validation.c | |
parent | 531272a92a5aa08559436138ff5106a6bff1b361 (diff) | |
parent | 201b2b3d1af2a4d44fe32c8b0312d935845cf129 (diff) |
fixing #4230 in bank-lib
Diffstat (limited to 'src/mint/taler-mint-httpd_validation.c')
-rw-r--r-- | src/mint/taler-mint-httpd_validation.c | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/src/mint/taler-mint-httpd_validation.c b/src/mint/taler-mint-httpd_validation.c deleted file mode 100644 index 8f8ab415e..000000000 --- a/src/mint/taler-mint-httpd_validation.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - 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 <http://www.gnu.org/licenses/> -*/ - -/** - * @file taler-mint-httpd_validation.c - * @brief helpers for calling the wire plugins to validate addresses - * @author Christian Grothoff - */ -#include "platform.h" -#include <gnunet/gnunet_util_lib.h> -#include "taler-mint-httpd_validation.h" -#include "taler_wire_plugin.h" - - -/** - * Information we keep for each plugin. - */ -struct Plugin -{ - - /** - * We keep plugins in a DLL. - */ - struct Plugin *next; - - /** - * We keep plugins in a DLL. - */ - struct Plugin *prev; - - /** - * Type of the wireformat. - */ - char *type; - - /** - * Pointer to the plugin. - */ - struct TALER_WIRE_Plugin *plugin; - -}; - -/** - * Head of DLL of wire plugins. - */ -static struct Plugin *wire_head; - -/** - * Tail of DLL of wire plugins. - */ -static struct Plugin *wire_tail; - - -/** - * Initialize validation subsystem. - * - * @param cfg configuration to use - * @return #GNUNET_OK on success - */ -int -TMH_VALIDATION_init (const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - struct Plugin *p; - char *wireformats; - char *lib_name; - const char *token; - - /* Find out list of supported wire formats */ - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (cfg, - "mint", - "wireformat", - &wireformats)) - { - GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, - "mint", - "wireformat"); - return GNUNET_SYSERR; - } - for (token = strtok (wireformats, - " "); - NULL != token; - token = strtok (NULL, - " ")) - { - (void) GNUNET_asprintf (&lib_name, - "libtaler_plugin_wire_%s", - token); - p = GNUNET_new (struct Plugin); - p->type = GNUNET_strdup (token); - p->plugin = GNUNET_PLUGIN_load (lib_name, - (void *) cfg); - if (NULL == p->plugin) - { - GNUNET_free (p); - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to load plugin %s\n", - lib_name); - GNUNET_free (lib_name); - TMH_VALIDATION_done (); - return GNUNET_SYSERR; - } - p->plugin->library_name = lib_name; - GNUNET_CONTAINER_DLL_insert (wire_head, - wire_tail, - p); - } - GNUNET_free (wireformats); - return GNUNET_OK; -} - - -/** - * Shutdown validation subsystem. - */ -void -TMH_VALIDATION_done () -{ - struct Plugin *p; - char *lib_name; - - while (NULL != (p = wire_head)) - { - GNUNET_CONTAINER_DLL_remove (wire_head, - wire_tail, - p); - lib_name = p->plugin->library_name; - GNUNET_assert (NULL == GNUNET_PLUGIN_unload (lib_name, - p->plugin)); - GNUNET_free (lib_name); - GNUNET_free (p->type); - GNUNET_free (p); - } -} - - -/** - * Check if the given wire format JSON object is correctly formatted as - * a wire address. - * - * @param wire the JSON wire format object - * @return #GNUNET_YES if correctly formatted; #GNUNET_NO if not - */ -int -TMH_json_validate_wireformat (const json_t *wire) -{ - const char *stype; - json_error_t error; - struct Plugin *p; - - if (0 != json_unpack_ex ((json_t *) wire, - &error, 0, - "{s:s}", - "type", &stype)) - { - GNUNET_break (0); - return GNUNET_SYSERR; - } - for (p=wire_head; NULL != p; p = p->next) - if (0 == strcasecmp (p->type, - stype)) - return p->plugin->wire_validate (wire); - return GNUNET_NO; -} - - -/** - * Check if we support the given wire method. - * - * @param type type of wire method to check - * @return #GNUNET_YES if the method is supported - */ -int -TMH_VALIDATION_test_method (const char *type) -{ - struct Plugin *p; - - for (p=wire_head;NULL != p;p = p->next) - if (0 == strcasecmp (type, - p->type)) - return GNUNET_YES; - return GNUNET_NO; -} - - -/** - * Obtain supported validation methods as a JSON array, - * and as a hash. - * - * @param[out] h set to the hash of the JSON methods - * @return JSON array with the supported validation methods - */ -json_t * -TMH_VALIDATION_get_methods (struct GNUNET_HashCode *h) -{ - json_t *methods; - struct GNUNET_HashContext *hc; - const char *wf; - struct Plugin *p; - - methods = json_array (); - hc = GNUNET_CRYPTO_hash_context_start (); - for (p=wire_head;NULL != p;p = p->next) - { - wf = p->type; - json_array_append_new (methods, - json_string (wf)); - GNUNET_CRYPTO_hash_context_read (hc, - wf, - strlen (wf) + 1); - } - GNUNET_CRYPTO_hash_context_finish (hc, - h); - return methods; -} - - -/* end of taler-mint-httpd_validation.c */ |