aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-03-27 13:11:48 +0100
committerChristian Grothoff <christian@grothoff.org>2020-03-27 13:11:48 +0100
commita2bfd9f6b55fc8eeafa21c2856dc71ed1de8969a (patch)
treeb29cdd17bd589f057cbbbb99778a04b6f564663a /src
parent9f5dbcdfa78bbd3f014453dfbd127b910316efc8 (diff)
clean up response generation code
Diffstat (limited to 'src')
-rw-r--r--src/exchange/taler-exchange-httpd_responses.c194
1 files changed, 103 insertions, 91 deletions
diff --git a/src/exchange/taler-exchange-httpd_responses.c b/src/exchange/taler-exchange-httpd_responses.c
index cd03ba767..199b73f1f 100644
--- a/src/exchange/taler-exchange-httpd_responses.c
+++ b/src/exchange/taler-exchange-httpd_responses.c
@@ -59,23 +59,24 @@ TEH_RESPONSE_compile_transaction_history (
{
case TALER_EXCHANGEDB_TT_DEPOSIT:
{
- struct TALER_DepositRequestPS dr;
const struct TALER_EXCHANGEDB_DepositListEntry *deposit =
pos->details.deposit;
+ struct TALER_DepositRequestPS dr = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT),
+ .purpose.size = htonl (sizeof (dr)),
+ .h_contract_terms = deposit->h_contract_terms,
+ .h_wire = deposit->h_wire,
+ .timestamp = GNUNET_TIME_absolute_hton (deposit->timestamp),
+ .refund_deadline = GNUNET_TIME_absolute_hton (
+ deposit->refund_deadline),
+ .merchant = deposit->merchant_pub,
+ .coin_pub = *coin_pub
+ };
- dr.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_DEPOSIT);
- dr.purpose.size = htonl (sizeof (struct TALER_DepositRequestPS));
- dr.h_contract_terms = deposit->h_contract_terms;
- dr.h_wire = deposit->h_wire;
- dr.timestamp = GNUNET_TIME_absolute_hton (deposit->timestamp);
- dr.refund_deadline = GNUNET_TIME_absolute_hton (
- deposit->refund_deadline);
TALER_amount_hton (&dr.amount_with_fee,
&deposit->amount_with_fee);
TALER_amount_hton (&dr.deposit_fee,
&deposit->deposit_fee);
- dr.merchant = deposit->merchant_pub;
- dr.coin_pub = *coin_pub;
#if ENABLE_SANITY_CHECKS
/* internal sanity check before we hand out a bogus sig... */
if (GNUNET_OK !=
@@ -126,19 +127,19 @@ TEH_RESPONSE_compile_transaction_history (
}
case TALER_EXCHANGEDB_TT_MELT:
{
- struct TALER_RefreshMeltCoinAffirmationPS ms;
const struct TALER_EXCHANGEDB_MeltListEntry *melt =
pos->details.melt;
+ struct TALER_RefreshMeltCoinAffirmationPS ms = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_MELT),
+ .purpose.size = htonl (sizeof (ms)),
+ .rc = melt->rc,
+ .coin_pub = *coin_pub
+ };
- ms.purpose.purpose = htonl (TALER_SIGNATURE_WALLET_COIN_MELT);
- ms.purpose.size = htonl (sizeof (struct
- TALER_RefreshMeltCoinAffirmationPS));
- ms.rc = melt->rc;
TALER_amount_hton (&ms.amount_with_fee,
&melt->amount_with_fee);
TALER_amount_hton (&ms.melt_fee,
&melt->melt_fee);
- ms.coin_pub = *coin_pub;
#if ENABLE_SANITY_CHECKS
/* internal sanity check before we hand out a bogus sig... */
if (GNUNET_OK !=
@@ -175,26 +176,18 @@ TEH_RESPONSE_compile_transaction_history (
break;
case TALER_EXCHANGEDB_TT_REFUND:
{
- struct TALER_RefundRequestPS rr;
const struct TALER_EXCHANGEDB_RefundListEntry *refund =
pos->details.refund;
struct TALER_Amount value;
+ struct TALER_RefundRequestPS rr = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_REFUND),
+ .purpose.size = htonl (sizeof (rr)),
+ .h_contract_terms = refund->h_contract_terms,
+ .coin_pub = *coin_pub,
+ .merchant = refund->merchant_pub,
+ .rtransaction_id = GNUNET_htonll (refund->rtransaction_id)
+ };
- if (GNUNET_OK !=
- TALER_amount_subtract (&value,
- &refund->refund_amount,
- &refund->refund_fee))
- {
- GNUNET_break (0);
- json_decref (history);
- return NULL;
- }
- rr.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_REFUND);
- rr.purpose.size = htonl (sizeof (struct TALER_RefundRequestPS));
- rr.h_contract_terms = refund->h_contract_terms;
- rr.coin_pub = *coin_pub;
- rr.merchant = refund->merchant_pub;
- rr.rtransaction_id = GNUNET_htonll (refund->rtransaction_id);
TALER_amount_hton (&rr.refund_amount,
&refund->refund_amount);
TALER_amount_hton (&rr.refund_fee,
@@ -212,6 +205,15 @@ TEH_RESPONSE_compile_transaction_history (
return NULL;
}
#endif
+ if (GNUNET_OK !=
+ TALER_amount_subtract (&value,
+ &refund->refund_amount,
+ &refund->refund_fee))
+ {
+ GNUNET_break (0);
+ json_decref (history);
+ return NULL;
+ }
if (0 !=
json_array_append_new (history,
json_pack (
@@ -244,18 +246,19 @@ TEH_RESPONSE_compile_transaction_history (
{
struct TALER_EXCHANGEDB_RecoupRefreshListEntry *pr =
pos->details.old_coin_recoup;
- struct TALER_RecoupRefreshConfirmationPS pc;
struct TALER_ExchangePublicKeyP epub;
struct TALER_ExchangeSignatureP esig;
+ struct TALER_RecoupRefreshConfirmationPS pc = {
+ .purpose.purpose = htonl (
+ TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH),
+ .purpose.size = htonl (sizeof (pc)),
+ .timestamp = GNUNET_TIME_absolute_hton (pr->timestamp),
+ .coin_pub = *coin_pub,
+ .old_coin_pub = pr->old_coin_pub
+ };
- pc.purpose.purpose = htonl (
- TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH);
- pc.purpose.size = htonl (sizeof (pc));
- pc.timestamp = GNUNET_TIME_absolute_hton (pr->timestamp);
TALER_amount_hton (&pc.recoup_amount,
&pr->value);
- pc.coin_pub = *coin_pub;
- pc.old_coin_pub = pr->old_coin_pub;
if (GNUNET_OK !=
TEH_KS_sign (&pc.purpose,
&epub,
@@ -299,17 +302,18 @@ TEH_RESPONSE_compile_transaction_history (
{
const struct TALER_EXCHANGEDB_RecoupListEntry *recoup =
pos->details.recoup;
- struct TALER_RecoupConfirmationPS pc;
struct TALER_ExchangePublicKeyP epub;
struct TALER_ExchangeSignatureP esig;
+ struct TALER_RecoupConfirmationPS pc = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP),
+ .purpose.size = htonl (sizeof (pc)),
+ .timestamp = GNUNET_TIME_absolute_hton (recoup->timestamp),
+ .coin_pub = *coin_pub,
+ .reserve_pub = recoup->reserve_pub
+ };
- pc.purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP);
- pc.purpose.size = htonl (sizeof (pc));
- pc.timestamp = GNUNET_TIME_absolute_hton (recoup->timestamp);
TALER_amount_hton (&pc.recoup_amount,
&recoup->value);
- pc.coin_pub = *coin_pub;
- pc.reserve_pub = recoup->reserve_pub;
if (GNUNET_OK !=
TEH_KS_sign (&pc.purpose,
&epub,
@@ -348,18 +352,19 @@ TEH_RESPONSE_compile_transaction_history (
{
struct TALER_EXCHANGEDB_RecoupRefreshListEntry *pr =
pos->details.recoup_refresh;
- struct TALER_RecoupRefreshConfirmationPS pc;
struct TALER_ExchangePublicKeyP epub;
struct TALER_ExchangeSignatureP esig;
+ struct TALER_RecoupRefreshConfirmationPS pc = {
+ .purpose.purpose = htonl (
+ TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH),
+ .purpose.size = htonl (sizeof (pc)),
+ .timestamp = GNUNET_TIME_absolute_hton (pr->timestamp),
+ .coin_pub = *coin_pub,
+ .old_coin_pub = pr->old_coin_pub
+ };
- pc.purpose.purpose = htonl (
- TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP_REFRESH);
- pc.purpose.size = htonl (sizeof (pc));
- pc.timestamp = GNUNET_TIME_absolute_hton (pr->timestamp);
TALER_amount_hton (&pc.recoup_amount,
&pr->value);
- pc.coin_pub = *coin_pub;
- pc.old_coin_pub = pr->old_coin_pub;
if (GNUNET_OK !=
TEH_KS_sign (&pc.purpose,
&epub,
@@ -573,7 +578,6 @@ TEH_RESPONSE_compile_reserve_history (
case TALER_EXCHANGEDB_RO_RECOUP_COIN:
{
const struct TALER_EXCHANGEDB_Recoup *recoup;
- struct TALER_RecoupConfirmationPS pc;
struct TALER_ExchangePublicKeyP pub;
struct TALER_ExchangeSignatureP sig;
@@ -592,21 +596,26 @@ TEH_RESPONSE_compile_reserve_history (
json_decref (json_history);
return NULL;
}
- pc.purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP);
- pc.purpose.size = htonl (sizeof (struct TALER_RecoupConfirmationPS));
- pc.timestamp = GNUNET_TIME_absolute_hton (recoup->timestamp);
- TALER_amount_hton (&pc.recoup_amount,
- &recoup->value);
- pc.coin_pub = recoup->coin.coin_pub;
- pc.reserve_pub = recoup->reserve_pub;
- if (GNUNET_OK !=
- TEH_KS_sign (&pc.purpose,
- &pub,
- &sig))
{
- GNUNET_break (0);
- json_decref (json_history);
- return NULL;
+ struct TALER_RecoupConfirmationPS pc = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_CONFIRM_RECOUP),
+ .purpose.size = htonl (sizeof (pc)),
+ .timestamp = GNUNET_TIME_absolute_hton (recoup->timestamp),
+ .coin_pub = recoup->coin.coin_pub,
+ .reserve_pub = recoup->reserve_pub
+ };
+
+ TALER_amount_hton (&pc.recoup_amount,
+ &recoup->value);
+ if (GNUNET_OK !=
+ TEH_KS_sign (&pc.purpose,
+ &pub,
+ &sig))
+ {
+ GNUNET_break (0);
+ json_decref (json_history);
+ return NULL;
+ }
}
if (0 !=
@@ -634,7 +643,6 @@ TEH_RESPONSE_compile_reserve_history (
break;
case TALER_EXCHANGEDB_RO_EXCHANGE_TO_BANK:
{
- struct TALER_ReserveCloseConfirmationPS rcc;
struct TALER_ExchangePublicKeyP pub;
struct TALER_ExchangeSignatureP sig;
struct TALER_Amount value;
@@ -657,30 +665,34 @@ TEH_RESPONSE_compile_reserve_history (
return NULL;
}
}
- rcc.purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED);
- rcc.purpose.size = htonl (sizeof (struct
- TALER_ReserveCloseConfirmationPS));
- rcc.timestamp = GNUNET_TIME_absolute_hton (
- pos->details.closing->execution_date);
- TALER_amount_hton (&rcc.closing_amount,
- &value);
- TALER_amount_hton (&rcc.closing_fee,
- &pos->details.closing->closing_fee);
- rcc.reserve_pub = pos->details.closing->reserve_pub;
- GNUNET_CRYPTO_hash (pos->details.closing->receiver_account_details,
- strlen (
- pos->details.closing->receiver_account_details)
- + 1,
- &rcc.h_wire);
- rcc.wtid = pos->details.closing->wtid;
- if (GNUNET_OK !=
- TEH_KS_sign (&rcc.purpose,
- &pub,
- &sig))
{
- GNUNET_break (0);
- json_decref (json_history);
- return NULL;
+ struct TALER_ReserveCloseConfirmationPS rcc = {
+ .purpose.purpose = htonl (TALER_SIGNATURE_EXCHANGE_RESERVE_CLOSED),
+ .purpose.size = htonl (sizeof (rcc)),
+ .timestamp = GNUNET_TIME_absolute_hton (
+ pos->details.closing->execution_date),
+ .reserve_pub = pos->details.closing->reserve_pub,
+ .wtid = pos->details.closing->wtid
+ };
+
+ TALER_amount_hton (&rcc.closing_amount,
+ &value);
+ TALER_amount_hton (&rcc.closing_fee,
+ &pos->details.closing->closing_fee);
+ GNUNET_CRYPTO_hash (pos->details.closing->receiver_account_details,
+ strlen (
+ pos->details.closing->receiver_account_details)
+ + 1,
+ &rcc.h_wire);
+ if (GNUNET_OK !=
+ TEH_KS_sign (&rcc.purpose,
+ &pub,
+ &sig))
+ {
+ GNUNET_break (0);
+ json_decref (json_history);
+ return NULL;
+ }
}
if (0 !=
json_array_append_new (json_history,