finish implementation for #7808
This commit is contained in:
parent
7c0de44a2b
commit
1e88796045
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2017, 2021 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU Affero General Public License as published by the Free Software
|
terms of the GNU Affero General Public License as published by the Free Software
|
||||||
@ -347,9 +347,7 @@ handle_track_transaction_request (
|
|||||||
struct TALER_CoinDepositEventP rep = {
|
struct TALER_CoinDepositEventP rep = {
|
||||||
.header.size = htons (sizeof (rep)),
|
.header.size = htons (sizeof (rep)),
|
||||||
.header.type = htons (TALER_DBEVENT_EXCHANGE_DEPOSIT_STATUS_CHANGED),
|
.header.type = htons (TALER_DBEVENT_EXCHANGE_DEPOSIT_STATUS_CHANGED),
|
||||||
.coin_pub = ctx->coin_pub,
|
.merchant_pub = ctx->merchant
|
||||||
.merchant_pub = ctx->merchant,
|
|
||||||
.h_wire = ctx->h_wire
|
|
||||||
};
|
};
|
||||||
|
|
||||||
ctx->eh = TEH_plugin->event_listen (
|
ctx->eh = TEH_plugin->event_listen (
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "taler_error_codes.h"
|
#include "taler_error_codes.h"
|
||||||
#include "taler_dbevents.h"
|
#include "taler_dbevents.h"
|
||||||
#include "taler_pq_lib.h"
|
#include "taler_pq_lib.h"
|
||||||
|
#include "pg_event_notify.h"
|
||||||
#include "pg_aggregate.h"
|
#include "pg_aggregate.h"
|
||||||
#include "pg_helper.h"
|
#include "pg_helper.h"
|
||||||
|
|
||||||
@ -35,34 +36,12 @@ TEH_PG_aggregate (
|
|||||||
{
|
{
|
||||||
struct PostgresClosure *pg = cls;
|
struct PostgresClosure *pg = cls;
|
||||||
struct GNUNET_TIME_Absolute now = {0};
|
struct GNUNET_TIME_Absolute now = {0};
|
||||||
struct GNUNET_PQ_QueryParam params[] = {
|
|
||||||
GNUNET_PQ_query_param_absolute_time (&now),
|
|
||||||
GNUNET_PQ_query_param_auto_from_type (merchant_pub),
|
|
||||||
GNUNET_PQ_query_param_auto_from_type (h_payto),
|
|
||||||
GNUNET_PQ_query_param_auto_from_type (wtid),
|
|
||||||
GNUNET_PQ_query_param_end
|
|
||||||
};
|
|
||||||
uint64_t sum_deposit_value;
|
uint64_t sum_deposit_value;
|
||||||
uint64_t sum_deposit_frac;
|
uint64_t sum_deposit_frac;
|
||||||
uint64_t sum_refund_value;
|
uint64_t sum_refund_value;
|
||||||
uint64_t sum_refund_frac;
|
uint64_t sum_refund_frac;
|
||||||
uint64_t sum_fee_value;
|
uint64_t sum_fee_value;
|
||||||
uint64_t sum_fee_frac;
|
uint64_t sum_fee_frac;
|
||||||
struct GNUNET_PQ_ResultSpec rs[] = {
|
|
||||||
GNUNET_PQ_result_spec_uint64 ("sum_deposit_value",
|
|
||||||
&sum_deposit_value),
|
|
||||||
GNUNET_PQ_result_spec_uint64 ("sum_deposit_fraction",
|
|
||||||
&sum_deposit_frac),
|
|
||||||
GNUNET_PQ_result_spec_uint64 ("sum_refund_value",
|
|
||||||
&sum_refund_value),
|
|
||||||
GNUNET_PQ_result_spec_uint64 ("sum_refund_fraction",
|
|
||||||
&sum_refund_frac),
|
|
||||||
GNUNET_PQ_result_spec_uint64 ("sum_fee_value",
|
|
||||||
&sum_fee_value),
|
|
||||||
GNUNET_PQ_result_spec_uint64 ("sum_fee_fraction",
|
|
||||||
&sum_fee_frac),
|
|
||||||
GNUNET_PQ_result_spec_end
|
|
||||||
};
|
|
||||||
enum GNUNET_DB_QueryStatus qs;
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
struct TALER_Amount sum_deposit;
|
struct TALER_Amount sum_deposit;
|
||||||
struct TALER_Amount sum_refund;
|
struct TALER_Amount sum_refund;
|
||||||
@ -71,8 +50,6 @@ TEH_PG_aggregate (
|
|||||||
|
|
||||||
now = GNUNET_TIME_absolute_round_down (GNUNET_TIME_absolute_get (),
|
now = GNUNET_TIME_absolute_round_down (GNUNET_TIME_absolute_get (),
|
||||||
pg->aggregator_shift);
|
pg->aggregator_shift);
|
||||||
|
|
||||||
/* Used in #postgres_aggregate() */
|
|
||||||
PREPARE (pg,
|
PREPARE (pg,
|
||||||
"aggregate",
|
"aggregate",
|
||||||
"WITH dep AS (" /* restrict to our merchant and account and mark as done */
|
"WITH dep AS (" /* restrict to our merchant and account and mark as done */
|
||||||
@ -148,11 +125,35 @@ TEH_PG_aggregate (
|
|||||||
" FULL OUTER JOIN ref ON (FALSE)" /* We just want all sums */
|
" FULL OUTER JOIN ref ON (FALSE)" /* We just want all sums */
|
||||||
" FULL OUTER JOIN fees ON (FALSE);");
|
" FULL OUTER JOIN fees ON (FALSE);");
|
||||||
|
|
||||||
|
{
|
||||||
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_absolute_time (&now),
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (merchant_pub),
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (h_payto),
|
||||||
|
GNUNET_PQ_query_param_auto_from_type (wtid),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
|
GNUNET_PQ_result_spec_uint64 ("sum_deposit_value",
|
||||||
|
&sum_deposit_value),
|
||||||
|
GNUNET_PQ_result_spec_uint64 ("sum_deposit_fraction",
|
||||||
|
&sum_deposit_frac),
|
||||||
|
GNUNET_PQ_result_spec_uint64 ("sum_refund_value",
|
||||||
|
&sum_refund_value),
|
||||||
|
GNUNET_PQ_result_spec_uint64 ("sum_refund_fraction",
|
||||||
|
&sum_refund_frac),
|
||||||
|
GNUNET_PQ_result_spec_uint64 ("sum_fee_value",
|
||||||
|
&sum_fee_value),
|
||||||
|
GNUNET_PQ_result_spec_uint64 ("sum_fee_fraction",
|
||||||
|
&sum_fee_frac),
|
||||||
|
GNUNET_PQ_result_spec_end
|
||||||
|
};
|
||||||
|
|
||||||
qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
|
||||||
"aggregate",
|
"aggregate",
|
||||||
params,
|
params,
|
||||||
rs);
|
rs);
|
||||||
|
}
|
||||||
if (qs < 0)
|
if (qs < 0)
|
||||||
{
|
{
|
||||||
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
|
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
|
||||||
@ -165,6 +166,18 @@ TEH_PG_aggregate (
|
|||||||
total));
|
total));
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
struct TALER_CoinDepositEventP rep = {
|
||||||
|
.header.size = htons (sizeof (rep)),
|
||||||
|
.header.type = htons (TALER_DBEVENT_EXCHANGE_DEPOSIT_STATUS_CHANGED),
|
||||||
|
.merchant_pub = *merchant_pub
|
||||||
|
};
|
||||||
|
|
||||||
|
TEH_PG_event_notify (pg,
|
||||||
|
&rep.header,
|
||||||
|
NULL,
|
||||||
|
0);
|
||||||
|
}
|
||||||
GNUNET_assert (GNUNET_OK ==
|
GNUNET_assert (GNUNET_OK ==
|
||||||
TALER_amount_set_zero (pg->currency,
|
TALER_amount_set_zero (pg->currency,
|
||||||
&sum_deposit));
|
&sum_deposit));
|
||||||
|
@ -3546,6 +3546,7 @@ typedef void
|
|||||||
* @param h_wire hash of merchant's wire transfer details
|
* @param h_wire hash of merchant's wire transfer details
|
||||||
* @param h_contract_terms hash of the proposal data
|
* @param h_contract_terms hash of the proposal data
|
||||||
* @param coin_pub public key of the coin
|
* @param coin_pub public key of the coin
|
||||||
|
* @param timeout timeout to use for long-polling, 0 for no long polling
|
||||||
* @param cb function to call with the result
|
* @param cb function to call with the result
|
||||||
* @param cb_cls closure for @a cb
|
* @param cb_cls closure for @a cb
|
||||||
* @return handle to abort request
|
* @return handle to abort request
|
||||||
@ -3557,6 +3558,7 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
const struct TALER_MerchantWireHashP *h_wire,
|
const struct TALER_MerchantWireHashP *h_wire,
|
||||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
|
struct GNUNET_TIME_Relative timeout,
|
||||||
TALER_EXCHANGE_DepositGetCallback cb,
|
TALER_EXCHANGE_DepositGetCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
@ -160,20 +160,10 @@ struct TALER_CoinDepositEventP
|
|||||||
struct GNUNET_DB_EventHeaderP header;
|
struct GNUNET_DB_EventHeaderP header;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The coin's public key.
|
* Public key of the merchant.
|
||||||
*/
|
|
||||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The Merchant's public key.
|
|
||||||
*/
|
*/
|
||||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||||
|
|
||||||
/**
|
|
||||||
* Hash over the wiring information of the merchant.
|
|
||||||
*/
|
|
||||||
struct TALER_MerchantWireHashP h_wire;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2021 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
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
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -260,6 +260,7 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
const struct TALER_MerchantWireHashP *h_wire,
|
const struct TALER_MerchantWireHashP *h_wire,
|
||||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
|
struct GNUNET_TIME_Relative timeout,
|
||||||
TALER_EXCHANGE_DepositGetCallback cb,
|
TALER_EXCHANGE_DepositGetCallback cb,
|
||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
@ -293,6 +294,7 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
char msig_str[sizeof (struct TALER_MerchantSignatureP) * 2];
|
char msig_str[sizeof (struct TALER_MerchantSignatureP) * 2];
|
||||||
char chash_str[sizeof (struct TALER_PrivateContractHashP) * 2];
|
char chash_str[sizeof (struct TALER_PrivateContractHashP) * 2];
|
||||||
char whash_str[sizeof (struct TALER_MerchantWireHashP) * 2];
|
char whash_str[sizeof (struct TALER_MerchantWireHashP) * 2];
|
||||||
|
char timeout_str[24];
|
||||||
char *end;
|
char *end;
|
||||||
|
|
||||||
end = GNUNET_STRINGS_data_to_string (h_wire,
|
end = GNUNET_STRINGS_data_to_string (h_wire,
|
||||||
@ -320,15 +322,33 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
msig_str,
|
msig_str,
|
||||||
sizeof (msig_str));
|
sizeof (msig_str));
|
||||||
*end = '\0';
|
*end = '\0';
|
||||||
|
if (GNUNET_TIME_relative_is_zero (timeout))
|
||||||
|
{
|
||||||
|
timeout_str[0] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GNUNET_snprintf (
|
||||||
|
timeout_str,
|
||||||
|
sizeof (timeout_str),
|
||||||
|
"%llu",
|
||||||
|
(unsigned long long) (
|
||||||
|
timeout.rel_value_us
|
||||||
|
/ GNUNET_TIME_UNIT_MILLISECONDS.rel_value_us));
|
||||||
|
}
|
||||||
|
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/deposits/%s/%s/%s/%s?merchant_sig=%s",
|
"/deposits/%s/%s/%s/%s?merchant_sig=%s%s%s",
|
||||||
whash_str,
|
whash_str,
|
||||||
mpub_str,
|
mpub_str,
|
||||||
chash_str,
|
chash_str,
|
||||||
cpub_str,
|
cpub_str,
|
||||||
msig_str);
|
msig_str,
|
||||||
|
GNUNET_TIME_relative_is_zero (timeout)
|
||||||
|
? ""
|
||||||
|
: "&timeout_ms=",
|
||||||
|
timeout_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
dwh = GNUNET_new (struct TALER_EXCHANGE_DepositGetHandle);
|
dwh = GNUNET_new (struct TALER_EXCHANGE_DepositGetHandle);
|
||||||
|
@ -281,6 +281,7 @@ track_transaction_run (void *cls,
|
|||||||
&h_wire_details,
|
&h_wire_details,
|
||||||
&h_contract_terms,
|
&h_contract_terms,
|
||||||
&coin_pub,
|
&coin_pub,
|
||||||
|
GNUNET_TIME_UNIT_ZERO,
|
||||||
&deposit_wtid_cb,
|
&deposit_wtid_cb,
|
||||||
tts);
|
tts);
|
||||||
GNUNET_assert (NULL != tts->tth);
|
GNUNET_assert (NULL != tts->tth);
|
||||||
|
Loading…
Reference in New Issue
Block a user