gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-donau] branch master updated: [db] working on query helper


From: gnunet
Subject: [taler-donau] branch master updated: [db] working on query helper
Date: Mon, 27 Nov 2023 16:05:41 +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 d2682db  [db] working on query helper
d2682db is described below

commit d2682dbcce1678eb9f140a47e2b1d3be3907c661
Author: Casaburi Johannes <johannes.casaburi@students.bfh.ch>
AuthorDate: Mon Nov 27 16:05:19 2023 +0100

    [db] working on query helper
---
 src/pq/pq_query_helper.c | 1254 ++++------------------------------------------
 1 file changed, 98 insertions(+), 1156 deletions(-)

diff --git a/src/pq/pq_query_helper.c b/src/pq/pq_query_helper.c
index d7ecd6b..134f3ec 100644
--- a/src/pq/pq_query_helper.c
+++ b/src/pq/pq_query_helper.c
@@ -16,9 +16,7 @@
 /**
  * @file pq/pq_query_helper.c
  * @brief helper functions for Taler-specific libpq (PostGres) interactions
- * @author Sree Harsha Totakura <sreeharsha@totakura.in>
- * @author Florian Dold
- * @author Christian Grothoff
+ * @author Johannes Casaburi
  */
 #include <gnunet/gnunet_common.h>
 #include <gnunet/gnunet_util_lib.h>
@@ -26,1156 +24,100 @@
 #include <taler/taler_pq_lib.h>
 
 
