/* This file is part of TALER Copyright (C) 2014, 2015 Christian Grothoff (and other contributing authors) 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. You should have received a copy of the GNU General Public License along with TALER; see the file COPYING. If not, If not, see */ /** * @file pq/pq_helper.c * @brief functions to initialize parameter arrays * @author Christian Grothoff */ #include "platform.h" #include #include "taler_pq_lib.h" /** * Generate query parameter for a currency, consisting of the three * components "value", "fraction" and "currency" in this order. The * types must be a 64-bit integer, 32-bit integer and a * #TALER_CURRENCY_LEN-sized BLOB/VARCHAR respectively. * * @param x pointer to the query parameter to pass * @return array entry for the query parameters to use */ struct TALER_PQ_QueryParam TALER_PQ_query_param_amount_nbo (const struct TALER_AmountNBO *x) { struct TALER_PQ_QueryParam res = { TALER_PQ_QF_AMOUNT_NBO, x, sizeof (*x) }; return res; } /** * Generate query parameter for a currency, consisting of the three * components "value", "fraction" and "currency" in this order. The * types must be a 64-bit integer, 32-bit integer and a * #TALER_CURRENCY_LEN-sized BLOB/VARCHAR respectively. * * @param x pointer to the query parameter to pass * @return array entry for the query parameters to use */ struct TALER_PQ_QueryParam TALER_PQ_query_param_amount (const struct TALER_Amount *x) { struct TALER_PQ_QueryParam res = { TALER_PQ_QF_AMOUNT, x, sizeof (*x) }; return res; } /** * Generate query parameter for an RSA public key. The * database must contain a BLOB type in the respective position. * * @param x the query parameter to pass * @return array entry for the query parameters to use */ struct TALER_PQ_QueryParam TALER_PQ_query_param_rsa_public_key (const struct GNUNET_CRYPTO_rsa_PublicKey *x) { struct TALER_PQ_QueryParam res = { TALER_PQ_QF_RSA_PUBLIC_KEY, (x), 0 }; return res; } /** * Generate query parameter for an RSA signature. The * database must contain a BLOB type in the respective position. * * @param x the query parameter to pass * @return array entry for the query parameters to use */ struct TALER_PQ_QueryParam TALER_PQ_query_param_rsa_signature (const struct GNUNET_CRYPTO_rsa_Signature *x) { struct TALER_PQ_QueryParam res = { TALER_PQ_QF_RSA_SIGNATURE, (x), 0 }; return res; } /** * Generate query parameter for an absolute time value. * The database must store a 64-bit integer. * * @param x pointer to the query parameter to pass * @return array entry for the query parameters to use */ struct TALER_PQ_QueryParam TALER_PQ_query_param_absolute_time (const struct GNUNET_TIME_Absolute *x) { struct TALER_PQ_QueryParam res = { TALER_PQ_QF_TIME_ABSOLUTE, x, sizeof (*x) }; return res; } /** * Variable-size result expected. * * @param name name of the field in the table * @param[out] dst where to store the result, allocated * @param[out] sptr where to store the size of @a dst * @return array entry for the result specification to use */ struct TALER_PQ_ResultSpec TALER_PQ_result_spec_variable_size (const char *name, void **dst, size_t *sptr) { struct TALER_PQ_ResultSpec res = { TALER_PQ_RF_VARSIZE_BLOB, (void *) (dst), 0, name, sptr }; return res; } /** * Currency amount expected. * * @param name name of the field in the table * @param[out] amount where to store the result * @return array entry for the result specification to use */ struct TALER_PQ_ResultSpec TALER_PQ_result_spec_amount_nbo (const char *name, struct TALER_AmountNBO *amount) { struct TALER_PQ_ResultSpec res = {TALER_PQ_RF_AMOUNT_NBO, (void *) amount, sizeof (*amount), name, NULL }; return res; } /** * Currency amount expected. * * @param name name of the field in the table * @param[out] amount where to store the result * @return array entry for the result specification to use */ struct TALER_PQ_ResultSpec TALER_PQ_result_spec_amount (const char *name, struct TALER_Amount *amount) { struct TALER_PQ_ResultSpec res = {TALER_PQ_RF_AMOUNT, (void *) amount, sizeof (*amount), name, NULL }; return res; } /** * RSA public key expected. * * @param name name of the field in the table * @param[out] rsa where to store the result * @return array entry for the result specification to use */ struct TALER_PQ_ResultSpec TALER_PQ_result_spec_rsa_public_key (const char *name, struct GNUNET_CRYPTO_rsa_PublicKey **rsa) { struct TALER_PQ_ResultSpec res = {TALER_PQ_RF_RSA_PUBLIC_KEY, (void *) rsa, 0, name, NULL }; return res; } /** * RSA signature expected. * * @param name name of the field in the table * @param[out] sig where to store the result; * @return array entry for the result specification to use */ struct TALER_PQ_ResultSpec TALER_PQ_result_spec_rsa_signature (const char *name, struct GNUNET_CRYPTO_rsa_Signature **sig) { struct TALER_PQ_ResultSpec res = {TALER_PQ_RF_RSA_SIGNATURE, (void *) sig, 0, (name), NULL }; return res; } /** * Absolute time expected. * * @param name name of the field in the table * @param[out] at where to store the result * @return array entry for the result specification to use */ struct TALER_PQ_ResultSpec TALER_PQ_result_spec_absolute_time (const char *name, struct GNUNET_TIME_Absolute *at) { struct TALER_PQ_ResultSpec res = {TALER_PQ_RF_TIME_ABSOLUTE, (void *) at, sizeof (*at), (name), NULL }; return res; } /* end of pq_helper.c */