diff options
Diffstat (limited to 'src/exchangedb/exchangedb_transactions.c')
-rw-r--r-- | src/exchangedb/exchangedb_transactions.c | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/exchangedb/exchangedb_transactions.c b/src/exchangedb/exchangedb_transactions.c index aaf28a9ea..f78393776 100644 --- a/src/exchangedb/exchangedb_transactions.c +++ b/src/exchangedb/exchangedb_transactions.c @@ -22,17 +22,7 @@ #include "taler_exchangedb_lib.h" -/** - * Calculate the total value of all transactions performed. - * Stores @a off plus the cost of all transactions in @a tl - * in @a ret. - * - * @param tl transaction list to process - * @param off offset to use as the starting value - * @param[out] ret where the resulting total is to be stored (may alias @a off) - * @return #GNUNET_OK on success, #GNUNET_SYSERR on errors - */ -int +enum GNUNET_GenericReturnValue TALER_EXCHANGEDB_calculate_transaction_list_totals ( struct TALER_EXCHANGEDB_TransactionList *tl, const struct TALER_Amount *off, @@ -129,6 +119,49 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( return GNUNET_SYSERR; } break; + case TALER_EXCHANGEDB_TT_PURSE_DEPOSIT: + /* spent += pos->amount_with_fee */ + if (0 > + TALER_amount_add (&spent, + &spent, + &pos->details.purse_deposit->amount)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + deposit_fee = pos->details.purse_deposit->deposit_fee; + break; + case TALER_EXCHANGEDB_TT_PURSE_REFUND: + /* refunded += pos->refund_amount - pos->refund_fee */ + if (0 > + TALER_amount_add (&refunded, + &refunded, + &pos->details.purse_refund->refund_amount)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + if (0 > + TALER_amount_add (&spent, + &spent, + &pos->details.purse_refund->refund_fee)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + have_refund = true; + break; + case TALER_EXCHANGEDB_TT_RESERVE_OPEN: + /* spent += pos->amount_with_fee */ + if (0 > + TALER_amount_add (&spent, + &spent, + &pos->details.reserve_open->coin_contribution)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + break; } } if (have_refund) |