-// /**
-//  * Function called to convert input amount into SQL parameter as tuple.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument, here a `struct TALER_Amount`
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_amount_currency_tuple (void *cls,
-//                              const void *data,
-//                              size_t data_len,
-//                              void *param_values[],
-//                              int param_lengths[],
-//                              int param_formats[],
-//                              unsigned int param_length,
-//                              void *scratch[],
-//                              unsigned int scratch_length)
-// {
-//   struct GNUNET_PQ_Context *db = cls;
-//   const struct TALER_Amount *amount = data;
-//   size_t sz;
-
-//   GNUNET_assert (NULL != db);
-//   GNUNET_assert (NULL != amount);
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (1 <= scratch_length);
-//   GNUNET_assert (sizeof (struct TALER_Amount) == data_len);
-//   GNUNET_static_assert (sizeof(uint32_t) == sizeof(Oid));
-//   {
-//     char *out;
-//     Oid oid_v;
-//     Oid oid_f;
-//     Oid oid_c;
-//     struct TALER_PQ_AmountCurrencyP d;
-
-//     GNUNET_assert (GNUNET_OK ==
-//                    GNUNET_PQ_get_oid_by_name (db,
-//                                               "int8",
-//                                               &oid_v));
-//     GNUNET_assert (GNUNET_OK ==
-//                    GNUNET_PQ_get_oid_by_name (db,
-//                                               "int4",
-//                                               &oid_f));
-//     GNUNET_assert (GNUNET_OK ==
-//                    GNUNET_PQ_get_oid_by_name (db,
-//                                               "varchar",
-//                                               &oid_c));
-//     sz = TALER_PQ_make_taler_pq_amount_currency_ (amount,
-//                                                   oid_v,
-//                                                   oid_f,
-//                                                   oid_c,
-//                                                   &d);
-//     out = GNUNET_malloc (sz);
-//     memcpy (out,
-//             &d,
-//             sz);
-//     scratch[0] = out;
-//   }
-
-//   param_values[0] = scratch[0];
-//   param_lengths[0] = sz;
-//   param_formats[0] = 1;
-
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_amount_with_currency (
-//   const struct GNUNET_PQ_Context *db,
-//   const struct TALER_Amount *amount)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv_cls = (void *) db,
-//     .conv = &qconv_amount_currency_tuple,
-//     .data = amount,
-//     .size = sizeof (*amount),
-//     .num_params = 1,
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input amount into SQL parameter as tuple.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument, here a `struct TALER_Amount`
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_amount_tuple (void *cls,
-//                     const void *data,
-//                     size_t data_len,
-//                     void *param_values[],
-//                     int param_lengths[],
-//                     int param_formats[],
-//                     unsigned int param_length,
-//                     void *scratch[],
-//                     unsigned int scratch_length)
-// {
-//   struct GNUNET_PQ_Context *db = cls;
-//   const struct TALER_Amount *amount = data;
-//   size_t sz;
-
-//   GNUNET_assert (NULL != db);
-//   GNUNET_assert (NULL != amount);
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (1 <= scratch_length);
-//   GNUNET_assert (sizeof (struct TALER_Amount) == data_len);
-//   GNUNET_static_assert (sizeof(uint32_t) == sizeof(Oid));
-//   {
-//     char *out;
-//     Oid oid_v;
-//     Oid oid_f;
-
-//     GNUNET_assert (GNUNET_OK ==
-//                    GNUNET_PQ_get_oid_by_name (db,
-//                                               "int8",
-//                                               &oid_v));
-//     GNUNET_assert (GNUNET_OK ==
-//                    GNUNET_PQ_get_oid_by_name (db,
-//                                               "int4",
-//                                               &oid_f));
-
-//     {
-//       struct TALER_PQ_AmountP d
-//         = TALER_PQ_make_taler_pq_amount_ (amount,
-//                                           oid_v,
-//                                           oid_f);
-
-//       sz = sizeof(d);
-//       out = GNUNET_malloc (sz);
-//       scratch[0] = out;
-//       GNUNET_memcpy (out,
-//                      &d,
-//                      sizeof(d));
-//     }
-//   }
-
-//   param_values[0] = scratch[0];
-//   param_lengths[0] = sz;
-//   param_formats[0] = 1;
-
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_amount (
-//   const struct GNUNET_PQ_Context *db,
-//   const struct TALER_Amount *amount)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv_cls = (void *) db,
-//     .conv = &qconv_amount_tuple,
-//     .data = amount,
-//     .size = sizeof (*amount),
-//     .num_params = 1,
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_denom_pub (void *cls,
-//                  const void *data,
-//                  size_t data_len,
-//                  void *param_values[],
-//                  int param_lengths[],
-//                  int param_formats[],
-//                  unsigned int param_length,
-//                  void *scratch[],
-//                  unsigned int scratch_length)
-// {
-//   const struct TALER_DenominationPublicKey *denom_pub = data;
-//   size_t tlen;
-//   size_t len;
-//   uint32_t be[2];
-//   char *buf;
-//   void *tbuf;
-
-//   (void) cls;
-//   (void) data_len;
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (scratch_length > 0);
-//   GNUNET_break (NULL == cls);
-//   be[0] = htonl ((uint32_t) denom_pub->cipher);
-//   be[1] = htonl (denom_pub->age_mask.bits);
-//   switch (denom_pub->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     tlen = GNUNET_CRYPTO_rsa_public_key_encode (
-//       denom_pub->details.rsa_public_key,
-//       &tbuf);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     tlen = sizeof (denom_pub->details.cs_public_key);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   len = tlen + sizeof (be);
-//   buf = GNUNET_malloc (len);
-//   GNUNET_memcpy (buf,
-//                  be,
-//                  sizeof (be));
-//   switch (denom_pub->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    tbuf,
-//                    tlen);
-//     GNUNET_free (tbuf);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    &denom_pub->details.cs_public_key,
-//                    tlen);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-
-//   scratch[0] = buf;
-//   param_values[0] = (void *) buf;
-//   param_lengths[0] = len;
-//   param_formats[0] = 1;
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_denom_pub (
-//   const struct TALER_DenominationPublicKey *denom_pub)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = &qconv_denom_pub,
-//     .data = denom_pub,
-//     .num_params = 1
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_denom_sig (void *cls,
-//                  const void *data,
-//                  size_t data_len,
-//                  void *param_values[],
-//                  int param_lengths[],
-//                  int param_formats[],
-//                  unsigned int param_length,
-//                  void *scratch[],
-//                  unsigned int scratch_length)
-// {
-//   const struct TALER_DenominationSignature *denom_sig = data;
-//   size_t tlen;
-//   size_t len;
-//   uint32_t be[2];
-//   char *buf;
-//   void *tbuf;
-
-//   (void) cls;
-//   (void) data_len;
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (scratch_length > 0);
-//   GNUNET_break (NULL == cls);
-//   be[0] = htonl ((uint32_t) denom_sig->cipher);
-//   be[1] = htonl (0x00); /* magic marker: unblinded */
-//   switch (denom_sig->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     tlen = GNUNET_CRYPTO_rsa_signature_encode (
-//       denom_sig->details.rsa_signature,
-//       &tbuf);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     tlen = sizeof (denom_sig->details.cs_signature);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   len = tlen + sizeof (be);
-//   buf = GNUNET_malloc (len);
-//   GNUNET_memcpy (buf,
-//                  &be,
-//                  sizeof (be));
-//   switch (denom_sig->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    tbuf,
-//                    tlen);
-//     GNUNET_free (tbuf);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    &denom_sig->details.cs_signature,
-//                    tlen);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-
-//   scratch[0] = buf;
-//   param_values[0] = (void *) buf;
-//   param_lengths[0] = len;
-//   param_formats[0] = 1;
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_denom_sig (
-//   const struct TALER_DenominationSignature *denom_sig)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = &qconv_denom_sig,
-//     .data = denom_sig,
-//     .num_params = 1
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_blinded_denom_sig (void *cls,
-//                          const void *data,
-//                          size_t data_len,
-//                          void *param_values[],
-//                          int param_lengths[],
-//                          int param_formats[],
-//                          unsigned int param_length,
-//                          void *scratch[],
-//                          unsigned int scratch_length)
-// {
-//   const struct TALER_BlindedDenominationSignature *denom_sig = data;
-//   size_t tlen;
-//   size_t len;
-//   uint32_t be[2];
-//   char *buf;
-//   void *tbuf;
-
-//   (void) cls;
-//   (void) data_len;
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (scratch_length > 0);
-//   GNUNET_break (NULL == cls);
-//   be[0] = htonl ((uint32_t) denom_sig->cipher);
-//   be[1] = htonl (0x01); /* magic marker: blinded */
-//   switch (denom_sig->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     tlen = GNUNET_CRYPTO_rsa_signature_encode (
-//       denom_sig->details.blinded_rsa_signature,
-//       &tbuf);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     tlen = sizeof (denom_sig->details.blinded_cs_answer);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   len = tlen + sizeof (be);
-//   buf = GNUNET_malloc (len);
-//   GNUNET_memcpy (buf,
-//                  &be,
-//                  sizeof (be));
-//   switch (denom_sig->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    tbuf,
-//                    tlen);
-//     GNUNET_free (tbuf);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    &denom_sig->details.blinded_cs_answer,
-//                    tlen);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-
-//   scratch[0] = buf;
-//   param_values[0] = (void *) buf;
-//   param_lengths[0] = len;
-//   param_formats[0] = 1;
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_blinded_denom_sig (
-//   const struct TALER_BlindedDenominationSignature *denom_sig)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = &qconv_blinded_denom_sig,
-//     .data = denom_sig,
-//     .num_params = 1
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_blinded_planchet (void *cls,
-//                         const void *data,
-//                         size_t data_len,
-//                         void *param_values[],
-//                         int param_lengths[],
-//                         int param_formats[],
-//                         unsigned int param_length,
-//                         void *scratch[],
-//                         unsigned int scratch_length)
-// {
-//   const struct TALER_BlindedPlanchet *bp = data;
-//   size_t tlen;
-//   size_t len;
-//   uint32_t be[2];
-//   char *buf;
-
-//   (void) cls;
-//   (void) data_len;
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (scratch_length > 0);
-//   GNUNET_break (NULL == cls);
-//   be[0] = htonl ((uint32_t) bp->cipher);
-//   be[1] = htonl (0x0100); /* magic marker: blinded */
-//   switch (bp->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     tlen = bp->details.rsa_blinded_planchet.blinded_msg_size;
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     tlen = sizeof (bp->details.cs_blinded_planchet);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   len = tlen + sizeof (be);
-//   buf = GNUNET_malloc (len);
-//   GNUNET_memcpy (buf,
-//                  &be,
-//                  sizeof (be));
-//   switch (bp->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    bp->details.rsa_blinded_planchet.blinded_msg,
-//                    tlen);
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    &bp->details.cs_blinded_planchet,
-//                    tlen);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   scratch[0] = buf;
-//   param_values[0] = (void *) buf;
-//   param_lengths[0] = len;
-//   param_formats[0] = 1;
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_blinded_planchet (
-//   const struct TALER_BlindedPlanchet *bp)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = &qconv_blinded_planchet,
-//     .data = bp,
-//     .num_params = 1
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_exchange_withdraw_values (void *cls,
-//                                 const void *data,
-//                                 size_t data_len,
-//                                 void *param_values[],
-//                                 int param_lengths[],
-//                                 int param_formats[],
-//                                 unsigned int param_length,
-//                                 void *scratch[],
-//                                 unsigned int scratch_length)
-// {
-//   const struct TALER_ExchangeWithdrawValues *alg_values = data;
-//   size_t tlen;
-//   size_t len;
-//   uint32_t be[2];
-//   char *buf;
-
-//   (void) cls;
-//   (void) data_len;
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (scratch_length > 0);
-//   GNUNET_break (NULL == cls);
-//   be[0] = htonl ((uint32_t) alg_values->cipher);
-//   be[1] = htonl (0x010000); /* magic marker: EWV */
-//   switch (alg_values->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     tlen = 0;
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     tlen = sizeof (struct TALER_DenominationCSPublicRPairP);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   len = tlen + sizeof (be);
-//   buf = GNUNET_malloc (len);
-//   GNUNET_memcpy (buf,
-//                  &be,
-//                  sizeof (be));
-//   switch (alg_values->cipher)
-//   {
-//   case TALER_DENOMINATION_RSA:
-//     break;
-//   case TALER_DENOMINATION_CS:
-//     GNUNET_memcpy (&buf[sizeof (be)],
-//                    &alg_values->details.cs_values,
-//                    tlen);
-//     break;
-//   default:
-//     GNUNET_assert (0);
-//   }
-//   scratch[0] = buf;
-//   param_values[0] = (void *) buf;
-//   param_lengths[0] = len;
-//   param_formats[0] = 1;
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_exchange_withdraw_values (
-//   const struct TALER_ExchangeWithdrawValues *alg_values)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = &qconv_exchange_withdraw_values,
-//     .data = alg_values,
-//     .num_params = 1
-//   };
-
-//   return res;
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters.
-//  *
-//  * @param cls closure
-//  * @param data pointer to input argument, here a `json_t *`
-//  * @param data_len number of bytes in @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_json (void *cls,
-//             const void *data,
-//             size_t data_len,
-//             void *param_values[],
-//             int param_lengths[],
-//             int param_formats[],
-//             unsigned int param_length,
-//             void *scratch[],
-//             unsigned int scratch_length)
-// {
-//   const json_t *json = data;
-//   char *str;
-
-//   (void) cls;
-//   (void) data_len;
-//   GNUNET_assert (1 == param_length);
-//   GNUNET_assert (scratch_length > 0);
-//   str = json_dumps (json, JSON_COMPACT);
-//   if (NULL == str)
-//     return -1;
-//   scratch[0] = str;
-//   param_values[0] = (void *) str;
-//   param_lengths[0] = strlen (str);
-//   param_formats[0] = 1;
-//   return 1;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_json (const json_t *x)
-// {
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = &qconv_json,
-//     .data = x,
-//     .num_params = 1
-//   };
-
-//   return res;
-// }
-
-
-// /** ------------------- Array support  
-----------------------------------**/
-
-// /**
-//  * Closure for the array type handlers.
-//  *
-//  * May contain sizes information for the data, given (and handled) by the
-//  * caller.
-//  */
-// struct qconv_array_cls
-// {
-//   /**
-//    * If not null, contains the array of sizes (the size of the array is the
-//    * .size field in the ambient GNUNET_PQ_QueryParam struct). We do not free
-//    * this memory.
-//    *
-//    * If not null, this value has precedence over @a sizes, which MUST be 
NULL */
-//   const size_t *sizes;
-
-//   /**
-//    * If @a size and @a c_sizes are NULL, this field defines the same size
-//    * for each element in the array.
-//    */
-//   size_t same_size;
-
-//   /**
-//    * If true, the array parameter to the data pointer to the qconv_array is 
a
-//    * continuous byte array of data, either with @a same_size each or sizes
-//    * provided bytes by @a sizes;
-//    */
-//   bool continuous;
-
-//   /**
-//    * Type of the array elements
-//    */
-//   enum TALER_PQ_ArrayType typ;
-
-//   /**
-//    * Oid of the array elements
-//    */
-//   Oid oid;
-
-//   /**
-//    * db context, needed for OID-lookup of basis-types
-//    */
-//   struct GNUNET_PQ_Context *db;
-// };
-
-// /**
-//  * Callback to cleanup a qconv_array_cls to be used during
-//  * GNUNET_PQ_cleanup_query_params_closures
-//  */
-// static void
-// qconv_array_cls_cleanup (void *cls)
-// {
-//   GNUNET_free (cls);
-// }
-
-
-// /**
-//  * Function called to convert input argument into SQL parameters for arrays
-//  *
-//  * Note: the format for the encoding of arrays for libpq is not very well
-//  * documented.  We peeked into various sources (postgresql and libpqtypes) 
for
-//  * guidance.
-//  *
-//  * @param cls Closure of type struct qconv_array_cls*
-//  * @param data Pointer to first element in the array
-//  * @param data_len Number of _elements_ in array @a data (if applicable)
-//  * @param[out] param_values SQL data to set
-//  * @param[out] param_lengths SQL length data to set
-//  * @param[out] param_formats SQL format data to set
-//  * @param param_length number of entries available in the @a param_values, 
@a param_lengths and @a param_formats arrays
-//  * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
-//  * @param scratch_length number of entries left in @a scratch
-//  * @return -1 on error, number of offsets used in @a scratch otherwise
-//  */
-// static int
-// qconv_array (
-//   void *cls,
-//   const void *data,
-//   size_t data_len,
-//   void *param_values[],
-//   int param_lengths[],
-//   int param_formats[],
-//   unsigned int param_length,
-//   void *scratch[],
-//   unsigned int scratch_length)
-// {
-//   struct qconv_array_cls *meta = cls;
-//   size_t num = data_len;
-//   size_t total_size;
-//   const size_t *sizes;
-//   bool same_sized;
-//   void *elements = NULL;
-//   bool noerror = true;
-//   /* needed to capture the encoded rsa signatures */
-//   void **buffers = NULL;
-//   size_t *buffer_lengths = NULL;
-
-//   (void) (param_length);
-//   (void) (scratch_length);
-
-//   GNUNET_assert (NULL != meta);
-//   GNUNET_assert (num < INT_MAX);
-
-//   sizes = meta->sizes;
-//   same_sized = (0 != meta->same_size);
-
-// #define RETURN_UNLESS(cond) \
-//   do { \
-//     if (! (cond)) \
-//     { \
-//       GNUNET_break ((cond)); \
-//       noerror = false; \
-//       goto DONE; \
-//     } \
-//   } while (0)
-
-//   /* Calculate sizes and check bounds */
-//   {
-//     /* num * length-field */
-//     size_t x = sizeof(uint32_t);
-//     size_t y = x * num;
-//     RETURN_UNLESS ((0 == num) || (y / num == x));
-
-//     /* size of header */
-//     total_size  = x = sizeof(struct GNUNET_PQ_ArrayHeader_P);
-//     total_size += y;
-//     RETURN_UNLESS (total_size >= x);
-
-//     /* sizes of elements */
-//     if (same_sized)
-//     {
-//       x = num * meta->same_size;
-//       RETURN_UNLESS ((0 == num) || (x / num == meta->same_size));
-
-//       y = total_size;
-//       total_size += x;
-//       RETURN_UNLESS (total_size >= y);
-//     }
-//     else  /* sizes are different per element */
-//     {
-//       switch (meta->typ)
-//       {
-//       case TALER_PQ_array_of_blinded_denom_sig:
-//         {
-//           const struct TALER_BlindedDenominationSignature *denom_sigs = 
data;
-//           size_t len;
-
-//           buffers  = GNUNET_new_array (num, void *);
-//           buffer_lengths  = GNUNET_new_array (num, size_t);
-
-//           for (size_t i = 0; i<num; i++)
-//           {
-//             switch (denom_sigs[i].cipher)
-//             {
-//             case TALER_DENOMINATION_RSA:
-//               len = GNUNET_CRYPTO_rsa_signature_encode (
-//                 denom_sigs[i].details.blinded_rsa_signature,
-//                 &buffers[i]);
-//               RETURN_UNLESS (len != 0);
-//               break;
-//             case TALER_DENOMINATION_CS:
-//               len = sizeof (denom_sigs[i].details.blinded_cs_answer);
-//               break;
-//             default:
-//               GNUNET_assert (0);
-//             }
-
-//             /* for the cipher and marker */
-//             len += 2 * sizeof(uint32_t);
-//             buffer_lengths[i] = len;
-
-//             y = total_size;
-//             total_size += len;
-//             RETURN_UNLESS (total_size >= y);
-//           }
-//           sizes = buffer_lengths;
-//           break;
-//         }
-//       default:
-//         GNUNET_assert (0);
-//       }
-//     }
-
-//     RETURN_UNLESS (INT_MAX > total_size);
-//     RETURN_UNLESS (0 != total_size);
-
-//     elements = GNUNET_malloc (total_size);
-//   }
-
-//   /* Write data */
-//   {
-//     char *out = elements;
-//     struct GNUNET_PQ_ArrayHeader_P h = {
-//       .ndim = htonl (1),        /* We only support one-dimensional arrays */
-//       .has_null = htonl (0),    /* We do not support NULL entries in arrays 
*/
-//       .lbound = htonl (1),      /* Default start index value */
-//       .dim = htonl (num),
-//       .oid = htonl (meta->oid),
-//     };
-
-//     /* Write header */
-//     GNUNET_memcpy (out,
-//                    &h,
-//                    sizeof(h));
-//     out += sizeof(h);
-
-//     /* Write elements */
-//     for (size_t i = 0; i < num; i++)
-//     {
-//       size_t sz = same_sized ? meta->same_size : sizes[i];
-
-//       *(uint32_t *) out = htonl (sz);
-//       out += sizeof(uint32_t);
-//       switch (meta->typ)
-//       {
-//       case TALER_PQ_array_of_amount:
-//         {
-//           const struct TALER_Amount *amounts = data;
-//           Oid oid_v;
-//           Oid oid_f;
-
-//           GNUNET_assert (GNUNET_OK ==
-//                          GNUNET_PQ_get_oid_by_name (meta->db,
-//                                                     "int8",
-//                                                     &oid_v));
-//           GNUNET_assert (GNUNET_OK ==
-//                          GNUNET_PQ_get_oid_by_name (meta->db,
-//                                                     "int4",
-//                                                     &oid_f));
-//           {
-//             struct TALER_PQ_AmountP am
-//               = TALER_PQ_make_taler_pq_amount_ (
-//                   &amounts[i],
-//                   oid_v,
-//                   oid_f);
-
-//             GNUNET_memcpy (out,
-//                            &am,
-//                            sizeof(am));
-//           }
-//           break;
-//         }
-//       case TALER_PQ_array_of_blinded_denom_sig:
-//         {
-//           const struct TALER_BlindedDenominationSignature *denom_sigs = 
data;
-//           uint32_t be[2];
-
-//           be[0] = htonl ((uint32_t) denom_sigs[i].cipher);
-//           be[1] = htonl (0x01);     /* magic margker: blinded */
-//           GNUNET_memcpy (out,
-//                          &be,
-//                          sizeof(be));
-//           out += sizeof(be);
-//           sz -= sizeof(be);
-
-//           switch (denom_sigs[i].cipher)
-//           {
-//           case TALER_DENOMINATION_RSA:
-//             /* For RSA, 'same_sized' must have been false */
-//             GNUNET_assert (NULL != buffers);
-//             GNUNET_memcpy (out,
-//                            buffers[i],
-//                            sz);
-//             break;
-//           case TALER_DENOMINATION_CS:
-//             GNUNET_memcpy (out,
-//                            &denom_sigs[i].details.blinded_cs_answer,
-//                            sz);
-//             break;
-//           default:
-//             GNUNET_assert (0);
-//           }
-//           break;
-//         }
-//       case TALER_PQ_array_of_blinded_coin_hash:
-//         {
-//           const struct TALER_BlindedCoinHashP *coin_hs = data;
-
-//           GNUNET_memcpy (out,
-//                          &coin_hs[i],
-//                          sizeof(struct TALER_BlindedCoinHashP));
-
-//           break;
-//         }
-//       case TALER_PQ_array_of_denom_hash:
-//         {
-//           const struct TALER_DenominationHashP *denom_hs = data;
-
-//           GNUNET_memcpy (out,
-//                          &denom_hs[i],
-//                          sizeof(struct TALER_DenominationHashP));
-//           break;
-//         }
-//       default:
-//         {
-//           GNUNET_assert (0);
-//           break;
-//         }
-//       }
-//       out += sz;
-//     }
-//   }
-//   param_values[0] = elements;
-//   param_lengths[0] = total_size;
-//   param_formats[0] = 1;
-//   scratch[0] = elements;
-
-// DONE:
-//   if (NULL != buffers)
-//   {
-//     for (size_t i = 0; i<num; i++)
-//       GNUNET_free (buffers[i]);
-//     GNUNET_free (buffers);
-//   }
-//   GNUNET_free (buffer_lengths);
-//   if (noerror)
-//     return 1;
-//   return -1;
-// }
-
-
-// /**
-//  * Function to generate a typ specific query parameter and corresponding 
closure
-//  *
-//  * @param num Number of elements in @a elements
-//  * @param continuous If true, @a elements is an continuous array of data
-//  * @param elements Array of @a num elements, either continuous or pointers
-//  * @param sizes Array of @a num sizes, one per element, may be NULL
-//  * @param same_size If not 0, all elements in @a elements have this size
-//  * @param typ Supported internal type of each element in @a elements
-//  * @param oid Oid of the type to be used in Postgres
-//  * @param[in,out] db our database handle for looking up OIDs
-//  * @return Query parameter
-//  */
-// static struct GNUNET_PQ_QueryParam
-// query_param_array_generic (
-//   unsigned int num,
-//   bool continuous,
-//   const void *elements,
-//   const size_t *sizes,
-//   size_t same_size,
-//   enum TALER_PQ_ArrayType typ,
-//   Oid oid,
-//   struct GNUNET_PQ_Context *db)
-// {
-//   struct qconv_array_cls *meta = GNUNET_new (struct qconv_array_cls);
-//   meta->typ = typ;
-//   meta->oid = oid;
-//   meta->sizes = sizes;
-//   meta->same_size = same_size;
-//   meta->continuous = continuous;
-//   meta->db = db;
-
-//   struct GNUNET_PQ_QueryParam res = {
-//     .conv = qconv_array,
-//     .conv_cls = meta,
-//     .conv_cls_cleanup = qconv_array_cls_cleanup,
-//     .data = elements,
-//     .size = num,
-//     .num_params = 1,
-//   };
-
-//   return res;
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_array_blinded_denom_sig (
-//   size_t num,
-//   const struct TALER_BlindedDenominationSignature *denom_sigs,
-//   struct GNUNET_PQ_Context *db)
-// {
-//   Oid oid;
-//   GNUNET_assert (GNUNET_OK ==
-//                  GNUNET_PQ_get_oid_by_name (db, "bytea", &oid));
-//   return query_param_array_generic (num,
-//                                     true,
-//                                     denom_sigs,
-//                                     NULL,
-//                                     0,
-//                                     TALER_PQ_array_of_blinded_denom_sig,
-//                                     oid,
-//                                     NULL);
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_array_blinded_coin_hash (
-//   size_t num,
-//   const struct TALER_BlindedCoinHashP *coin_hs,
-//   struct GNUNET_PQ_Context *db)
-// {
-//   Oid oid;
-//   GNUNET_assert (GNUNET_OK ==
-//                  GNUNET_PQ_get_oid_by_name (db, "bytea", &oid));
-//   return query_param_array_generic (num,
-//                                     true,
-//                                     coin_hs,
-//                                     NULL,
-//                                     sizeof(struct TALER_BlindedCoinHashP),
-//                                     TALER_PQ_array_of_blinded_coin_hash,
-//                                     oid,
-//                                     NULL);
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_array_denom_hash (
-//   size_t num,
-//   const struct TALER_DenominationHashP *denom_hs,
-//   struct GNUNET_PQ_Context *db)
-// {
-//   Oid oid;
-//   GNUNET_assert (GNUNET_OK ==
-//                  GNUNET_PQ_get_oid_by_name (db, "bytea", &oid));
-//   return query_param_array_generic (num,
-//                                     true,
-//                                     denom_hs,
-//                                     NULL,
-//                                     sizeof(struct TALER_DenominationHashP),
-//                                     TALER_PQ_array_of_denom_hash,
-//                                     oid,
-//                                     NULL);
-// }
-
-
-// struct GNUNET_PQ_QueryParam
-// TALER_PQ_query_param_array_amount (
-//   size_t num,
-//   const struct TALER_Amount *amounts,
-//   struct GNUNET_PQ_Context *db)
-// {
-//   Oid oid;
-//   GNUNET_assert (GNUNET_OK ==
-//                  GNUNET_PQ_get_oid_by_name (db, "taler_amount", &oid));
-//   return query_param_array_generic (
-//     num,
-//     true,
-//     amounts,
-//     NULL,
-//     sizeof(struct TALER_PQ_AmountP),
-//     TALER_PQ_array_of_amount,
-//     oid,
-//     db);
-// }
-
-
-// /* end of pq/pq_query_helper.c */
+/**
+ * Function called to convert input argument into SQL parameters.
+ *
+ * @param cls closure
+ * @param data pointer to input argument
+ * @param data_len number of bytes in @a data (if applicable)
+ * @param[out] param_values SQL data to set
+ * @param[out] param_lengths SQL length data to set
+ * @param[out] param_formats SQL format data to set
+ * @param param_length number of entries available in the @a param_values, @a 
param_lengths and @a param_formats arrays
+ * @param[out] scratch buffer for dynamic allocations (to be done via 
#GNUNET_malloc()
+ * @param scratch_length number of entries left in @a scratch
+ * @return -1 on error, number of offsets used in @a scratch otherwise
+ */
+static int
+qconv_donation_unit_pub (void *cls,
+                 const void *data,
+                 size_t data_len,
+                 void *param_values[],
+                 int param_lengths[],
+                 int param_formats[],
+                 unsigned int param_length,
+                 void *scratch[],
+                 unsigned int scratch_length)
+{
+  const struct DONAU_DonationUnitPublicKey *donation_unit_pub = data;
+  const struct GNUNET_CRYPTO_BlindSignPublicKey *bsp = 
donation_unit_pub->bsign_pub_key;
+  size_t tlen;
+  size_t len;
+  uint32_t be[2];
+  char *buf;
+  void *tbuf;
+
+  (void) cls;
+  (void) data_len;
+  GNUNET_assert (1 == param_length);
+  GNUNET_assert (scratch_length > 0);
+  GNUNET_break (NULL == cls);
+  be[0] = htonl ((uint32_t) bsp->cipher);
+  be[1] = htonl (donation_unit_pub->age_mask.bits);
+  switch (bsp->cipher)
+  {
+  case GNUNET_CRYPTO_BSA_RSA:
+    tlen = GNUNET_CRYPTO_rsa_public_key_encode (
+      bsp->details.rsa_public_key,
+      &tbuf);
+    break;
+  case GNUNET_CRYPTO_BSA_CS:
+    tlen = sizeof (bsp->details.cs_public_key);
+    break;
+  default:
+    GNUNET_assert (0);
+  }
+  len = tlen + sizeof (be);
+  buf = GNUNET_malloc (len);
+  GNUNET_memcpy (buf,
+                 be,
+                 sizeof (be));
+  switch (bsp->cipher)
+  {
+  case GNUNET_CRYPTO_BSA_RSA:
+    GNUNET_memcpy (&buf[sizeof (be)],
+                   tbuf,
+                   tlen);
+    GNUNET_free (tbuf);
+    break;
+  case GNUNET_CRYPTO_BSA_CS:
+    GNUNET_memcpy (&buf[sizeof (be)],
+                   &bsp->details.cs_public_key,
+                   tlen);
+    break;
+  default:
+    GNUNET_assert (0);
+  }
+
+  scratch[0] = buf;
+  param_values[0] = (void *) buf;
+  param_lengths[0] = len;
+  param_formats[0] = 1;
+  return 1;
+}
+
+
+struct GNUNET_PQ_QueryParam
+TALER_PQ_query_param_donation_unit_pub (
+  const struct DONAU_DonationUnitPublicKey *donation_unit_pub)
+{
+  struct GNUNET_PQ_QueryParam res = {
+    .conv = &qconv_donation_unit_pub,
+    .data = donation_unit_pub,
+    .num_params = 1
+  };
+
+  return res;
+}
+
+/* end of pq/pq_query_helper.c */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]