aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/exchange/taler-exchange-aggregator.c81
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c39
-rw-r--r--src/include/taler_exchangedb_plugin.h11
3 files changed, 58 insertions, 73 deletions
diff --git a/src/exchange/taler-exchange-aggregator.c b/src/exchange/taler-exchange-aggregator.c
index 97d85c812..69c8dc5b7 100644
--- a/src/exchange/taler-exchange-aggregator.c
+++ b/src/exchange/taler-exchange-aggregator.c
@@ -58,11 +58,6 @@ struct AggregationUnit
struct TALER_Amount wire_fee;
/**
- * Hash of @e wire.
- */
- struct TALER_MerchantWireHash h_wire;
-
- /**
* Wire transfer identifier we use.
*/
struct TALER_WireTransferIdentifierRawP wtid;
@@ -81,7 +76,12 @@ struct AggregationUnit
/**
* Wire details of the merchant.
*/
- json_t *wire;
+ char *payto_uri;
+
+ /**
+ * Selected wire target for the aggregation.
+ */
+ uint64_t wire_target;
/**
* Exchange wire account to be used for the preparation and
@@ -216,8 +216,7 @@ static void
cleanup_au (struct AggregationUnit *au)
{
GNUNET_assert (NULL != au);
- if (NULL != au->wire)
- json_decref (au->wire);
+ GNUNET_free (au->payto_uri);
memset (au,
0,
sizeof (*au));
@@ -353,7 +352,8 @@ refund_by_coin_cb (void *cls,
* @param amount_with_fee amount that was deposited including fee
* @param deposit_fee amount the exchange gets to keep as transaction fees
* @param h_contract_terms hash of the proposal data known to merchant and customer
- * @param wire target account for the wire transfer
+ * @param wire_target target account for the wire transfer
+ * @param payto_uri URI of the target account
* @return transaction status code, #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT to continue to iterate
*/
static enum GNUNET_DB_QueryStatus
@@ -364,7 +364,8 @@ deposit_cb (void *cls,
const struct TALER_Amount *amount_with_fee,
const struct TALER_Amount *deposit_fee,
const struct TALER_PrivateContractHash *h_contract_terms,
- const json_t *wire)
+ uint64_t wire_target,
+ const char *payto_uri)
{
struct AggregationUnit *au = cls;
enum GNUNET_DB_QueryStatus qs;
@@ -416,21 +417,9 @@ deposit_cb (void *cls,
}
}
- GNUNET_assert (NULL == au->wire);
- if (NULL == (au->wire = json_incref ((json_t *) wire)))
- {
- GNUNET_break (0);
- return GNUNET_DB_STATUS_HARD_ERROR;
- }
- if (GNUNET_OK !=
- TALER_JSON_merchant_wire_signature_hash (wire,
- &au->h_wire))
- {
- GNUNET_break (0);
- json_decref (au->wire);
- au->wire = NULL;
- return GNUNET_DB_STATUS_HARD_ERROR;
- }
+ GNUNET_assert (NULL == au->payto_uri);
+ au->payto_uri = GNUNET_strdup (payto_uri);
+ au->wire_target = wire_target;
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
&au->wtid,
sizeof (au->wtid));
@@ -439,20 +428,13 @@ deposit_cb (void *cls,
TALER_B2S (&au->wtid),
TALER_amount2s (amount_with_fee),
(unsigned long long) row_id);
+ au->wa = TALER_EXCHANGEDB_find_account_by_payto_uri (payto_uri);
+ if (NULL == au->wa)
{
- char *url;
-
- url = TALER_JSON_wire_to_payto (au->wire);
- au->wa = TALER_EXCHANGEDB_find_account_by_payto_uri (url);
- if (NULL == au->wa)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "No exchange account configured for `%s', please fix your setup to continue!\n",
- url);
- GNUNET_free (url);
- return GNUNET_DB_STATUS_HARD_ERROR;
- }
- GNUNET_free (url);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "No exchange account configured for `%s', please fix your setup to continue!\n",
+ payto_uri);
+ return GNUNET_DB_STATUS_HARD_ERROR;
}
/* make sure we have current fees */
@@ -789,7 +771,7 @@ run_aggregation (void *cls)
"Found ready deposit for %s, aggregating\n",
TALER_B2S (&au_active.merchant_pub));
qs = db_plugin->iterate_matching_deposits (db_plugin->cls,
- &au_active.h_wire,
+ au_active.wire_target,
&au_active.merchant_pub,
&aggregate_cb,
&au_active,
@@ -908,19 +890,12 @@ run_aggregation (void *cls)
void *buf;
size_t buf_size;
- {
- char *url;
-
- url = TALER_JSON_wire_to_payto (au_active.wire);
- TALER_BANK_prepare_transfer (url,
- &au_active.final_amount,
- exchange_base_url,
- &au_active.wtid,
- &buf,
- &buf_size);
- GNUNET_free (url);
- }
-
+ TALER_BANK_prepare_transfer (au_active.payto_uri,
+ &au_active.final_amount,
+ exchange_base_url,
+ &au_active.wtid,
+ &buf,
+ &buf_size);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Storing %u bytes of wire prepare data\n",
(unsigned int) buf_size);
@@ -937,7 +912,7 @@ run_aggregation (void *cls)
qs = db_plugin->store_wire_transfer_out (db_plugin->cls,
au_active.execution_time,
&au_active.wtid,
- au_active.wire,
+ au_active.wire_target,
au_active.wa->section_name,
&au_active.final_amount);
cleanup_au (&au_active);
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index f15f92339..34ad57506 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -1023,12 +1023,17 @@ prepare_statements (struct PostgresClosure *pg)
",denom.fee_deposit_val"
",denom.fee_deposit_frac"
",h_contract_terms"
- ",wire"
+ ",payto_uri"
+ ",wire_target_serial_id"
",merchant_pub"
",kc.coin_pub"
" FROM deposits"
- " JOIN known_coins kc USING (known_coin_id)"
- " JOIN denominations denom USING (denominations_serial)"
+ " JOIN wire_targets "
+ " USING (wire_target_serial_id)"
+ " JOIN known_coins kc"
+ " USING (known_coin_id)"
+ " JOIN denominations denom"
+ " USING (denominations_serial)"
" WHERE "
" shard >= $2"
" AND shard <= $3"
@@ -1056,7 +1061,7 @@ prepare_statements (struct PostgresClosure *pg)
" JOIN denominations denom USING (denominations_serial)"
" WHERE"
" merchant_pub=$1 AND"
- " h_wire=$2 AND"
+ " wire_target_serial_id=$2 AND"
" done=FALSE"
" ORDER BY wire_deadline ASC"
" LIMIT "
@@ -1225,7 +1230,7 @@ prepare_statements (struct PostgresClosure *pg)
"INSERT INTO wire_out "
"(execution_date"
",wtid_raw"
- ",wire_target"
+ ",wire_target_serial_id"
",exchange_account_section"
",amount_val"
",amount_frac"
@@ -5109,10 +5114,13 @@ postgres_get_ready_deposit (void *cls,
struct TALER_MerchantPublicKeyP merchant_pub;
struct TALER_CoinSpendPublicKeyP coin_pub;
uint64_t serial_id;
- json_t *wire;
+ uint64_t wire_target;
+ char *payto_uri;
struct GNUNET_PQ_ResultSpec rs[] = {
GNUNET_PQ_result_spec_uint64 ("deposit_serial_id",
&serial_id),
+ GNUNET_PQ_result_spec_uint64 ("wire_target_serial_id",
+ &wire_target),
TALER_PQ_RESULT_SPEC_AMOUNT ("amount_with_fee",
&amount_with_fee),
TALER_PQ_RESULT_SPEC_AMOUNT ("fee_deposit",
@@ -5123,8 +5131,8 @@ postgres_get_ready_deposit (void *cls,
&merchant_pub),
GNUNET_PQ_result_spec_auto_from_type ("coin_pub",
&coin_pub),
- TALER_PQ_result_spec_json ("wire",
- &wire),
+ GNUNET_PQ_result_spec_string ("payto_uri",
+ &payto_uri),
GNUNET_PQ_result_spec_end
};
enum GNUNET_DB_QueryStatus qs;
@@ -5151,7 +5159,8 @@ postgres_get_ready_deposit (void *cls,
&amount_with_fee,
&deposit_fee,
&h_contract_terms,
- wire);
+ wire_target,
+ payto_uri);
GNUNET_PQ_cleanup_result (rs);
return qs;
}
@@ -5271,7 +5280,7 @@ match_deposit_cb (void *cls,
* destination. Those deposits must not already be "done".
*
* @param cls the @e cls of this struct with the plugin-specific state
- * @param h_wire destination of the wire transfer
+ * @param wire_target destination of the wire transfer
* @param merchant_pub public key of the merchant
* @param deposit_cb function to call for each deposit
* @param deposit_cb_cls closure for @a deposit_cb
@@ -5282,7 +5291,7 @@ match_deposit_cb (void *cls,
static enum GNUNET_DB_QueryStatus
postgres_iterate_matching_deposits (
void *cls,
- const struct TALER_MerchantWireHash *h_wire,
+ uint64_t wire_target,
const struct TALER_MerchantPublicKeyP *merchant_pub,
TALER_EXCHANGEDB_MatchingDepositIterator deposit_cb,
void *deposit_cb_cls,
@@ -5291,7 +5300,7 @@ postgres_iterate_matching_deposits (
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
GNUNET_PQ_query_param_auto_from_type (merchant_pub),
- GNUNET_PQ_query_param_auto_from_type (h_wire),
+ GNUNET_PQ_query_param_uint64 (&wire_target),
GNUNET_PQ_query_param_end
};
struct MatchingDepositContext mdc = {
@@ -7733,7 +7742,7 @@ postgres_start_deferred_wire_out (void *cls)
* @param cls closure
* @param date time of the wire transfer
* @param wtid subject of the wire transfer
- * @param wire_account details about the receiver account of the wire transfer
+ * @param wire_target identifies the receiver account of the wire transfer
* @param exchange_account_section configuration section of the exchange specifying the
* exchange's bank account being used
* @param amount amount that was transmitted
@@ -7744,7 +7753,7 @@ postgres_store_wire_transfer_out (
void *cls,
struct GNUNET_TIME_Absolute date,
const struct TALER_WireTransferIdentifierRawP *wtid,
- const json_t *wire_account,
+ uint64_t wire_target,
const char *exchange_account_section,
const struct TALER_Amount *amount)
{
@@ -7752,7 +7761,7 @@ postgres_store_wire_transfer_out (
struct GNUNET_PQ_QueryParam params[] = {
TALER_PQ_query_param_absolute_time (&date),
GNUNET_PQ_query_param_auto_from_type (wtid),
- TALER_PQ_query_param_json (wire_account),
+ GNUNET_PQ_query_param_uint64 (&wire_target),
GNUNET_PQ_query_param_string (exchange_account_section),
TALER_PQ_query_param_amount (amount),
GNUNET_PQ_query_param_end
diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h
index 73a18ca6a..4bc873305 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -1478,8 +1478,8 @@ typedef enum GNUNET_DB_QueryStatus
* @param amount_with_fee amount that was deposited including fee
* @param deposit_fee amount the exchange gets to keep as transaction fees
* @param h_contract_terms hash of the proposal data known to merchant and customer
- * @param receiver_wire_account wire details for the merchant, includes
- * 'url' in payto://-format;
+ * @param wire_target unique ID of the receiver account
+ * @param payto_uri how to pay the merchant, URI in payto://-format;
* @return transaction status code, #GNUNET_DB_STATUS_SUCCESS_ONE_RESULT to continue to iterate
*/
typedef enum GNUNET_DB_QueryStatus
@@ -1491,7 +1491,8 @@ typedef enum GNUNET_DB_QueryStatus
const struct TALER_Amount *amount_with_fee,
const struct TALER_Amount *deposit_fee,
const struct TALER_PrivateContractHash *h_contract_terms,
- const json_t *receiver_wire_account);
+ uint64_t wire_target,
+ const char *payto_uri);
/**
@@ -2796,7 +2797,7 @@ struct TALER_EXCHANGEDB_Plugin
enum GNUNET_DB_QueryStatus
(*iterate_matching_deposits)(
void *cls,
- const struct TALER_MerchantWireHash *h_wire,
+ uint64_t wire_target,
const struct TALER_MerchantPublicKeyP *merchant_pub,
TALER_EXCHANGEDB_MatchingDepositIterator deposit_cb,
void *deposit_cb_cls,
@@ -3178,7 +3179,7 @@ struct TALER_EXCHANGEDB_Plugin
void *cls,
struct GNUNET_TIME_Absolute date,
const struct TALER_WireTransferIdentifierRawP *wtid,
- const json_t *wire_account,
+ uint64_t wire_target,
const char *exchange_account_section,
const struct TALER_Amount *amount);