aboutsummaryrefslogtreecommitdiff
path: root/src/pq/pq_helper.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-05-18 18:53:12 +0200
committerChristian Grothoff <christian@grothoff.org>2015-05-18 18:53:12 +0200
commit7b4623706c3a87b444362ca27027d9bfb1aa25ae (patch)
treee546a3407f4465be9110fffeaab3ae38c5f8c3b2 /src/pq/pq_helper.c
parentcb68cc7e5b03a03f335e121def044034978adf17 (diff)
parent17985453c560300dba044617bafdb8f682d29e4c (diff)
Merge branch 'master' of git+ssh://taler.net/var/git/mint
Diffstat (limited to 'src/pq/pq_helper.c')
-rw-r--r--src/pq/pq_helper.c214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/pq/pq_helper.c b/src/pq/pq_helper.c
new file mode 100644
index 000000000..5da1ced41
--- /dev/null
+++ b/src/pq/pq_helper.c
@@ -0,0 +1,214 @@
+/*
+ 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 <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file pq/pq_helper.c
+ * @brief functions to initialize parameter arrays
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include <gnunet/gnunet_util_lib.h>
+#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 */