[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-donau] branch master updated: [db] cleanup
From: |
gnunet |
Subject: |
[taler-donau] branch master updated: [db] cleanup |
Date: |
Mon, 04 Dec 2023 22:47:29 +0100 |
This is an automated email from the git hooks/post-receive script.
johannes-casaburi pushed a commit to branch master
in repository donau.
The following commit(s) were added to refs/heads/master by this push:
new 26ecdc2 [db] cleanup
new 86304c0 Merge remote-tracking branch 'refs/remotes/origin/master'
26ecdc2 is described below
commit 26ecdc2062cc366cabc17fcf961c6db87da4e5bc
Author: Casaburi Johannes <johannes.casaburi@students.bfh.ch>
AuthorDate: Mon Dec 4 22:46:20 2023 +0100
[db] cleanup
---
src/include/donaudb_plugin.h | 11 +-
src/pq/pq_result_helper.c | 1500 +++---------------------------------------
2 files changed, 107 insertions(+), 1404 deletions(-)
diff --git a/src/include/donaudb_plugin.h b/src/include/donaudb_plugin.h
index 0a36ebf..de6a3f7 100644
--- a/src/include/donaudb_plugin.h
+++ b/src/include/donaudb_plugin.h
@@ -14,19 +14,18 @@
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
- * @file include/taler_donaudb_plugin.h
+ * @file include/donaudb_plugin.h
* @brief Low-level (statement-level) database access for the donau
* @author Johannes Casaburi
*/
#ifndef DONAUDB_PLUGIN_H
#define DONAUDB_PLUGIN_H
-#include <jansson.h>
-#include <gnunet/gnunet_util_lib.h>
+//#include <jansson.h>
#include <gnunet/gnunet_db_lib.h>
#include "taler/taler_json_lib.h"
#include "donau_signatures.h"
#include "donau_util.h"
-#include "taler/taler_extensions_policy.h"
+//#include "taler/taler_extensions_policy.h"
/**
* Meta data about a donation unit key.
@@ -85,12 +84,12 @@ struct DONAUDB_DonationUnitKey
* The private key of the donation unit. Will be NULL if the private
* key is not available.
*/
- // struct DONAU_DonationUnitPublicKey donation_unit_priv;
+ struct DONAU_DonationUnitPublicKey donation_unit_priv;
/**
* Decoded donation unit public key.
*/
- // struct DONAU_DonationUnitPublicKey donation_unit_pub;
+ struct DONAU_DonationUnitPublicKey donation_unit_pub;
};
diff --git a/src/pq/pq_result_helper.c b/src/pq/pq_result_helper.c
index 6546164..1ede877 100644
--- a/src/pq/pq_result_helper.c
+++ b/src/pq/pq_result_helper.c
@@ -18,1407 +18,111 @@
* @brief functions to initialize parameter arrays
* @author Christian Grothoff
*/
-// #include "taler/platform.h"
-#include <gnunet/gnunet_util_lib.h>
-// #include "pq_common.h"
-// #include "taler_pq_lib.h"
+#include "taler/platform.h"
+//#include <gnunet/gnunet_util_lib.h>
+//#include "pq_common.h"
+#include "taler/taler_pq_lib.h"
-
-// /**
-// * Extract an amount from a tuple including the currency from a Postgres
-// * database @a result at row @a row.
-// *
-// * @param cls closure; not used
-// * @param result where to extract data from
-// * @param row row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_NO if at least one result was NULL
-// * #GNUNET_SYSERR if a result was invalid (non-existing field)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_amount_currency_tuple (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_Amount *r_amount = dst;
-// int col;
-
-// (void) cls;
-// if (sizeof (struct TALER_Amount) != *dst_size)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-
-// /* Set return value to invalid in case we don't finish */
-// memset (r_amount,
-// 0,
-// sizeof (struct TALER_Amount));
-// col = PQfnumber (result,
-// fname);
-// if (col < 0)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Field `%s' does not exist in result\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// col))
-// {
-// return GNUNET_NO;
-// }
-
-// /* Parse the tuple */
-// {
-// struct TALER_PQ_AmountCurrencyP ap;
-// const char *in;
-// size_t size;
-
-// size = PQgetlength (result,
-// row,
-// col);
-// if ( (size >= sizeof (ap)) ||
-// (size <= sizeof (ap) - TALER_CURRENCY_LEN) )
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Incorrect size of binary field `%s' (got %zu, expected
(%zu-%zu))\n",
-// fname,
-// size,
-// sizeof (ap) - TALER_CURRENCY_LEN,
-// sizeof (ap));
-// return GNUNET_SYSERR;
-// }
-
-// in = PQgetvalue (result,
-// row,
-// col);
-// memset (&ap.c,
-// 0,
-// TALER_CURRENCY_LEN);
-// memcpy (&ap,
-// in,
-// size);
-// if (3 != ntohl (ap.cnt))
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Incorrect number of elements in tuple-field `%s'\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// /* TODO[oec]: OID-checks? */
-
-// r_amount->value = GNUNET_ntohll (ap.v);
-// r_amount->fraction = ntohl (ap.f);
-// memcpy (r_amount->currency,
-// ap.c,
-// TALER_CURRENCY_LEN);
-// if ('\0' != r_amount->currency[TALER_CURRENCY_LEN - 1])
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Invalid currency (not 0-terminated) in tuple field
`%s'\n",
-// fname);
-// /* be sure nobody uses this by accident */
-// memset (r_amount,
-// 0,
-// sizeof (struct TALER_Amount));
-// return GNUNET_SYSERR;
-// }
-// }
-
-// if (r_amount->value >= TALER_AMOUNT_MAX_VALUE)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Value in field `%s' exceeds legal range\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// if (r_amount->fraction >= TALER_AMOUNT_FRAC_BASE)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Fraction in field `%s' exceeds legal range\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// return GNUNET_OK;
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_amount_with_currency (const char *name,
-// struct TALER_Amount *amount)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_amount_currency_tuple,
-// .dst = (void *) amount,
-// .dst_size = sizeof (*amount),
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract an amount from a tuple from a Postgres database @a result at row
@a row.
-// *
-// * @param cls closure, a `const char *` giving the currency
-// * @param result where to extract data from
-// * @param row row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_NO if at least one result was NULL
-// * #GNUNET_SYSERR if a result was invalid (non-existing field)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_amount_tuple (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_Amount *r_amount = dst;
-// const char *currency = cls;
-// int col;
-// size_t len;
-
-// if (sizeof (struct TALER_Amount) != *dst_size)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-
-// /* Set return value to invalid in case we don't finish */
-// memset (r_amount,
-// 0,
-// sizeof (struct TALER_Amount));
-// col = PQfnumber (result,
-// fname);
-// if (col < 0)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Field `%s' does not exist in result\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// col))
-// {
-// return GNUNET_NO;
-// }
-
-// /* Parse the tuple */
-// {
-// struct TALER_PQ_AmountP ap;
-// const char *in;
-// size_t size;
-
-// size = PQgetlength (result,
-// row,
-// col);
-// if (sizeof(ap) != size)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Incorrect size of binary field `%s' (got %zu, expected
%zu)\n",
-// fname,
-// size,
-// sizeof(ap));
-// return GNUNET_SYSERR;
-// }
-
-// in = PQgetvalue (result,
-// row,
-// col);
-// memcpy (&ap,
-// in,
-// size);
-// if (2 != ntohl (ap.cnt))
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Incorrect number of elements in tuple-field `%s'\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// /* TODO[oec]: OID-checks? */
-
-// r_amount->value = GNUNET_ntohll (ap.v);
-// r_amount->fraction = ntohl (ap.f);
-// }
-
-// if (r_amount->value >= TALER_AMOUNT_MAX_VALUE)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Value in field `%s' exceeds legal range\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// if (r_amount->fraction >= TALER_AMOUNT_FRAC_BASE)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Fraction in field `%s' exceeds legal range\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-
-// len = GNUNET_MIN (TALER_CURRENCY_LEN - 1,
-// strlen (currency));
-
-// GNUNET_memcpy (r_amount->currency,
-// currency,
-// len);
-// return GNUNET_OK;
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_amount (const char *name,
-// const char *currency,
-// struct TALER_Amount *amount)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_amount_tuple,
-// .cls = (void *) currency,
-// .dst = (void *) amount,
-// .dst_size = sizeof (*amount),
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract data from a Postgres database @a result at row @a row.
-// *
-// * @param cls closure
-// * @param result where to extract data from
-// * @param row row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_NO if at least one result was NULL
-// * #GNUNET_SYSERR if a result was invalid (non-existing field)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_json (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// json_t **j_dst = dst;
-// const char *res;
-// int fnum;
-// json_error_t json_error;
-// size_t slen;
-
-// (void) cls;
-// (void) dst_size;
-// fnum = PQfnumber (result,
-// fname);
-// if (fnum < 0)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Field `%s' does not exist in result\n",
-// fname);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// fnum))
-// return GNUNET_NO;
-// slen = PQgetlength (result,
-// row,
-// fnum);
-// res = (const char *) PQgetvalue (result,
-// row,
-// fnum);
-// *j_dst = json_loadb (res,
-// slen,
-// JSON_REJECT_DUPLICATES,
-// &json_error);
-// if (NULL == *j_dst)
-// {
-// GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-// "Failed to parse JSON result for field `%s': %s (%s)\n",
-// fname,
-// json_error.text,
-// json_error.source);
-// return GNUNET_SYSERR;
-// }
-// return GNUNET_OK;
-// }
-
-
-// /**
-// * Function called to clean up memory allocated
-// * by a #GNUNET_PQ_ResultConverter.
-// *
-// * @param cls closure
-// * @param rd result data to clean up
-// */
-// static void
-// clean_json (void *cls,
-// void *rd)
-// {
-// json_t **dst = rd;
-
-// (void) cls;
-// if (NULL != *dst)
-// {
-// json_decref (*dst);
-// *dst = NULL;
-// }
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_json (const char *name,
-// json_t **jp)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_json,
-// .cleaner = &clean_json,
-// .dst = (void *) jp,
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract data from a Postgres database @a result at row @a row.
-// *
-// * @param cls closure
-// * @param result where to extract data from
-// * @param row the row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_denom_pub (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_DenominationPublicKey *pk = dst;
-// size_t len;
-// const char *res;
-// int fnum;
-// uint32_t be[2];
-
-// (void) cls;
-// (void) dst_size;
-// fnum = PQfnumber (result,
-// fname);
-// if (fnum < 0)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// fnum))
-// return GNUNET_NO;
-
-// /* if a field is null, continue but
-// * remember that we now return a different result */
-// len = PQgetlength (result,
-// row,
-// fnum);
-// res = PQgetvalue (result,
-// row,
-// fnum);
-// if (len < sizeof (be))
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (be,
-// res,
-// sizeof (be));
-// res += sizeof (be);
-// len -= sizeof (be);
-// pk->cipher = ntohl (be[0]);
-// pk->age_mask.bits = ntohl (be[1]);
-// switch (pk->cipher)
-// {
-// case TALER_DENOMINATION_RSA:
-// pk->details.rsa_public_key
-// = GNUNET_CRYPTO_rsa_public_key_decode (res,
-// len);
-// if (NULL == pk->details.rsa_public_key)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// return GNUNET_OK;
-// case TALER_DENOMINATION_CS:
-// if (sizeof (pk->details.cs_public_key) != len)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&pk->details.cs_public_key,
-// res,
-// len);
-// return GNUNET_OK;
-// default:
-// GNUNET_break (0);
-// }
-// return GNUNET_SYSERR;
-// }
-
-
-// /**
-// * Function called to clean up memory allocated
-// * by a #GNUNET_PQ_ResultConverter.
-// *
-// * @param cls closure
-// * @param rd result data to clean up
-// */
-// static void
-// clean_denom_pub (void *cls,
-// void *rd)
-// {
-// struct TALER_DenominationPublicKey *denom_pub = rd;
-
-// (void) cls;
-// TALER_denom_pub_free (denom_pub);
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_denom_pub (const char *name,
-// struct TALER_DenominationPublicKey
*denom_pub)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_denom_pub,
-// .cleaner = &clean_denom_pub,
-// .dst = (void *) denom_pub,
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract data from a Postgres database @a result at row @a row.
-// *
-// * @param cls closure
-// * @param result where to extract data from
-// * @param row the row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_denom_sig (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_DenominationSignature *sig = dst;
-// size_t len;
-// const char *res;
-// int fnum;
-// uint32_t be[2];
-
-// (void) cls;
-// (void) dst_size;
-// fnum = PQfnumber (result,
-// fname);
-// if (fnum < 0)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// fnum))
-// return GNUNET_NO;
-
-// /* if a field is null, continue but
-// * remember that we now return a different result */
-// len = PQgetlength (result,
-// row,
-// fnum);
-// res = PQgetvalue (result,
-// row,
-// fnum);
-// if (len < sizeof (be))
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&be,
-// res,
-// sizeof (be));
-// if (0x00 != ntohl (be[1]))
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// res += sizeof (be);
-// len -= sizeof (be);
-// sig->cipher = ntohl (be[0]);
-// switch (sig->cipher)
-// {
-// case TALER_DENOMINATION_RSA:
-// sig->details.rsa_signature
-// = GNUNET_CRYPTO_rsa_signature_decode (res,
-// len);
-// if (NULL == sig->details.rsa_signature)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// return GNUNET_OK;
-// case TALER_DENOMINATION_CS:
-// if (sizeof (sig->details.cs_signature) != len)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&sig->details.cs_signature,
-// res,
-// len);
-// return GNUNET_OK;
-// default:
-// GNUNET_break (0);
-// }
-// return GNUNET_SYSERR;
-// }
-
-
-// /**
-// * Function called to clean up memory allocated
-// * by a #GNUNET_PQ_ResultConverter.
-// *
-// * @param cls closure
-// * @param rd result data to clean up
-// */
-// static void
-// clean_denom_sig (void *cls,
-// void *rd)
-// {
-// struct TALER_DenominationSignature *denom_sig = rd;
-
-// (void) cls;
-// TALER_denom_sig_free (denom_sig);
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_denom_sig (const char *name,
-// struct TALER_DenominationSignature
*denom_sig)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_denom_sig,
-// .cleaner = &clean_denom_sig,
-// .dst = (void *) denom_sig,
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract data from a Postgres database @a result at row @a row.
-// *
-// * @param cls closure
-// * @param result where to extract data from
-// * @param row the row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_blinded_denom_sig (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_BlindedDenominationSignature *sig = dst;
-// size_t len;
-// const char *res;
-// int fnum;
-// uint32_t be[2];
-
-// (void) cls;
-// (void) dst_size;
-// fnum = PQfnumber (result,
-// fname);
-// if (fnum < 0)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// fnum))
-// return GNUNET_NO;
-
-// /* if a field is null, continue but
-// * remember that we now return a different result */
-// len = PQgetlength (result,
-// row,
-// fnum);
-// res = PQgetvalue (result,
-// row,
-// fnum);
-// if (len < sizeof (be))
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&be,
-// res,
-// sizeof (be));
-// if (0x01 != ntohl (be[1])) /* magic marker: blinded */
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// res += sizeof (be);
-// len -= sizeof (be);
-// sig->cipher = ntohl (be[0]);
-// switch (sig->cipher)
-// {
-// case TALER_DENOMINATION_RSA:
-// sig->details.blinded_rsa_signature
-// = GNUNET_CRYPTO_rsa_signature_decode (res,
-// len);
-// if (NULL == sig->details.blinded_rsa_signature)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// return GNUNET_OK;
-// case TALER_DENOMINATION_CS:
-// if (sizeof (sig->details.blinded_cs_answer) != len)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&sig->details.blinded_cs_answer,
-// res,
-// len);
-// return GNUNET_OK;
-// default:
-// GNUNET_break (0);
-// }
-// return GNUNET_SYSERR;
-// }
-
-
-// /**
-// * Function called to clean up memory allocated
-// * by a #GNUNET_PQ_ResultConverter.
-// *
-// * @param cls closure
-// * @param rd result data to clean up
-// */
-// static void
-// clean_blinded_denom_sig (void *cls,
-// void *rd)
-// {
-// struct TALER_BlindedDenominationSignature *denom_sig = rd;
-
-// (void) cls;
-// TALER_blinded_denom_sig_free (denom_sig);
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_blinded_denom_sig (
-// const char *name,
-// struct TALER_BlindedDenominationSignature *denom_sig)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_blinded_denom_sig,
-// .cleaner = &clean_blinded_denom_sig,
-// .dst = (void *) denom_sig,
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract data from a Postgres database @a result at row @a row.
-// *
-// * @param cls closure
-// * @param result where to extract data from
-// * @param row the row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_blinded_planchet (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_BlindedPlanchet *bp = dst;
-// size_t len;
-// const char *res;
-// int fnum;
-// uint32_t be[2];
-
-// (void) cls;
-// (void) dst_size;
-// fnum = PQfnumber (result,
-// fname);
-// if (fnum < 0)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// fnum))
-// return GNUNET_NO;
-
-// /* if a field is null, continue but
-// * remember that we now return a different result */
-// len = PQgetlength (result,
-// row,
-// fnum);
-// res = PQgetvalue (result,
-// row,
-// fnum);
-// if (len < sizeof (be))
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&be,
-// res,
-// sizeof (be));
-// if (0x0100 != ntohl (be[1])) /* magic marker: blinded */
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// res += sizeof (be);
-// len -= sizeof (be);
-// bp->cipher = ntohl (be[0]);
-// switch (bp->cipher)
-// {
-// case TALER_DENOMINATION_RSA:
-// bp->details.rsa_blinded_planchet.blinded_msg_size
-// = len;
-// bp->details.rsa_blinded_planchet.blinded_msg
-// = GNUNET_memdup (res,
-// len);
-// return GNUNET_OK;
-// case TALER_DENOMINATION_CS:
-// if (sizeof (bp->details.cs_blinded_planchet) != len)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&bp->details.cs_blinded_planchet,
-// res,
-// len);
-// return GNUNET_OK;
-// default:
-// GNUNET_break (0);
-// }
-// return GNUNET_SYSERR;
-// }
-
-
-// /**
-// * Function called to clean up memory allocated
-// * by a #GNUNET_PQ_ResultConverter.
-// *
-// * @param cls closure
-// * @param rd result data to clean up
-// */
-// static void
-// clean_blinded_planchet (void *cls,
-// void *rd)
-// {
-// struct TALER_BlindedPlanchet *bp = rd;
-
-// (void) cls;
-// TALER_blinded_planchet_free (bp);
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_blinded_planchet (
-// const char *name,
-// struct TALER_BlindedPlanchet *bp)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_blinded_planchet,
-// .cleaner = &clean_blinded_planchet,
-// .dst = (void *) bp,
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Extract data from a Postgres database @a result at row @a row.
-// *
-// * @param cls closure
-// * @param result where to extract data from
-// * @param row row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_exchange_withdraw_values (void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// struct TALER_ExchangeWithdrawValues *alg_values = dst;
-// size_t len;
-// const char *res;
-// int fnum;
-// uint32_t be[2];
-
-// (void) cls;
-// (void) dst_size;
-// fnum = PQfnumber (result,
-// fname);
-// if (fnum < 0)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// if (PQgetisnull (result,
-// row,
-// fnum))
-// return GNUNET_NO;
-
-// /* if a field is null, continue but
-// * remember that we now return a different result */
-// len = PQgetlength (result,
-// row,
-// fnum);
-// res = PQgetvalue (result,
-// row,
-// fnum);
-// if (len < sizeof (be))
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&be,
-// res,
-// sizeof (be));
-// if (0x010000 != ntohl (be[1])) /* magic marker: EWV */
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// res += sizeof (be);
-// len -= sizeof (be);
-// alg_values->cipher = ntohl (be[0]);
-// switch (alg_values->cipher)
-// {
-// case TALER_DENOMINATION_RSA:
-// if (0 != len)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// return GNUNET_OK;
-// case TALER_DENOMINATION_CS:
-// if (sizeof (struct TALER_DenominationCSPublicRPairP) != len)
-// {
-// GNUNET_break (0);
-// return GNUNET_SYSERR;
-// }
-// GNUNET_memcpy (&alg_values->details.cs_values,
-// res,
-// len);
-// return GNUNET_OK;
-// default:
-// GNUNET_break (0);
-// }
-// return GNUNET_SYSERR;
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_exchange_withdraw_values (
-// const char *name,
-// struct TALER_ExchangeWithdrawValues *ewv)
-// {
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = &extract_exchange_withdraw_values,
-// .dst = (void *) ewv,
-// .fname = name
-// };
-
-// return res;
-// }
-
-
-// /**
-// * Closure for the array result specifications. Contains type information
-// * for the generic parser extract_array_generic and out-pointers for the
results.
-// */
-// struct ArrayResultCls
-// {
-// /* Oid of the expected type, must match the oid in the header of the
PQResult struct */
-// Oid oid;
-
-// /* Target type */
-// enum TALER_PQ_ArrayType typ;
-
-// /* If not 0, defines the expected size of each entry */
-// size_t same_size;
-
-// /* Out-pointer to write the number of elements in the array */
-// size_t *num;
-
-// /* Out-pointer. If @a typ is TALER_PQ_array_of_byte and @a same_size is 0,
-// * allocate and put the array of @a num sizes here. NULL otherwise */
-// size_t **sizes;
-
-// /* DB_connection, needed for OID-lookup for composite types */
-// const struct GNUNET_PQ_Context *db;
-
-// /* Currency information for amount composites */
-// char currency[TALER_CURRENCY_LEN];
-// };
-
-// /**
-// * Extract data from a Postgres database @a result as array of a specific
type
-// * from row @a row. The type information and optionally additional
-// * out-parameters are given in @a cls which is of type array_result_cls.
-// *
-// * @param cls closure of type array_result_cls
-// * @param result where to extract data from
-// * @param row row to extract data from
-// * @param fname name (or prefix) of the fields to extract from
-// * @param[in,out] dst_size where to store size of result, may be NULL
-// * @param[out] dst where to store the result
-// * @return
-// * #GNUNET_YES if all results could be extracted
-// * #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
-// */
-// static enum GNUNET_GenericReturnValue
-// extract_array_generic (
-// void *cls,
-// PGresult *result,
-// int row,
-// const char *fname,
-// size_t *dst_size,
-// void *dst)
-// {
-// const struct ArrayResultCls *info = cls;
-// int data_sz;
-// char *data;
-// void *out = NULL;
-// struct GNUNET_PQ_ArrayHeader_P header;
-// int col_num;
-
-// GNUNET_assert (NULL != dst);
-// *((void **) dst) = NULL;
-
-/* #define FAIL_IF(cond) \
- do { \
- if ((cond)) \
- { \
- GNUNET_break (! (cond)); \
- goto FAIL; \
- } \
- } while (0)
-*/
-// col_num = PQfnumber (result, fname);
-// FAIL_IF (0 > col_num);
-
-// data_sz = PQgetlength (result, row, col_num);
-// FAIL_IF (0 > data_sz);
-// FAIL_IF (sizeof(header) > (size_t) data_sz);
-
-// data = PQgetvalue (result, row, col_num);
-// FAIL_IF (NULL == data);
-
-// {
-// struct GNUNET_PQ_ArrayHeader_P *h =
-// (struct GNUNET_PQ_ArrayHeader_P *) data;
-
-// header.ndim = ntohl (h->ndim);
-// header.has_null = ntohl (h->has_null);
-// header.oid = ntohl (h->oid);
-// header.dim = ntohl (h->dim);
-// header.lbound = ntohl (h->lbound);
-
-// FAIL_IF (1 != header.ndim);
-// FAIL_IF (INT_MAX <= header.dim);
-// FAIL_IF (0 != header.has_null);
-// FAIL_IF (1 != header.lbound);
-// FAIL_IF (info->oid != header.oid);
-// }
-
-// if (NULL != info->num)
-// *info->num = header.dim;
-
-// {
-// char *in = data + sizeof(header);
-
-// switch (info->typ)
-// {
-// case TALER_PQ_array_of_amount:
-// {
-// struct TALER_Amount *amounts;
-// if (NULL != dst_size)
-// *dst_size = sizeof(struct TALER_Amount) * (header.dim);
-
-// amounts = GNUNET_new_array (header.dim, struct TALER_Amount);
-// *((void **) dst) = amounts;
-
-// for (uint32_t i = 0; i < header.dim; i++)
-// {
-// struct TALER_PQ_AmountP ap;
-// struct TALER_Amount *amount = &amounts[i];
-// uint32_t val;
-// size_t sz;
-
-// GNUNET_memcpy (&val,
-// in,
-// sizeof(val));
-// sz = ntohl (val);
-// in += sizeof(val);
-
-// /* total size for this array-entry */
-// FAIL_IF (sizeof(ap) > sz);
-
-// GNUNET_memcpy (&ap,
-// in,
-// sz);
-// FAIL_IF (2 != ntohl (ap.cnt));
-
-// amount->value = GNUNET_ntohll (ap.v);
-// amount->fraction = ntohl (ap.f);
-// GNUNET_memcpy (amount->currency,
-// info->currency,
-// TALER_CURRENCY_LEN);
-
-// in += sizeof(struct TALER_PQ_AmountP);
-// }
-// return GNUNET_OK;
-// }
-// case TALER_PQ_array_of_denom_hash:
-// if (NULL != dst_size)
-// *dst_size = sizeof(struct TALER_DenominationHashP) * (header.dim);
-// out = GNUNET_new_array (header.dim, struct TALER_DenominationHashP);
-// *((void **) dst) = out;
-// for (uint32_t i = 0; i < header.dim; i++)
-// {
-// uint32_t val;
-// size_t sz;
-
-// GNUNET_memcpy (&val,
-// in,
-// sizeof(val));
-// sz = ntohl (val);
-// FAIL_IF (sz != sizeof(struct TALER_DenominationHashP));
-// in += sizeof(uint32_t);
-// *(struct TALER_DenominationHashP *) out =
-// *(struct TALER_DenominationHashP *) in;
-// in += sz;
-// out += sz;
-// }
-// return GNUNET_OK;
-
-// case TALER_PQ_array_of_blinded_coin_hash:
-// if (NULL != dst_size)
-// *dst_size = sizeof(struct TALER_BlindedCoinHashP) * (header.dim);
-// out = GNUNET_new_array (header.dim, struct TALER_BlindedCoinHashP);
-// *((void **) dst) = out;
-// for (uint32_t i = 0; i < header.dim; i++)
-// {
-// uint32_t val;
-// size_t sz;
-
-// GNUNET_memcpy (&val,
-// in,
-// sizeof(val));
-// sz = ntohl (val);
-// FAIL_IF (sz != sizeof(struct TALER_BlindedCoinHashP));
-// in += sizeof(uint32_t);
-// *(struct TALER_BlindedCoinHashP *) out =
-// *(struct TALER_BlindedCoinHashP *) in;
-// in += sz;
-// out += sz;
-// }
-// return GNUNET_OK;
-
-// case TALER_PQ_array_of_blinded_denom_sig:
-// {
-// struct TALER_BlindedDenominationSignature *denom_sigs;
-// if (0 == header.dim)
-// {
-// if (NULL != dst_size)
-// *dst_size = 0;
-// break;
-// }
-
-// denom_sigs = GNUNET_new_array (header.dim,
-// struct
TALER_BlindedDenominationSignature);
-// *((void **) dst) = denom_sigs;
-
-// /* copy data */
-// for (uint32_t i = 0; i < header.dim; i++)
-// {
-// struct TALER_BlindedDenominationSignature *denom_sig =
&denom_sigs[i];
-// uint32_t be[2];
-// uint32_t val;
-// size_t sz;
-
-// GNUNET_memcpy (&val,
-// in,
-// sizeof(val));
-// sz = ntohl (val);
-// FAIL_IF (sizeof(be) > sz);
-
-// in += sizeof(val);
-// GNUNET_memcpy (&be,
-// in,
-// sizeof(be));
-// FAIL_IF (0x01 != ntohl (be[1])); /* magic marker: blinded */
-
-// in += sizeof(be);
-// sz -= sizeof(be);
-
-// denom_sig->cipher = ntohl (be[0]);
-// switch (denom_sig->cipher)
-// {
-// case TALER_DENOMINATION_RSA:
-// denom_sig->details.blinded_rsa_signature =
-// GNUNET_CRYPTO_rsa_signature_decode (in,
-// sz);
-// FAIL_IF (NULL == denom_sig->details.blinded_rsa_signature);
-// break;
-
-// case TALER_DENOMINATION_CS:
-// FAIL_IF (sizeof(denom_sig->details.blinded_cs_answer) != sz);
-// GNUNET_memcpy (&denom_sig->details.blinded_cs_answer,
-// in,
-// sz);
-// break;
-
-// default:
-// FAIL_IF (true);
-// }
-
-// in += sz;
-// }
-// return GNUNET_OK;
-// }
-// default:
-// FAIL_IF (true);
-// }
-// }
-
-// FAIL:
-// GNUNET_free (*(void **) dst);
-// return GNUNET_SYSERR;
-// #undef FAIL_IF
-
-// }
-
-
-// /**
-// * Cleanup of the data and closure of an array spec.
-// */
-// static void
-// array_cleanup (void *cls,
-// void *rd)
-// {
-
-// struct ArrayResultCls *info = cls;
-// void **dst = rd;
-
-// if ((0 == info->same_size) &&
-// (NULL != info->sizes))
-// GNUNET_free (*(info->sizes));
-
-// GNUNET_free (cls);
-// GNUNET_free (*dst);
-// *dst = NULL;
-// }
-
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_array_blinded_denom_sig (
-// struct GNUNET_PQ_Context *db,
-// const char *name,
-// size_t *num,
-// struct TALER_BlindedDenominationSignature **denom_sigs)
-// {
-// struct ArrayResultCls *info = GNUNET_new (struct ArrayResultCls);
-
-// info->num = num;
-// info->typ = TALER_PQ_array_of_blinded_denom_sig;
-// GNUNET_assert (GNUNET_OK ==
-// GNUNET_PQ_get_oid_by_name (db,
-// "bytea",
-// &info->oid));
-
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = extract_array_generic,
-// .cleaner = array_cleanup,
-// .dst = (void *) denom_sigs,
-// .fname = name,
-// .cls = info
-// };
-// return res;
-
-// };
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_array_blinded_coin_hash (
-// struct GNUNET_PQ_Context *db,
-// const char *name,
-// size_t *num,
-// struct TALER_BlindedCoinHashP **h_coin_evs)
-// {
-// struct ArrayResultCls *info = GNUNET_new (struct ArrayResultCls);
-
-// info->num = num;
-// info->typ = TALER_PQ_array_of_blinded_coin_hash;
-// GNUNET_assert (GNUNET_OK ==
-// GNUNET_PQ_get_oid_by_name (db,
-// "bytea",
-// &info->oid));
-
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = extract_array_generic,
-// .cleaner = array_cleanup,
-// .dst = (void *) h_coin_evs,
-// .fname = name,
-// .cls = info
-// };
-// return res;
-
-// };
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_array_denom_hash (
-// struct GNUNET_PQ_Context *db,
-// const char *name,
-// size_t *num,
-// struct TALER_DenominationHashP **denom_hs)
-// {
-// struct ArrayResultCls *info = GNUNET_new (struct ArrayResultCls);
-
-// info->num = num;
-// info->typ = TALER_PQ_array_of_denom_hash;
-// GNUNET_assert (GNUNET_OK ==
-// GNUNET_PQ_get_oid_by_name (db,
-// "bytea",
-// &info->oid));
-
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = extract_array_generic,
-// .cleaner = array_cleanup,
-// .dst = (void *) denom_hs,
-// .fname = name,
-// .cls = info
-// };
-// return res;
-
-// };
-
-// struct GNUNET_PQ_ResultSpec
-// TALER_PQ_result_spec_array_amount (
-// struct GNUNET_PQ_Context *db,
-// const char *name,
-// const char *currency,
-// size_t *num,
-// struct TALER_Amount **amounts)
-// {
-// struct ArrayResultCls *info = GNUNET_new (struct ArrayResultCls);
-
-// info->num = num;
-// info->typ = TALER_PQ_array_of_amount;
-// info->db = db;
-// GNUNET_assert (GNUNET_OK ==
-// GNUNET_PQ_get_oid_by_name (db,
-// "taler_amount",
-// &info->oid));
-
-// {
-// size_t clen = GNUNET_MIN (TALER_CURRENCY_LEN - 1,
-// strlen (currency));
-// GNUNET_memcpy (&info->currency,
-// currency,
-// clen);
-// }
-
-// struct GNUNET_PQ_ResultSpec res = {
-// .conv = extract_array_generic,
-// .cleaner = array_cleanup,
-// .dst = (void *) amounts,
-// .fname = name,
-// .cls = info,
-// };
-// return res;
+/**
+ * Extract data from a Postgres database @a result at row @a row.
+ *
+ * @param cls closure
+ * @param result where to extract data from
+ * @param row row to extract data from
+ * @param fname name (or prefix) of the fields to extract from
+ * @param[in,out] dst_size where to store size of result, may be NULL
+ * @param[out] dst where to store the result
+ * @return
+ * #GNUNET_YES if all results could be extracted
+ * #GNUNET_NO if at least one result was NULL
+ * #GNUNET_SYSERR if a result was invalid (non-existing field)
+ */
+static enum GNUNET_GenericReturnValue
+extract_json (void *cls,
+ PGresult *result,
+ int row,
+ const char *fname,
+ size_t *dst_size,
+ void *dst)
+{
+ json_t **j_dst = dst;
+ const char *res;
+ int fnum;
+ json_error_t json_error;
+ size_t slen;
+
+ (void) cls;
+ (void) dst_size;
+ fnum = PQfnumber (result,
+ fname);
+ if (fnum < 0)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Field `%s' does not exist in result\n",
+ fname);
+ return GNUNET_SYSERR;
+ }
+ if (PQgetisnull (result,
+ row,
+ fnum))
+ return GNUNET_NO;
+ slen = PQgetlength (result,
+ row,
+ fnum);
+ res = (const char *) PQgetvalue (result,
+ row,
+ fnum);
+ *j_dst = json_loadb (res,
+ slen,
+ JSON_REJECT_DUPLICATES,
+ &json_error);
+ if (NULL == *j_dst)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Failed to parse JSON result for field `%s': %s (%s)\n",
+ fname,
+ json_error.text,
+ json_error.source);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
-// }
+/**
+ * Function called to clean up memory allocated
+ * by a #GNUNET_PQ_ResultConverter.
+ *
+ * @param cls closure
+ * @param rd result data to clean up
+ */
+static void
+clean_json (void *cls,
+ void *rd)
+{
+ json_t **dst = rd;
+
+ (void) cls;
+ if (NULL != *dst)
+ {
+ json_decref (*dst);
+ *dst = NULL;
+ }
+}
+
+struct GNUNET_PQ_ResultSpec
+TALER_PQ_result_spec_json (const char *name,
+ json_t **jp)
+{
+ struct GNUNET_PQ_ResultSpec res = {
+ .conv = &extract_json,
+ .cleaner = &clean_json,
+ .dst = (void *) jp,
+ .fname = name
+ };
+
+ return res;
+}
/* end of pq_result_helper.c */
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-donau] branch master updated: [db] cleanup,
gnunet <=