From fde9dc80f6e6a5fe4c5856b2ed78e6c024528c43 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 31 Jul 2021 21:40:48 +0200 Subject: -more json_pack cleaning --- src/auditor/report-lib.c | 29 -- src/auditor/report-lib.h | 20 - src/auditor/taler-auditor-httpd.c | 14 +- .../taler-auditor-httpd_deposit-confirmation.c | 6 +- src/auditor/taler-auditor-httpd_exchanges.c | 22 +- src/auditor/taler-helper-auditor-aggregation.c | 209 ++++---- src/auditor/taler-helper-auditor-coins.c | 466 +++++++++-------- src/auditor/taler-helper-auditor-deposits.c | 64 +-- src/auditor/taler-helper-auditor-reserves.c | 342 ++++++------- src/auditor/taler-helper-auditor-wire.c | 569 +++++++++++---------- src/include/taler_json_lib.h | 26 + src/json/json_pack.c | 23 + 12 files changed, 902 insertions(+), 888 deletions(-) (limited to 'src') diff --git a/src/auditor/report-lib.c b/src/auditor/report-lib.c index 36baf640e..5f45d7198 100644 --- a/src/auditor/report-lib.c +++ b/src/auditor/report-lib.c @@ -113,35 +113,6 @@ TALER_ARL_do_abort (void) } -/** - * Convert absolute time to human-readable JSON string. - * - * @param at time to convert - * @return human-readable string representing the time - */ -json_t * -TALER_ARL_json_from_time_abs_nbo (struct GNUNET_TIME_AbsoluteNBO at) -{ - return json_string - (GNUNET_STRINGS_absolute_time_to_string - (GNUNET_TIME_absolute_ntoh (at))); -} - - -/** - * Convert absolute time to human-readable JSON string. - * - * @param at time to convert - * @return human-readable string representing the time - */ -json_t * -TALER_ARL_json_from_time_abs (struct GNUNET_TIME_Absolute at) -{ - return json_string - (GNUNET_STRINGS_absolute_time_to_string (at)); -} - - /** * Add @a object to the report @a array. Fail hard if this fails. * diff --git a/src/auditor/report-lib.h b/src/auditor/report-lib.h index 05632f2dc..5df990cf5 100644 --- a/src/auditor/report-lib.h +++ b/src/auditor/report-lib.h @@ -90,26 +90,6 @@ extern char *TALER_ARL_auditor_url; extern struct GNUNET_TIME_Absolute start_time; -/** - * Convert absolute time to human-readable JSON string. - * - * @param at time to convert - * @return human-readable string representing the time - */ -json_t * -TALER_ARL_json_from_time_abs_nbo (struct GNUNET_TIME_AbsoluteNBO at); - - -/** - * Convert absolute time to human-readable JSON string. - * - * @param at time to convert - * @return human-readable string representing the time - */ -json_t * -TALER_ARL_json_from_time_abs (struct GNUNET_TIME_Absolute at); - - /** * Add @a object to the report @a array. Fail hard if this fails. * diff --git a/src/auditor/taler-auditor-httpd.c b/src/auditor/taler-auditor-httpd.c index d68ec7593..1824167fe 100644 --- a/src/auditor/taler-auditor-httpd.c +++ b/src/auditor/taler-auditor-httpd.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014-2020 Taler Systems SA + Copyright (C) 2014-2021 Taler Systems SA 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 @@ -323,11 +323,13 @@ handle_version (struct TAH_RequestHandler *rh, (void) connection_cls; if (NULL == ver) { - ver = json_pack ("{s:s, s:s, s:o}", - "version", AUDITOR_PROTOCOL_VERSION, - "currency", TAH_currency, - "auditor_public_key", GNUNET_JSON_from_data_auto ( - &auditor_pub)); + ver = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("version", + AUDITOR_PROTOCOL_VERSION), + GNUNET_JSON_pack_string ("currency", + TAH_currency), + GNUNET_JSON_pack_data_auto ("auditor_public_key", + &auditor_pub)); } if (NULL == ver) { diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.c b/src/auditor/taler-auditor-httpd_deposit-confirmation.c index 31d7a7195..9632f0cc5 100644 --- a/src/auditor/taler-auditor-httpd_deposit-confirmation.c +++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.c @@ -228,10 +228,10 @@ verify_and_execute_deposit_confirmation ( TALER_EC_GENERIC_DB_STORE_FAILED, "deposit confirmation"); } - return TALER_MHD_reply_json_pack (connection, + return TALER_MHD_REPLY_JSON_PACK (connection, MHD_HTTP_OK, - "{s:s}", - "status", "DEPOSIT_CONFIRMATION_OK"); + GNUNET_JSON_pack_string ("status", + "DEPOSIT_CONFIRMATION_OK")); } diff --git a/src/auditor/taler-auditor-httpd_exchanges.c b/src/auditor/taler-auditor-httpd_exchanges.c index be627ba1c..7b54b6d49 100644 --- a/src/auditor/taler-auditor-httpd_exchanges.c +++ b/src/auditor/taler-auditor-httpd_exchanges.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014-2020 Taler Systems SA + Copyright (C) 2014-2021 Taler Systems SA 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 @@ -45,12 +45,11 @@ add_exchange (void *cls, json_t *list = cls; json_t *obj; - obj = json_pack ("{s:o, s:s}", - "master_pub", - GNUNET_JSON_from_data_auto (master_pub), - "exchange_url", - exchange_url); - GNUNET_break (NULL != obj); + obj = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("master_pub", + master_pub), + GNUNET_JSON_pack_string ("exchange_url", + exchange_url)); GNUNET_break (0 == json_array_append_new (list, obj)); @@ -108,10 +107,11 @@ TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh, TALER_EC_GENERIC_DB_FETCH_FAILED, "exchanges"); } - return TALER_MHD_reply_json_pack (connection, - MHD_HTTP_OK, - "{s:o}", - "exchanges", ja); + return TALER_MHD_REPLY_JSON_PACK ( + connection, + MHD_HTTP_OK, + GNUNET_JSON_pack_array_steal ("exchanges", + ja)); } diff --git a/src/auditor/taler-helper-auditor-aggregation.c b/src/auditor/taler-helper-auditor-aggregation.c index cdcbd37d1..4990ae405 100644 --- a/src/auditor/taler-helper-auditor-aggregation.c +++ b/src/auditor/taler-helper-auditor-aggregation.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2016-2020 Taler Systems SA + Copyright (C) 2016-2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero Public License as published by the Free Software @@ -163,12 +163,17 @@ report_amount_arithmetic_inconsistency ( exchange); } TALER_ARL_report (report_amount_arithmetic_inconsistencies, - json_pack ("{s:s, s:I, s:o, s:o, s:I}", - "operation", operation, - "rowid", (json_int_t) rowid, - "exchange", TALER_JSON_from_amount (exchange), - "auditor", TALER_JSON_from_amount (auditor), - "profitable", (json_int_t) profitable)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_uint64 ("rowid", + rowid), + TALER_JSON_pack_amount ("exchange", + exchange), + TALER_JSON_pack_amount ("auditor", + auditor), + GNUNET_JSON_pack_int64 ("profitable", + profitable))); if (0 != profitable) { target = (1 == profitable) @@ -222,13 +227,17 @@ report_coin_arithmetic_inconsistency ( exchange); } TALER_ARL_report (report_coin_inconsistencies, - json_pack ("{s:s, s:o, s:o, s:o, s:I}", - "operation", operation, - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub), - "exchange", TALER_JSON_from_amount (exchange), - "auditor", TALER_JSON_from_amount (auditor), - "profitable", (json_int_t) profitable)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub), + TALER_JSON_pack_amount ("exchange", + exchange), + TALER_JSON_pack_amount ("auditor", + auditor), + GNUNET_JSON_pack_int64 ("profitable", + profitable))); if (0 != profitable) { target = (1 == profitable) @@ -254,10 +263,13 @@ report_row_inconsistency (const char *table, const char *diagnostic) { TALER_ARL_report (report_row_inconsistencies, - json_pack ("{s:s, s:I, s:s}", - "table", table, - "row", (json_int_t) rowid, - "diagnostic", diagnostic)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + table), + GNUNET_JSON_pack_uint64 ("row", + rowid), + GNUNET_JSON_pack_string ("diagnostic", + diagnostic))); } @@ -797,12 +809,15 @@ wire_transfer_information_cb ( denom_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "wire", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount (coin_value), - "coin_pub", GNUNET_JSON_from_data_auto ( - &coin.coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "wire"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + coin_value), + GNUNET_JSON_pack_data_auto ("coin_pub", + &coin.coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, coin_value); @@ -985,23 +1000,25 @@ get_wire_fee (struct AggregationContext *ac, (wfi->prev->end_date.abs_value_us > wfi->start_date.abs_value_us) ) { TALER_ARL_report (report_fee_time_inconsistencies, - json_pack ("{s:s, s:s, s:o}", - "type", method, - "diagnostic", - "start date before previous end date", - "time", TALER_ARL_json_from_time_abs ( - wfi->start_date))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("type", + method), + GNUNET_JSON_pack_string ("diagnostic", + "start date before previous end date"), + TALER_JSON_pack_time_abs_human ("time", + wfi->start_date))); } if ( (NULL != wfi->next) && (wfi->next->start_date.abs_value_us >= wfi->end_date.abs_value_us) ) { TALER_ARL_report (report_fee_time_inconsistencies, - json_pack ("{s:s, s:s, s:o}", - "type", method, - "diagnostic", - "end date date after next start date", - "time", TALER_ARL_json_from_time_abs ( - wfi->end_date))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("type", + method), + GNUNET_JSON_pack_string ("diagnostic", + "end date date after next start date"), + TALER_JSON_pack_time_abs_human ("time", + wfi->end_date))); } return &wfi->wire_fee; } @@ -1164,13 +1181,15 @@ check_wire_out_cb (void *cls, } TALER_ARL_report (report_wire_out_inconsistencies, - json_pack ("{s:O, s:I, s:o, s:o}", - "destination_account", wire, - "rowid", (json_int_t) rowid, - "expected", - TALER_JSON_from_amount (&final_amount), - "claimed", - TALER_JSON_from_amount (amount))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_object_incref ("destination_account", + (json_t *) wire), + GNUNET_JSON_pack_uint64 ("rowid", + rowid), + TALER_JSON_pack_amount ("expected", + &final_amount), + TALER_JSON_pack_amount ("claimed", + amount))); if (TALER_ARL_do_abort ()) return GNUNET_SYSERR; return GNUNET_OK; @@ -1323,8 +1342,6 @@ run (void *cls, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { - json_t *report; - (void) cls; (void) args; (void) cfgfile; @@ -1333,7 +1350,7 @@ run (void *cls, if (GNUNET_OK != TALER_ARL_init (c)) { - global_ret = 1; + global_ret = EXIT_FAILURE; return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, @@ -1387,71 +1404,71 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Audit failed\n"); TALER_ARL_done (NULL); - global_ret = 1; + global_ret = EXIT_FAILURE; return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Audit complete\n"); - report = json_pack ("{s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:I, s:I," - " s:o, s:o, s:o }", - /* blocks #1 */ + TALER_ARL_done (GNUNET_JSON_PACK ( + /* blocks #1 */ + GNUNET_JSON_pack_array_steal ( "wire_out_inconsistencies", - report_wire_out_inconsistencies, - /* Tested in test-auditor.sh #23 */ + report_wire_out_inconsistencies), + /* Tested in test-auditor.sh #23 */ + TALER_JSON_pack_amount ( "total_wire_out_delta_plus", - TALER_JSON_from_amount ( - &total_wire_out_delta_plus), - /* Tested in test-auditor.sh #23 */ + &total_wire_out_delta_plus), + /* Tested in test-auditor.sh #23 */ + TALER_JSON_pack_amount ( "total_wire_out_delta_minus", - TALER_JSON_from_amount ( - &total_wire_out_delta_minus), - /* Tested in test-auditor.sh #28/32 */ - "bad_sig_losses", - report_bad_sig_losses, - /* Tested in test-auditor.sh #28/32 */ - "total_bad_sig_loss", - TALER_JSON_from_amount (&total_bad_sig_loss), - /* block #2 */ - /* Tested in test-auditor.sh #15 */ + &total_wire_out_delta_minus), + /* Tested in test-auditor.sh #28/32 */ + GNUNET_JSON_pack_array_steal ("bad_sig_losses", + report_bad_sig_losses), + /* Tested in test-auditor.sh #28/32 */ + TALER_JSON_pack_amount ("total_bad_sig_loss", + &total_bad_sig_loss), + /* block #2 */ + /* Tested in test-auditor.sh #15 */ + GNUNET_JSON_pack_array_steal ( "row_inconsistencies", - report_row_inconsistencies, + report_row_inconsistencies), + GNUNET_JSON_pack_array_steal ( "coin_inconsistencies", - report_coin_inconsistencies, - "total_coin_delta_plus", - TALER_JSON_from_amount (&total_coin_delta_plus), - "total_coin_delta_minus", - TALER_JSON_from_amount ( - &total_coin_delta_minus), + report_coin_inconsistencies), + TALER_JSON_pack_amount ("total_coin_delta_plus", + &total_coin_delta_plus), + TALER_JSON_pack_amount ("total_coin_delta_minus", + &total_coin_delta_minus), + GNUNET_JSON_pack_array_steal ( "amount_arithmetic_inconsistencies", - report_amount_arithmetic_inconsistencies, - /* block #3 */ + report_amount_arithmetic_inconsistencies), + /* block #3 */ + TALER_JSON_pack_amount ( "total_arithmetic_delta_plus", - TALER_JSON_from_amount ( - &total_arithmetic_delta_plus), + &total_arithmetic_delta_plus), + TALER_JSON_pack_amount ( "total_arithmetic_delta_minus", - TALER_JSON_from_amount ( - &total_arithmetic_delta_minus), + &total_arithmetic_delta_minus), + TALER_JSON_pack_amount ( "total_aggregation_fee_income", - TALER_JSON_from_amount ( - &total_aggregation_fee_income), + &total_aggregation_fee_income), + GNUNET_JSON_pack_uint64 ( "start_ppa_wire_out_serial_id", - (json_int_t) ppa_start.last_wire_out_serial_id, + ppa_start.last_wire_out_serial_id), + GNUNET_JSON_pack_uint64 ( "end_ppa_wire_out_serial_id", - (json_int_t) ppa.last_wire_out_serial_id, - /* block #4 */ + ppa.last_wire_out_serial_id), + /* block #4 */ + TALER_JSON_pack_time_abs_human ( "auditor_start_time", - TALER_ARL_json_from_time_abs ( - start_time), + start_time), + TALER_JSON_pack_time_abs_human ( "auditor_end_time", - TALER_ARL_json_from_time_abs ( - GNUNET_TIME_absolute_get ()), + GNUNET_TIME_absolute_get ()), + GNUNET_JSON_pack_array_steal ( "wire_fee_time_inconsistencies", - report_fee_time_inconsistencies - ); - GNUNET_break (NULL != report); - TALER_ARL_done (report); + report_fee_time_inconsistencies))); } @@ -1489,7 +1506,7 @@ main (int argc, if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) - return 4; + return EXIT_INVALIDARGUMENT; ret = GNUNET_PROGRAM_run ( argc, argv, @@ -1500,9 +1517,9 @@ main (int argc, NULL); GNUNET_free_nz ((void *) argv); if (GNUNET_SYSERR == ret) - return 3; + return EXIT_INVALIDARGUMENT; if (GNUNET_NO == ret) - return 0; + return EXIT_SUCCESS; return global_ret; } diff --git a/src/auditor/taler-helper-auditor-coins.c b/src/auditor/taler-helper-auditor-coins.c index 58c06bed0..40b68c4ad 100644 --- a/src/auditor/taler-helper-auditor-coins.c +++ b/src/auditor/taler-helper-auditor-coins.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2016-2020 Taler Systems SA + Copyright (C) 2016-2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero Public License as published by the Free Software @@ -285,21 +285,19 @@ report_emergency_by_amount ( GNUNET_h2s (&issue->denom_hash), TALER_amount2s (loss)); TALER_ARL_report (report_emergencies, - json_pack ("{s:o, s:o, s:o, s:o, s:o, s:o}", - "denompub_hash", - GNUNET_JSON_from_data_auto (&issue->denom_hash), - "denom_risk", - TALER_JSON_from_amount (risk), - "denom_loss", - TALER_JSON_from_amount (loss), - "start", - TALER_ARL_json_from_time_abs_nbo ( - issue->start), - "deposit_end", - TALER_ARL_json_from_time_abs_nbo ( - issue->expire_deposit), - "value", - TALER_JSON_from_amount_nbo (&issue->value))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("denompub_hash", + &issue->denom_hash), + TALER_JSON_pack_amount ("denom_risk", + risk), + TALER_JSON_pack_amount ("denom_loss", + loss), + TALER_JSON_pack_time_abs_nbo_human ("start", + issue->start), + TALER_JSON_pack_time_abs_nbo_human ("deposit_end", + issue->expire_deposit), + TALER_JSON_pack_amount_nbo ("value", + &issue->value))); TALER_ARL_amount_add (&reported_emergency_risk_by_amount, &reported_emergency_risk_by_amount, risk); @@ -333,23 +331,21 @@ report_emergency_by_count ( struct TALER_Amount denom_value; TALER_ARL_report (report_emergencies_by_count, - json_pack ("{s:o, s:I, s:I, s:o, s:o, s:o, s:o}", - "denompub_hash", - GNUNET_JSON_from_data_auto (&issue->denom_hash), - "num_issued", - (json_int_t) num_issued, - "num_known", - (json_int_t) num_known, - "denom_risk", - TALER_JSON_from_amount (risk), - "start", - TALER_ARL_json_from_time_abs_nbo ( - issue->start), - "deposit_end", - TALER_ARL_json_from_time_abs_nbo ( - issue->expire_deposit), - "value", - TALER_JSON_from_amount_nbo (&issue->value))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("denompub_hash", + &issue->denom_hash), + GNUNET_JSON_pack_uint64 ("num_issued", + num_issued), + GNUNET_JSON_pack_uint64 ("num_known", + num_known), + TALER_JSON_pack_amount ("denom_risk", + risk), + TALER_JSON_pack_time_abs_nbo_human ("start", + issue->start), + TALER_JSON_pack_time_abs_nbo_human ("deposit_end", + issue->expire_deposit), + TALER_JSON_pack_amount_nbo ("value", + &issue->value))); TALER_ARL_amount_add (&reported_emergency_risk_by_count, &reported_emergency_risk_by_count, risk); @@ -406,12 +402,17 @@ report_amount_arithmetic_inconsistency ( exchange); } TALER_ARL_report (report_amount_arithmetic_inconsistencies, - json_pack ("{s:s, s:I, s:o, s:o, s:I}", - "operation", operation, - "rowid", (json_int_t) rowid, - "exchange", TALER_JSON_from_amount (exchange), - "auditor", TALER_JSON_from_amount (auditor), - "profitable", (json_int_t) profitable)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_uint64 ("rowid", + rowid), + TALER_JSON_pack_amount ("exchange", + exchange), + TALER_JSON_pack_amount ("auditor", + auditor), + GNUNET_JSON_pack_int64 ("profitable", + profitable))); if (0 != profitable) { target = (1 == profitable) @@ -437,10 +438,13 @@ report_row_inconsistency (const char *table, const char *diagnostic) { TALER_ARL_report (report_row_inconsistencies, - json_pack ("{s:s, s:I, s:s}", - "table", table, - "row", (json_int_t) rowid, - "diagnostic", diagnostic)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + table), + GNUNET_JSON_pack_uint64 ("row", + rowid), + GNUNET_JSON_pack_string ("diagnostic", + diagnostic))); } @@ -1196,13 +1200,15 @@ check_known_coin (const char *operation, denom_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", operation, - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount ( - loss_potential), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + loss_potential), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, loss_potential); @@ -1302,13 +1308,15 @@ refresh_session_cb (void *cls, &coin_pub->eddsa_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "melt", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount ( - amount_with_fee), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "melt"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount_with_fee), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount_with_fee); @@ -1345,12 +1353,13 @@ refresh_session_cb (void *cls, with invalid data, even if the exchange is correctly operating. We still report it. */ TALER_ARL_report (report_refreshs_hanging, - json_pack ("{s:I, s:o, s:o}", - "row", (json_int_t) rowid, - "amount", TALER_JSON_from_amount ( - amount_with_fee), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("amount", + amount_with_fee), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub))); TALER_ARL_amount_add (&total_refresh_hanging, &total_refresh_hanging, amount_with_fee); @@ -1653,13 +1662,15 @@ deposit_cb (void *cls, &dr.h_wire)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "deposit", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount ( - amount_with_fee), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "deposit"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount_with_fee), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount_with_fee); @@ -1679,13 +1690,15 @@ deposit_cb (void *cls, &coin_pub->eddsa_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "deposit", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount ( - amount_with_fee), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "deposit"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount_with_fee), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount_with_fee); @@ -1850,13 +1863,15 @@ refund_cb (void *cls, &merchant_pub->eddsa_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "refund", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount ( - amount_with_fee), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "refund"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount_with_fee), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount_with_fee); @@ -1961,12 +1976,15 @@ check_recoup (struct CoinContext *cc, denom_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", operation, - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount (amount), - "coin_pub", GNUNET_JSON_from_data_auto ( - &coin->denom_pub_hash))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount), + GNUNET_JSON_pack_data_auto ("coin_pub", + &coin->denom_pub_hash))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount); @@ -2018,12 +2036,15 @@ check_recoup (struct CoinContext *cc, &coin->coin_pub.eddsa_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", operation, - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount (amount), - "coin_pub", GNUNET_JSON_from_data_auto ( - &coin->coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount), + GNUNET_JSON_pack_data_auto ("coin_pub", + &coin->coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount); @@ -2047,15 +2068,17 @@ check_recoup (struct CoinContext *cc, { /* Woopsie, we allowed recoup on non-revoked denomination!? */ TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:s, s:I, s:o, s:o}", - "operation", - operation, - "hint", - "denomination not revoked", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount (amount), - "coin_pub", GNUNET_JSON_from_data_auto ( - &coin->coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_string ("hint", + "denomination not revoked"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount), + GNUNET_JSON_pack_data_auto ("coin_pub", + &coin->coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount); @@ -2273,18 +2296,16 @@ check_denomination ( &auditor_sig)) { TALER_ARL_report (report_denominations_without_sigs, - json_pack ("{s:o, s:o, s:o, s:o}", - "denomination", - GNUNET_JSON_from_data_auto ( - &issue->denom_hash), - "value", - TALER_JSON_from_amount (&coin_value), - "start_time", - TALER_ARL_json_from_time_abs_nbo ( - issue->start), - "end_time", - TALER_ARL_json_from_time_abs_nbo ( - issue->expire_legal))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("denomination", + &issue->denom_hash), + TALER_JSON_pack_amount ("value", + &coin_value), + TALER_JSON_pack_time_abs_nbo_human ("start_time", + issue->start), + TALER_JSON_pack_time_abs_nbo_human ("end_time", + issue-> + expire_legal))); } } } @@ -2533,8 +2554,6 @@ run (void *cls, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { - json_t *report; - (void) cls; (void) args; (void) cfgfile; @@ -2543,7 +2562,7 @@ run (void *cls, if (GNUNET_OK != TALER_ARL_init (c)) { - global_ret = 1; + global_ret = EXIT_FAILURE; return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, @@ -2617,121 +2636,92 @@ run (void *cls, } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Audit complete\n"); - report = json_pack ("{s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:I, s:I, s:I, s:I, s:I," - " s:I, s:I, s:I, s:I, s:I," - " s:I, s:I, s:o, s:o, s:o," - " s:o}", - /* Block #1 */ - "total_escrow_balance", - TALER_JSON_from_amount (&total_escrow_balance), - "total_active_risk", - TALER_JSON_from_amount (&total_risk), - "total_deposit_fee_income", - TALER_JSON_from_amount ( - &total_deposit_fee_income), - "total_melt_fee_income", - TALER_JSON_from_amount (&total_melt_fee_income), - "total_refund_fee_income", - TALER_JSON_from_amount ( - &total_refund_fee_income), - /* Block #2 */ - /* Tested in test-auditor.sh #18 */ - "emergencies", - report_emergencies, - /* Tested in test-auditor.sh #18 */ - "emergencies_risk_by_amount", - TALER_JSON_from_amount ( - &reported_emergency_risk_by_amount), - /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */ - "bad_sig_losses", - report_bad_sig_losses, - /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */ - "total_bad_sig_loss", - TALER_JSON_from_amount (&total_bad_sig_loss), - /* Tested in test-auditor.sh #31 */ - "row_inconsistencies", - report_row_inconsistencies, - /* Block #3 */ - /* Tested in test-auditor.sh #18 */ - "amount_arithmetic_inconsistencies", - report_amount_arithmetic_inconsistencies, - "total_arithmetic_delta_plus", - TALER_JSON_from_amount ( - &total_arithmetic_delta_plus), - "total_arithmetic_delta_minus", - TALER_JSON_from_amount ( - &total_arithmetic_delta_minus), - /* Tested in test-auditor.sh #12 */ - "total_refresh_hanging", - TALER_JSON_from_amount (&total_refresh_hanging), - /* Tested in test-auditor.sh #12 */ - "refresh_hanging", - report_refreshs_hanging, - /* Block #4 */ - "total_recoup_loss", - TALER_JSON_from_amount (&total_recoup_loss), - /* Tested in test-auditor.sh #18 */ - "emergencies_by_count", - report_emergencies_by_count, - /* Tested in test-auditor.sh #18 */ - "emergencies_risk_by_count", - TALER_JSON_from_amount ( - &reported_emergency_risk_by_count), - /* Tested in test-auditor.sh #18 */ - "emergencies_loss", - TALER_JSON_from_amount ( - &reported_emergency_loss), - /* Tested in test-auditor.sh #18 */ - "emergencies_loss_by_count", - TALER_JSON_from_amount ( - &reported_emergency_loss_by_count), - /* Block #5 */ - "start_ppc_withdraw_serial_id", - (json_int_t) ppc_start.last_withdraw_serial_id, - "start_ppc_deposit_serial_id", - (json_int_t) ppc_start.last_deposit_serial_id, - "start_ppc_melt_serial_id", - (json_int_t) ppc_start.last_melt_serial_id, - "start_ppc_refund_serial_id", - (json_int_t) ppc_start.last_refund_serial_id, - "start_ppc_recoup_serial_id", - (json_int_t) ppc_start.last_recoup_serial_id, - /* Block #6 */ - "start_ppc_recoup_refresh_serial_id", - (json_int_t) ppc_start. - last_recoup_refresh_serial_id, - "end_ppc_withdraw_serial_id", - (json_int_t) ppc.last_withdraw_serial_id, - "end_ppc_deposit_serial_id", - (json_int_t) ppc.last_deposit_serial_id, - "end_ppc_melt_serial_id", - (json_int_t) ppc.last_melt_serial_id, - "end_ppc_refund_serial_id", - (json_int_t) ppc.last_refund_serial_id, - /* Block #7 */ - "end_ppc_recoup_serial_id", - (json_int_t) ppc.last_recoup_serial_id, - "end_ppc_recoup_refresh_serial_id", - (json_int_t) ppc.last_recoup_refresh_serial_id, - "auditor_start_time", - TALER_ARL_json_from_time_abs ( - start_time), - "auditor_end_time", - TALER_ARL_json_from_time_abs ( - GNUNET_TIME_absolute_get ()), - "total_irregular_recoups", - TALER_JSON_from_amount ( - &total_irregular_recoups), - /* Block #8 */ - "unsigned_denominations", - report_denominations_without_sigs - ); - GNUNET_break (NULL != report); - TALER_ARL_done (report); + TALER_ARL_done ( + GNUNET_JSON_PACK ( + TALER_JSON_pack_amount ("total_escrow_balance", + &total_escrow_balance), + TALER_JSON_pack_amount ("total_active_risk", + &total_risk), + TALER_JSON_pack_amount ("total_deposit_fee_income", + &total_deposit_fee_income), + TALER_JSON_pack_amount ("total_melt_fee_income", + &total_melt_fee_income), + TALER_JSON_pack_amount ("total_refund_fee_income", + &total_refund_fee_income), + /* Tested in test-auditor.sh #18 */ + GNUNET_JSON_pack_array_steal ("emergencies", + report_emergencies), + /* Tested in test-auditor.sh #18 */ + TALER_JSON_pack_amount ("emergencies_risk_by_amount", + &reported_emergency_risk_by_amount), + /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */ + GNUNET_JSON_pack_array_steal ("bad_sig_losses", + report_bad_sig_losses), + /* Tested in test-auditor.sh #4/#5/#6/#13/#26 */ + TALER_JSON_pack_amount ("total_bad_sig_loss", + &total_bad_sig_loss), + /* Tested in test-auditor.sh #31 */ + GNUNET_JSON_pack_array_steal ("row_inconsistencies", + report_row_inconsistencies), + /* Tested in test-auditor.sh #18 */ + GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies", + report_amount_arithmetic_inconsistencies), + TALER_JSON_pack_amount ("total_arithmetic_delta_plus", + &total_arithmetic_delta_plus), + TALER_JSON_pack_amount ("total_arithmetic_delta_minus", + &total_arithmetic_delta_minus), + TALER_JSON_pack_amount ("total_refresh_hanging", + &total_refresh_hanging), + /* Tested in test-auditor.sh #12 */ + GNUNET_JSON_pack_array_steal ("refresh_hanging", + report_refreshs_hanging), + TALER_JSON_pack_amount ("total_recoup_loss", + &total_recoup_loss), + /* Tested in test-auditor.sh #18 */ + GNUNET_JSON_pack_array_steal ("emergencies_by_count", + report_emergencies_by_count), + /* Tested in test-auditor.sh #18 */ + TALER_JSON_pack_amount ("emergencies_risk_by_count", + &reported_emergency_risk_by_count), + /* Tested in test-auditor.sh #18 */ + TALER_JSON_pack_amount ("emergencies_loss", + &reported_emergency_loss), + /* Tested in test-auditor.sh #18 */ + TALER_JSON_pack_amount ("emergencies_loss_by_count", + &reported_emergency_loss_by_count), + GNUNET_JSON_pack_uint64 ("start_ppc_withdraw_serial_id", + ppc_start.last_withdraw_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppc_deposit_serial_id", + ppc_start.last_deposit_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppc_melt_serial_id", + ppc_start.last_melt_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppc_refund_serial_id", + ppc_start.last_refund_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppc_recoup_serial_id", + ppc_start.last_recoup_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppc_recoup_refresh_serial_id", + ppc_start. + last_recoup_refresh_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppc_withdraw_serial_id", + ppc.last_withdraw_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppc_deposit_serial_id", + ppc.last_deposit_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppc_melt_serial_id", + ppc.last_melt_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppc_refund_serial_id", + ppc.last_refund_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppc_recoup_serial_id", + ppc.last_recoup_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppc_recoup_refresh_serial_id", + ppc.last_recoup_refresh_serial_id), + TALER_JSON_pack_time_abs_human ("auditor_start_time", + start_time), + TALER_JSON_pack_time_abs_human ("auditor_end_time", + GNUNET_TIME_absolute_get ()), + TALER_JSON_pack_amount ("total_irregular_recoups", + &total_irregular_recoups), + GNUNET_JSON_pack_array_steal ("unsigned_denominations", + report_denominations_without_sigs))); } @@ -2769,7 +2759,7 @@ main (int argc, if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) - return 4; + return EXIT_INVALIDARGUMENT; ret = GNUNET_PROGRAM_run ( argc, argv, @@ -2780,9 +2770,9 @@ main (int argc, NULL); GNUNET_free_nz ((void *) argv); if (GNUNET_SYSERR == ret) - return 3; + return EXIT_INVALIDARGUMENT; if (GNUNET_NO == ret) - return 0; + return EXIT_SUCCESS; return global_ret; } diff --git a/src/auditor/taler-helper-auditor-deposits.c b/src/auditor/taler-helper-auditor-deposits.c index a0a86540f..17b32f25e 100644 --- a/src/auditor/taler-helper-auditor-deposits.c +++ b/src/auditor/taler-helper-auditor-deposits.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2016-2020 Taler Systems SA + Copyright (C) 2016-2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero Public License as published by the Free Software @@ -146,16 +146,15 @@ test_dc (void *cls, } /* deposit confirmation missing! report! */ TALER_ARL_report (report_deposit_confirmation_inconsistencies, - json_pack ("{s:o, s:o, s:I, s:o}", - "timestamp", - TALER_ARL_json_from_time_abs ( - dc->exchange_timestamp), - "amount", - TALER_JSON_from_amount (&dc->amount_without_fee), - "rowid", - (json_int_t) serial_id, - "account", - GNUNET_JSON_from_data_auto (&dc->h_wire))); + GNUNET_JSON_PACK ( + TALER_JSON_pack_time_abs_human ("timestamp", + dc->exchange_timestamp), + TALER_JSON_pack_amount ("amount", + &dc->amount_without_fee), + GNUNET_JSON_pack_uint64 ("rowid", + serial_id), + GNUNET_JSON_pack_data_auto ("account", + &dc->h_wire))); dcc->first_missed_coin_serial = GNUNET_MIN (dcc->first_missed_coin_serial, serial_id); dcc->missed_count++; @@ -295,7 +294,7 @@ run (void *cls, if (GNUNET_OK != TALER_ARL_init (c)) { - global_ret = 1; + global_ret = EXIT_FAILURE; return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, @@ -306,32 +305,23 @@ run (void *cls, TALER_ARL_setup_sessions_and_run (&analyze_deposit_confirmations, NULL)) { - global_ret = 1; + global_ret = EXIT_FAILURE; return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Deposit audit complete\n"); - { - json_t *report; - - report = json_pack ("{s:o, s:I, s:o, s:o, s:o}", - "deposit_confirmation_inconsistencies", - report_deposit_confirmation_inconsistencies, - "missing_deposit_confirmation_count", - (json_int_t) number_missed_deposit_confirmations, - "missing_deposit_confirmation_total", - TALER_JSON_from_amount ( - &total_missed_deposit_confirmations), - "auditor_start_time", - TALER_ARL_json_from_time_abs ( - start_time), - "auditor_end_time", - TALER_ARL_json_from_time_abs ( - GNUNET_TIME_absolute_get ()) - ); - GNUNET_break (NULL != report); - TALER_ARL_done (report); - } + TALER_ARL_done ( + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_array_steal ("deposit_confirmation_inconsistencies", + report_deposit_confirmation_inconsistencies), + GNUNET_JSON_pack_uint64 ("missing_deposit_confirmation_count", + number_missed_deposit_confirmations), + TALER_JSON_pack_amount ("missing_deposit_confirmation_total", + &total_missed_deposit_confirmations), + TALER_JSON_pack_time_abs_human ("auditor_start_time", + start_time), + TALER_JSON_pack_time_abs_human ("auditor_end_time", + GNUNET_TIME_absolute_get ()))); } @@ -369,7 +359,7 @@ main (int argc, if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) - return 4; + return EXIT_INVALIDARGUMENT; ret = GNUNET_PROGRAM_run ( argc, argv, @@ -381,9 +371,9 @@ main (int argc, NULL); GNUNET_free_nz ((void *) argv); if (GNUNET_SYSERR == ret) - return 3; + return EXIT_INVALIDARGUMENT; if (GNUNET_NO == ret) - return 0; + return EXIT_SUCCESS; return global_ret; } diff --git a/src/auditor/taler-helper-auditor-reserves.c b/src/auditor/taler-helper-auditor-reserves.c index 41580e0c7..22d7f5c27 100644 --- a/src/auditor/taler-helper-auditor-reserves.c +++ b/src/auditor/taler-helper-auditor-reserves.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2016-2020 Taler Systems SA + Copyright (C) 2016-2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero Public License as published by the Free Software @@ -191,12 +191,17 @@ report_amount_arithmetic_inconsistency ( exchange); } TALER_ARL_report (report_amount_arithmetic_inconsistencies, - json_pack ("{s:s, s:I, s:o, s:o, s:I}", - "operation", operation, - "rowid", (json_int_t) rowid, - "exchange", TALER_JSON_from_amount (exchange), - "auditor", TALER_JSON_from_amount (auditor), - "profitable", (json_int_t) profitable)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + operation), + GNUNET_JSON_pack_uint64 ("rowid", + rowid), + TALER_JSON_pack_amount ("exchange", + exchange), + TALER_JSON_pack_amount ("auditor", + auditor), + GNUNET_JSON_pack_int64 ("profitable", + profitable))); if (0 != profitable) { target = (1 == profitable) @@ -222,10 +227,13 @@ report_row_inconsistency (const char *table, const char *diagnostic) { TALER_ARL_report (report_row_inconsistencies, - json_pack ("{s:s, s:I, s:s}", - "table", table, - "row", (json_int_t) rowid, - "diagnostic", diagnostic)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + table), + GNUNET_JSON_pack_uint64 ("row", + rowid), + GNUNET_JSON_pack_string ("diagnostic", + diagnostic))); } @@ -549,14 +557,15 @@ handle_reserve_out (void *cls, (expire_withdraw.abs_value_us < execution_date.abs_value_us) ) { TALER_ARL_report (denomination_key_validity_withdraw_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o}", - "row", (json_int_t) rowid, - "execution_date", - TALER_ARL_json_from_time_abs (execution_date), - "reserve_pub", GNUNET_JSON_from_data_auto ( - reserve_pub), - "denompub_h", GNUNET_JSON_from_data_auto ( - &wsrd.h_denomination_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_time_abs_human ("execution_date", + execution_date), + GNUNET_JSON_pack_data_auto ("reserve_pub", + reserve_pub), + GNUNET_JSON_pack_data_auto ("denompub_h", + &wsrd.h_denomination_pub))); } /* check reserve_sig (first: setup remaining members of wsrd) */ @@ -569,13 +578,15 @@ handle_reserve_out (void *cls, &reserve_pub->eddsa_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "withdraw", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount ( - amount_with_fee), - "key_pub", GNUNET_JSON_from_data_auto ( - reserve_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "withdraw"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount_with_fee), + GNUNET_JSON_pack_data_auto ("key_pub", + reserve_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount_with_fee); @@ -712,12 +723,15 @@ handle_recoup_by_reserve ( &coin->coin_pub.eddsa_pub)) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "recoup", - "row", (json_int_t) rowid, - "loss", TALER_JSON_from_amount (amount), - "key_pub", GNUNET_JSON_from_data_auto ( - &coin->coin_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "recoup"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("loss", + amount), + GNUNET_JSON_pack_data_auto ("key_pub", + &coin->coin_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount); @@ -778,12 +792,15 @@ handle_recoup_by_reserve ( (0 == strcmp (rev, "master signature invalid")) ) { TALER_ARL_report (report_bad_sig_losses, - json_pack ("{s:s, s:I, s:o, s:o}", - "operation", "recoup-master", - "row", (json_int_t) rev_rowid, - "loss", TALER_JSON_from_amount (amount), - "key_pub", GNUNET_JSON_from_data_auto ( - &TALER_ARL_master_pub))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("operation", + "recoup-master"), + GNUNET_JSON_pack_uint64 ("row", + rev_rowid), + TALER_JSON_pack_amount ("loss", + amount), + GNUNET_JSON_pack_data_auto ("key_pub", + &TALER_ARL_master_pub))); TALER_ARL_amount_add (&total_bad_sig_loss, &total_bad_sig_loss, amount); @@ -1051,11 +1068,11 @@ verify_reserve_balance (void *cls, &total_balance_insufficient_loss, &loss); TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies, - json_pack ("{s:o, s:o}", - "reserve_pub", - GNUNET_JSON_from_data_auto (&rs->reserve_pub), - "loss", - TALER_JSON_from_amount (&loss))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rs->reserve_pub), + TALER_JSON_pack_amount ("loss", + &loss))); /* Continue with a reserve balance of zero */ GNUNET_assert (GNUNET_OK == TALER_amount_set_zero (balance.currency, @@ -1083,12 +1100,11 @@ verify_reserve_balance (void *cls, not an actualized gain and could be trivially corrected by restoring the summary. */// TALER_ARL_report (report_reserve_balance_insufficient_inconsistencies, - json_pack ("{s:o, s:o}", - "reserve_pub", - GNUNET_JSON_from_data_auto ( - &rs->reserve_pub), - "gain", - TALER_JSON_from_amount (&nbalance))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rs->reserve_pub), + TALER_JSON_pack_amount ("gain", + &nbalance))); if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) { GNUNET_break (0); @@ -1126,14 +1142,13 @@ verify_reserve_balance (void *cls, &delta); } TALER_ARL_report (report_reserve_balance_summary_wrong_inconsistencies, - json_pack ("{s:o, s:o, s:o}", - "reserve_pub", - GNUNET_JSON_from_data_auto ( - &rs->reserve_pub), - "exchange", - TALER_JSON_from_amount (&reserve.balance), - "auditor", - TALER_JSON_from_amount (&nbalance))); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rs->reserve_pub), + TALER_JSON_pack_amount ("exchange", + &reserve.balance), + TALER_JSON_pack_amount ("auditor", + &nbalance))); } } } /* end of 'if (internal_checks)' */ @@ -1160,16 +1175,15 @@ verify_reserve_balance (void *cls, TALER_ARL_amount_add (&total_balance_reserve_not_closed, &total_balance_reserve_not_closed, &nbalance); - TALER_ARL_report (report_reserve_not_closed_inconsistencies, - json_pack ("{s:o, s:o, s:o}", - "reserve_pub", - GNUNET_JSON_from_data_auto ( - &rs->reserve_pub), - "balance", - TALER_JSON_from_amount (&nbalance), - "expiration_time", - TALER_ARL_json_from_time_abs ( - rs->a_expiration_date))); + TALER_ARL_report ( + report_reserve_not_closed_inconsistencies, + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rs->reserve_pub), + TALER_JSON_pack_amount ("balance", + &nbalance), + TALER_JSON_pack_time_abs_human ("expiration_time", + rs->a_expiration_date))); } } else @@ -1179,17 +1193,15 @@ verify_reserve_balance (void *cls, &total_balance_reserve_not_closed, &nbalance); TALER_ARL_report (report_reserve_not_closed_inconsistencies, - json_pack ("{s:o, s:o, s:o, s:s}", - "reserve_pub", - GNUNET_JSON_from_data_auto ( - &rs->reserve_pub), - "balance", - TALER_JSON_from_amount (&nbalance), - "expiration_time", - TALER_ARL_json_from_time_abs ( - rs->a_expiration_date), - "diagnostic", - "could not determine closing fee")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rs->reserve_pub), + TALER_JSON_pack_amount ("balance", + &nbalance), + TALER_JSON_pack_time_abs_human ("expiration_time", + rs->a_expiration_date), + GNUNET_JSON_pack_string ("diagnostic", + "could not determine closing fee"))); } } @@ -1489,7 +1501,7 @@ run (void *cls, if (GNUNET_OK != TALER_ARL_init (c)) { - global_ret = 1; + global_ret = EXIT_FAILURE; return; } if (GNUNET_OK != @@ -1501,7 +1513,7 @@ run (void *cls, GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, "exchangedb", "IDLE_RESERVE_EXPIRATION_TIME"); - global_ret = 1; + global_ret = EXIT_FAILURE; return; } GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, @@ -1559,103 +1571,77 @@ run (void *cls, TALER_ARL_setup_sessions_and_run (&analyze_reserves, NULL)) { - global_ret = 1; + global_ret = EXIT_FAILURE; return; } - { - json_t *report; - - report = json_pack ("{s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:I," - " s:I, s:I, s:I, s:I, s:I," - " s:I, s:I }", - /* blocks #1 */ - "reserve_balance_insufficient_inconsistencies", - report_reserve_balance_insufficient_inconsistencies, - /* Tested in test-auditor.sh #3 */ - "total_loss_balance_insufficient", - TALER_JSON_from_amount ( - &total_balance_insufficient_loss), - /* Tested in test-auditor.sh #3 */ - "reserve_balance_summary_wrong_inconsistencies", - report_reserve_balance_summary_wrong_inconsistencies, - "total_balance_summary_delta_plus", - TALER_JSON_from_amount ( - &total_balance_summary_delta_plus), - "total_balance_summary_delta_minus", - TALER_JSON_from_amount ( - &total_balance_summary_delta_minus), - /* blocks #2 */ - "total_escrow_balance", - TALER_JSON_from_amount (&total_escrow_balance), - "total_withdraw_fee_income", - TALER_JSON_from_amount ( - &total_withdraw_fee_income), - /* Tested in test-auditor.sh #21 */ - "reserve_not_closed_inconsistencies", - report_reserve_not_closed_inconsistencies, - /* Tested in test-auditor.sh #21 */ - "total_balance_reserve_not_closed", - TALER_JSON_from_amount ( - &total_balance_reserve_not_closed), - /* Tested in test-auditor.sh #7 */ - "bad_sig_losses", - report_bad_sig_losses, - /* blocks #3 */ - /* Tested in test-auditor.sh #7 */ - "total_bad_sig_loss", - TALER_JSON_from_amount (&total_bad_sig_loss), - /* Tested in test-revocation.sh #4 */ - "row_inconsistencies", - report_row_inconsistencies, - /* Tested in test-auditor.sh #23 */ - "denomination_key_validity_withdraw_inconsistencies", - denomination_key_validity_withdraw_inconsistencies, - "amount_arithmetic_inconsistencies", - report_amount_arithmetic_inconsistencies, - "total_arithmetic_delta_plus", - TALER_JSON_from_amount ( - &total_arithmetic_delta_plus), - /* blocks #4 */ - "total_arithmetic_delta_minus", - TALER_JSON_from_amount ( - &total_arithmetic_delta_minus), - "auditor_start_time", - TALER_ARL_json_from_time_abs ( - start_time), - "auditor_end_time", - TALER_ARL_json_from_time_abs ( - GNUNET_TIME_absolute_get ()), - "total_irregular_recoups", - TALER_JSON_from_amount ( - &total_irregular_recoups), - "start_ppr_reserve_in_serial_id", - (json_int_t) ppr_start.last_reserve_in_serial_id, - /* blocks #5 */ - "start_ppr_reserve_out_serial_id", - (json_int_t) ppr_start. - last_reserve_out_serial_id, - "start_ppr_reserve_recoup_serial_id", - (json_int_t) ppr_start. - last_reserve_recoup_serial_id, - "start_ppr_reserve_close_serial_id", - (json_int_t) ppr_start. - last_reserve_close_serial_id, - "end_ppr_reserve_in_serial_id", - (json_int_t) ppr.last_reserve_in_serial_id, - "end_ppr_reserve_out_serial_id", - (json_int_t) ppr.last_reserve_out_serial_id, - /* blocks #6 */ - "end_ppr_reserve_recoup_serial_id", - (json_int_t) ppr.last_reserve_recoup_serial_id, - "end_ppr_reserve_close_serial_id", - (json_int_t) ppr.last_reserve_close_serial_id - ); - GNUNET_break (NULL != report); - TALER_ARL_done (report); - } + TALER_ARL_done ( + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_array_steal ( + "reserve_balance_insufficient_inconsistencies", + report_reserve_balance_insufficient_inconsistencies), + /* Tested in test-auditor.sh #3 */ + TALER_JSON_pack_amount ("total_loss_balance_insufficient", + &total_balance_insufficient_loss), + /* Tested in test-auditor.sh #3 */ + GNUNET_JSON_pack_array_steal ( + "reserve_balance_summary_wrong_inconsistencies", + report_reserve_balance_summary_wrong_inconsistencies), + TALER_JSON_pack_amount ("total_balance_summary_delta_plus", + &total_balance_summary_delta_plus), + TALER_JSON_pack_amount ("total_balance_summary_delta_minus", + &total_balance_summary_delta_minus), + /* blocks #2 */ + TALER_JSON_pack_amount ("total_escrow_balance", + &total_escrow_balance), + TALER_JSON_pack_amount ("total_withdraw_fee_income", + &total_withdraw_fee_income), + /* Tested in test-auditor.sh #21 */ + GNUNET_JSON_pack_array_steal ("reserve_not_closed_inconsistencies", + report_reserve_not_closed_inconsistencies), + /* Tested in test-auditor.sh #21 */ + TALER_JSON_pack_amount ("total_balance_reserve_not_closed", + &total_balance_reserve_not_closed), + /* Tested in test-auditor.sh #7 */ + GNUNET_JSON_pack_array_steal ("bad_sig_losses", + report_bad_sig_losses), + /* Tested in test-auditor.sh #7 */ + TALER_JSON_pack_amount ("total_bad_sig_loss", + &total_bad_sig_loss), + /* Tested in test-revocation.sh #4 */ + GNUNET_JSON_pack_array_steal ("row_inconsistencies", + report_row_inconsistencies), + /* Tested in test-auditor.sh #23 */ + GNUNET_JSON_pack_array_steal ( + "denomination_key_validity_withdraw_inconsistencies", + denomination_key_validity_withdraw_inconsistencies), + GNUNET_JSON_pack_array_steal ("amount_arithmetic_inconsistencies", + report_amount_arithmetic_inconsistencies), + TALER_JSON_pack_amount ("total_arithmetic_delta_plus", + &total_arithmetic_delta_plus), + TALER_JSON_pack_amount ("total_arithmetic_delta_minus", + &total_arithmetic_delta_minus), + TALER_JSON_pack_time_abs_human ("auditor_start_time", + start_time), + TALER_JSON_pack_time_abs_human ("auditor_end_time", + GNUNET_TIME_absolute_get ()), + TALER_JSON_pack_amount ("total_irregular_recoups", + &total_irregular_recoups), + GNUNET_JSON_pack_uint64 ("start_ppr_reserve_in_serial_id", + ppr_start.last_reserve_in_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppr_reserve_out_serial_id", + ppr_start.last_reserve_out_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppr_reserve_recoup_serial_id", + ppr_start.last_reserve_recoup_serial_id), + GNUNET_JSON_pack_uint64 ("start_ppr_reserve_close_serial_id", + ppr_start.last_reserve_close_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppr_reserve_in_serial_id", + ppr.last_reserve_in_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppr_reserve_out_serial_id", + ppr.last_reserve_out_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppr_reserve_recoup_serial_id", + ppr.last_reserve_recoup_serial_id), + GNUNET_JSON_pack_uint64 ("end_ppr_reserve_close_serial_id", + ppr.last_reserve_close_serial_id))); } @@ -1693,7 +1679,7 @@ main (int argc, if (GNUNET_OK != GNUNET_STRINGS_get_utf8_args (argc, argv, &argc, &argv)) - return 4; + return EXIT_INVALIDARGUMENT; ret = GNUNET_PROGRAM_run ( argc, argv, @@ -1704,9 +1690,9 @@ main (int argc, NULL); GNUNET_free_nz ((void *) argv); if (GNUNET_SYSERR == ret) - return 3; + return EXIT_INVALIDARGUMENT; if (GNUNET_NO == ret) - return 0; + return EXIT_SUCCESS; return global_ret; } diff --git a/src/auditor/taler-helper-auditor-wire.c b/src/auditor/taler-helper-auditor-wire.c index 93834f46f..c0b25eed6 100644 --- a/src/auditor/taler-helper-auditor-wire.c +++ b/src/auditor/taler-helper-auditor-wire.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2017-2020 Taler Systems SA + Copyright (C) 2017-2021 Taler Systems SA 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 @@ -457,93 +457,69 @@ do_shutdown (void *cls) (void) cls; if (NULL != report_row_inconsistencies) { - json_t *report; - GNUNET_assert (NULL != report_row_minor_inconsistencies); - report = json_pack ("{s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:I, s:I," - " s:o, s:o, s:o }", - /* blocks of 5 */ - /* Tested in test-auditor.sh #11, #15, #20 */ - "wire_out_amount_inconsistencies", - report_wire_out_inconsistencies, - "total_wire_out_delta_plus", - TALER_JSON_from_amount ( - &total_bad_amount_out_plus), - /* Tested in test-auditor.sh #11, #15, #19 */ - "total_wire_out_delta_minus", - TALER_JSON_from_amount ( - &total_bad_amount_out_minus), - /* Tested in test-auditor.sh #2 */ - "reserve_in_amount_inconsistencies", - report_reserve_in_inconsistencies, - /* Tested in test-auditor.sh #2 */ - "total_wire_in_delta_plus", - TALER_JSON_from_amount ( - &total_bad_amount_in_plus), - /* block */ - /* Tested in test-auditor.sh #3 */ - "total_wire_in_delta_minus", - TALER_JSON_from_amount ( - &total_bad_amount_in_minus), - /* Tested in test-auditor.sh #9 */ - "missattribution_in_inconsistencies", - report_missattribution_in_inconsistencies, - /* Tested in test-auditor.sh #9 */ - "total_missattribution_in", - TALER_JSON_from_amount ( - &total_missattribution_in), - "row_inconsistencies", - report_row_inconsistencies, - /* Tested in test-auditor.sh #10/#17 */ - "row_minor_inconsistencies", - report_row_minor_inconsistencies, - /* block */ - /* Tested in test-auditor.sh #19 */ - "total_wire_format_amount", - TALER_JSON_from_amount ( - &total_wire_format_amount), - /* Tested in test-auditor.sh #19 */ - "wire_format_inconsistencies", - report_wire_format_inconsistencies, - /* Tested in test-auditor.sh #1 */ - "total_amount_lag", - TALER_JSON_from_amount (&total_amount_lag), - /* Tested in test-auditor.sh #1 */ - "lag_details", - report_lags, - /* Tested in test-auditor.sh #22 */ - "total_closure_amount_lag", - TALER_JSON_from_amount ( - &total_closure_amount_lag), - /* blocks of 5 */ - /* Tested in test-auditor.sh #22 */ - "reserve_lag_details", - report_closure_lags, - "wire_auditor_start_time", - TALER_ARL_json_from_time_abs ( - start_time), - "wire_auditor_end_time", - TALER_ARL_json_from_time_abs ( - GNUNET_TIME_absolute_get ()), - "start_pp_reserve_close_uuid", - (json_int_t) start_pp.last_reserve_close_uuid, - "end_pp_reserve_close_uuid", - (json_int_t) pp.last_reserve_close_uuid, - /* blocks of 5 */ - "start_pp_last_timestamp", - TALER_ARL_json_from_time_abs ( - start_pp.last_timestamp), - "end_pp_last_timestamp", - TALER_ARL_json_from_time_abs ( - pp.last_timestamp), - "account_progress", - report_account_progress - ); - GNUNET_break (NULL != report); - TALER_ARL_done (report); + TALER_ARL_done ( + GNUNET_JSON_PACK ( + /* Tested in test-auditor.sh #11, #15, #20 */ + GNUNET_JSON_pack_array_steal ("wire_out_amount_inconsistencies", + report_wire_out_inconsistencies), + TALER_JSON_pack_amount ("total_wire_out_delta_plus", + &total_bad_amount_out_plus), + /* Tested in test-auditor.sh #11, #15, #19 */ + TALER_JSON_pack_amount ("total_wire_out_delta_minus", + &total_bad_amount_out_minus), + /* Tested in test-auditor.sh #2 */ + GNUNET_JSON_pack_array_steal ("reserve_in_amount_inconsistencies", + report_reserve_in_inconsistencies), + /* Tested in test-auditor.sh #2 */ + TALER_JSON_pack_amount ("total_wire_in_delta_plus", + &total_bad_amount_in_plus), + /* Tested in test-auditor.sh #3 */ + TALER_JSON_pack_amount ("total_wire_in_delta_minus", + &total_bad_amount_in_minus), + /* Tested in test-auditor.sh #9 */ + GNUNET_JSON_pack_array_steal ("missattribution_in_inconsistencies", + report_missattribution_in_inconsistencies), + /* Tested in test-auditor.sh #9 */ + TALER_JSON_pack_amount ("total_missattribution_in", + &total_missattribution_in), + GNUNET_JSON_pack_array_steal ("row_inconsistencies", + report_row_inconsistencies), + /* Tested in test-auditor.sh #10/#17 */ + GNUNET_JSON_pack_array_steal ("row_minor_inconsistencies", + report_row_minor_inconsistencies), + /* Tested in test-auditor.sh #19 */ + TALER_JSON_pack_amount ("total_wire_format_amount", + &total_wire_format_amount), + /* Tested in test-auditor.sh #19 */ + GNUNET_JSON_pack_array_steal ("wire_format_inconsistencies", + report_wire_format_inconsistencies), + /* Tested in test-auditor.sh #1 */ + TALER_JSON_pack_amount ("total_amount_lag", + &total_amount_lag), + /* Tested in test-auditor.sh #1 */ + GNUNET_JSON_pack_array_steal ("lag_details", + report_lags), + /* Tested in test-auditor.sh #22 */ + TALER_JSON_pack_amount ("total_closure_amount_lag", + &total_closure_amount_lag), + /* Tested in test-auditor.sh #22 */ + GNUNET_JSON_pack_array_steal ("reserve_lag_details", + report_closure_lags), + TALER_JSON_pack_time_abs_human ("wire_auditor_start_time", + start_time), + TALER_JSON_pack_time_abs_human ("wire_auditor_end_time", + GNUNET_TIME_absolute_get ()), + GNUNET_JSON_pack_uint64 ("start_pp_reserve_close_uuid", + start_pp.last_reserve_close_uuid), + GNUNET_JSON_pack_uint64 ("end_pp_reserve_close_uuid", + pp.last_reserve_close_uuid), + TALER_JSON_pack_time_abs_human ("start_pp_last_timestamp", + start_pp.last_timestamp), + TALER_JSON_pack_time_abs_human ("end_pp_last_timestamp", + pp.last_timestamp), + GNUNET_JSON_pack_array_steal ("account_progress", + report_account_progress))); report_wire_out_inconsistencies = NULL; report_reserve_in_inconsistencies = NULL; report_row_inconsistencies = NULL; @@ -639,13 +615,17 @@ check_pending_rc (void *cls, if ( (0 != rc->amount.value) || (0 != rc->amount.fraction) ) TALER_ARL_report (report_closure_lags, - json_pack ("{s:I, s:o, s:o, s:o, s:s}", - "row", (json_int_t) rc->rowid, - "amount", TALER_JSON_from_amount (&rc->amount), - "deadline", TALER_ARL_json_from_time_abs ( - rc->execution_date), - "wtid", GNUNET_JSON_from_data_auto (&rc->wtid), - "account", rc->receiver_account)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rc->rowid), + TALER_JSON_pack_amount ("amount", + &rc->amount), + TALER_JSON_pack_time_abs_human ("deadline", + rc->execution_date), + GNUNET_JSON_pack_data_auto ("wtid", + &rc->wtid), + GNUNET_JSON_pack_string ("account", + rc->receiver_account))); pp.last_reserve_close_uuid = GNUNET_MIN (pp.last_reserve_close_uuid, rc->rowid); @@ -711,20 +691,19 @@ commit (enum GNUNET_DB_QueryStatus qs) GNUNET_assert (0 == json_array_append_new ( report_account_progress, - json_pack ( - "{s:s, s:I, s:I, s:I, s:I}", - "account", - wa->section_name, - "start_reserve_in", - (json_int_t) wa->start_pp.last_reserve_in_serial_id, - "end_reserve_in", - (json_int_t) wa->pp.last_reserve_in_serial_id, - "start_wire_out", - (json_int_t) wa->start_pp.last_wire_out_serial_id, - "end_wire_out", - (json_int_t) wa->pp.last_wire_out_serial_id - )) - ); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("account", + wa->section_name), + GNUNET_JSON_pack_uint64 ("start_reserve_in", + wa->start_pp. + last_reserve_in_serial_id), + GNUNET_JSON_pack_uint64 ("end_reserve_in", + wa->pp.last_reserve_in_serial_id), + GNUNET_JSON_pack_uint64 ("start_wire_out", + wa->start_pp. + last_wire_out_serial_id), + GNUNET_JSON_pack_uint64 ("end_wire_out", + wa->pp.last_wire_out_serial_id)))); if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == wa->qsx) qs = TALER_ARL_adb->update_wire_auditor_account_progress ( TALER_ARL_adb->cls, @@ -862,22 +841,24 @@ wire_missing_cb (void *cls, &tiny_amount)) return; /* acceptable, amount was tiny */ } - rep = json_pack ("{s:I, s:o, s:o, s:o, s:O}", - "row", (json_int_t) rowid, - "amount", TALER_JSON_from_amount (amount), - "deadline", TALER_ARL_json_from_time_abs ( - deadline), - "coin_pub", GNUNET_JSON_from_data_auto ( - coin_pub), - "account", wire); - GNUNET_break (NULL != rep); + rep = GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("amount", + amount), + TALER_JSON_pack_time_abs_human ("deadline", + deadline), + GNUNET_JSON_pack_data_auto ("coin_pub", + coin_pub), + GNUNET_JSON_pack_object_incref ("account", + (json_t *) wire)); if (internal_checks) { /* the 'done' bit is only useful in 'internal' mode */ - GNUNET_break (0 == - json_object_set (rep, - "claimed_done", - json_string ((done) ? "yes" : "no"))); + GNUNET_assert (0 == + json_object_set (rep, + "claimed_done", + json_string ((done) ? "yes" : "no"))); } TALER_ARL_report (report_lags, rep); @@ -969,10 +950,13 @@ check_time_difference (const char *table, GNUNET_STRINGS_relative_time_to_string (delta, GNUNET_YES)); TALER_ARL_report (report_row_minor_inconsistencies, - json_pack ("{s:s, s:I, s:s}", - "table", table, - "row", (json_int_t) rowid, - "diagnostic", details)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + table), + GNUNET_JSON_pack_uint64 ("row", + rowid), + GNUNET_JSON_pack_string ("diagnostic", + details))); GNUNET_free (details); } @@ -1018,16 +1002,21 @@ wire_out_cb (void *cls, This is moderately harmless, it might just be that the aggreator has not yet fully caught up with the transfers it should do. */ TALER_ARL_report (report_wire_out_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}", - "row", (json_int_t) rowid, - "amount_wired", TALER_JSON_from_amount (&zero), - "amount_justified", TALER_JSON_from_amount ( - amount), - "wtid", GNUNET_JSON_from_data_auto (wtid), - "timestamp", TALER_ARL_json_from_time_abs ( - date), - "diagnostic", "wire transfer not made (yet?)", - "account_section", wa->section_name)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("amount_wired", + &zero), + TALER_JSON_pack_amount ("amount_justified", + amount), + GNUNET_JSON_pack_data_auto ("wtid", + wtid), + TALER_JSON_pack_time_abs_human ("timestamp", + date), + GNUNET_JSON_pack_string ("diagnostic", + "wire transfer not made (yet?)"), + GNUNET_JSON_pack_string ("account_section", + wa->section_name))); TALER_ARL_amount_add (&total_bad_amount_out_minus, &total_bad_amount_out_minus, amount); @@ -1046,34 +1035,44 @@ wire_out_cb (void *cls, we should count the wire transfer as entirely spurious, and additionally consider the justified wire transfer as missing. */ TALER_ARL_report (report_wire_out_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s, s:s}", - "row", (json_int_t) rowid, - "amount_wired", TALER_JSON_from_amount ( - &roi->details.amount), - "amount_justified", TALER_JSON_from_amount ( - &zero), - "wtid", GNUNET_JSON_from_data_auto (wtid), - "timestamp", TALER_ARL_json_from_time_abs ( - date), - "diagnostic", "receiver account mismatch", - "target", payto_uri, - "account_section", wa->section_name)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("amount_wired", + &roi->details.amount), + TALER_JSON_pack_amount ("amount_justified", + &zero), + GNUNET_JSON_pack_data_auto ("wtid", wtid), + TALER_JSON_pack_time_abs_human ("timestamp", + date), + GNUNET_JSON_pack_string ("diagnostic", + "receiver account mismatch"), + GNUNET_JSON_pack_string ("target", + payto_uri), + GNUNET_JSON_pack_string ("account_section", + wa->section_name))); TALER_ARL_amount_add (&total_bad_amount_out_plus, &total_bad_amount_out_plus, &roi->details.amount); TALER_ARL_report (report_wire_out_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s, s:s}", - "row", (json_int_t) rowid, - "amount_wired", TALER_JSON_from_amount ( - &zero), - "amount_justified", TALER_JSON_from_amount ( - amount), - "wtid", GNUNET_JSON_from_data_auto (wtid), - "timestamp", TALER_ARL_json_from_time_abs ( - date), - "diagnostic", "receiver account mismatch", - "target", roi->details.credit_account_url, - "account_section", wa->section_name)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("amount_wired", + &zero), + TALER_JSON_pack_amount ("amount_justified", + amount), + GNUNET_JSON_pack_data_auto ("wtid", + wtid), + TALER_JSON_pack_time_abs_human ("timestamp", + date), + GNUNET_JSON_pack_string ("diagnostic", + "receiver account mismatch"), + GNUNET_JSON_pack_string ("target", + roi->details. + credit_account_url), + GNUNET_JSON_pack_string ("account_section", + wa->section_name))); TALER_ARL_amount_add (&total_bad_amount_out_minus, &total_bad_amount_out_minus, amount); @@ -1086,17 +1085,21 @@ wire_out_cb (void *cls, amount)) { TALER_ARL_report (report_wire_out_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}", - "row", (json_int_t) rowid, - "amount_justified", TALER_JSON_from_amount ( - amount), - "amount_wired", TALER_JSON_from_amount ( - &roi->details.amount), - "wtid", GNUNET_JSON_from_data_auto (wtid), - "timestamp", TALER_ARL_json_from_time_abs ( - date), - "diagnostic", "wire amount does not match", - "account_section", wa->section_name)); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rowid), + TALER_JSON_pack_amount ("amount_justified", + amount), + TALER_JSON_pack_amount ("amount_wired", + &roi->details.amount), + GNUNET_JSON_pack_data_auto ("wtid", + wtid), + TALER_JSON_pack_time_abs_human ("timestamp", + date), + GNUNET_JSON_pack_string ("diagnostic", + "wire amount does not match"), + GNUNET_JSON_pack_string ("account_section", + wa->section_name))); if (0 < TALER_amount_cmp (amount, &roi->details.amount)) { @@ -1229,20 +1232,22 @@ complain_out_not_found (void *cls, if (GNUNET_YES == ctx.found) return GNUNET_OK; TALER_ARL_report (report_wire_out_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}", - "row", (json_int_t) 0, - "amount_wired", TALER_JSON_from_amount ( - &roi->details.amount), - "amount_justified", TALER_JSON_from_amount ( - &zero), - "wtid", GNUNET_JSON_from_data_auto ( - &roi->details.wtid), - "timestamp", TALER_ARL_json_from_time_abs ( - roi->details.execution_date), - "account_section", - wa->section_name, - "diagnostic", - "justification for wire transfer not found")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + 0), + TALER_JSON_pack_amount ("amount_wired", + &roi->details.amount), + TALER_JSON_pack_amount ("amount_justified", + &zero), + GNUNET_JSON_pack_data_auto ("wtid", + &roi->details.wtid), + TALER_JSON_pack_time_abs_human ("timestamp", + roi->details. + execution_date), + GNUNET_JSON_pack_string ("account_section", + wa->section_name), + GNUNET_JSON_pack_string ("diagnostic", + "justification for wire transfer not found"))); TALER_ARL_amount_add (&total_bad_amount_out_plus, &total_bad_amount_out_plus, &roi->details.amount); @@ -1379,11 +1384,13 @@ history_debit_cb (void *cls, &total_wire_format_amount, &details->amount); TALER_ARL_report (report_wire_format_inconsistencies, - json_pack ("{s:o, s:I, s:s}", - "amount", TALER_JSON_from_amount ( - &details->amount), - "wire_offset", (json_int_t) row_off, - "diagnostic", diagnostic)); + GNUNET_JSON_PACK ( + TALER_JSON_pack_amount ("amount", + &details->amount), + GNUNET_JSON_pack_uint64 ("wire_offset", + row_off), + GNUNET_JSON_pack_string ("diagnostic", + diagnostic))); GNUNET_free (diagnostic); return GNUNET_OK; } @@ -1518,13 +1525,15 @@ reserve_in_cb (void *cls, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)) { TALER_ARL_report (report_row_inconsistencies, - json_pack ("{s:s, s:I, s:o, s:s}", - "table", "reserves_in", - "row", (json_int_t) rowid, - "wire_offset_hash", - GNUNET_JSON_from_data_auto ( - &rii->row_off_hash), - "diagnostic", "duplicate wire offset")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + "reserves_in"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + GNUNET_JSON_pack_data_auto ("wire_offset_hash", + &rii->row_off_hash), + GNUNET_JSON_pack_string ("diagnostic", + "duplicate wire offset"))); GNUNET_free (rii); if (TALER_ARL_do_abort ()) return GNUNET_SYSERR; @@ -1555,19 +1564,22 @@ complain_in_not_found (void *cls, (void) key; TALER_ARL_report (report_reserve_in_inconsistencies, - json_pack ("{s:I, s:o, s:o, s:o, s:o, s:s, s:s}", - "row", (json_int_t) rii->rowid, - "amount_exchange_expected", - TALER_JSON_from_amount ( - &rii->details.amount), - "amount_wired", TALER_JSON_from_amount (&zero), - "reserve_pub", GNUNET_JSON_from_data_auto ( - &rii->details.reserve_pub), - "timestamp", TALER_ARL_json_from_time_abs ( - rii->details.execution_date), - "account", wa->section_name, - "diagnostic", - "incoming wire transfer claimed by exchange not found")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rii->rowid), + TALER_JSON_pack_amount ("amount_exchange_expected", + &rii->details.amount), + TALER_JSON_pack_amount ("amount_wired", + &zero), + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rii->details.reserve_pub), + TALER_JSON_pack_time_abs_human ("timestamp", + rii->details. + execution_date), + GNUNET_JSON_pack_string ("account", + wa->section_name), + GNUNET_JSON_pack_string ("diagnostic", + "incoming wire transfer claimed by exchange not found"))); TALER_ARL_amount_add (&total_bad_amount_in_minus, &total_bad_amount_in_minus, &rii->details.amount); @@ -1668,35 +1680,41 @@ history_credit_cb (void *cls, &rii->details.reserve_pub)) { TALER_ARL_report (report_reserve_in_inconsistencies, - json_pack ("{s:I, s:I, s:o, s:o, s:o, s:o, s:s}", - "row", (json_int_t) rii->rowid, - "bank_row", (json_int_t) row_off, - "amount_exchange_expected", - TALER_JSON_from_amount ( - &rii->details.amount), - "amount_wired", TALER_JSON_from_amount (&zero), - "reserve_pub", GNUNET_JSON_from_data_auto ( - &rii->details.reserve_pub), - "timestamp", TALER_ARL_json_from_time_abs ( - rii->details.execution_date), - "diagnostic", "wire subject does not match")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rii->rowid), + GNUNET_JSON_pack_uint64 ("bank_row", + row_off), + TALER_JSON_pack_amount ("amount_exchange_expected", + &rii->details.amount), + TALER_JSON_pack_amount ("amount_wired", + &zero), + GNUNET_JSON_pack_data_auto ("reserve_pub", + &rii->details.reserve_pub), + TALER_JSON_pack_time_abs_human ("timestamp", + rii->details. + execution_date), + GNUNET_JSON_pack_string ("diagnostic", + "wire subject does not match"))); TALER_ARL_amount_add (&total_bad_amount_in_minus, &total_bad_amount_in_minus, &rii->details.amount); TALER_ARL_report (report_reserve_in_inconsistencies, - json_pack ("{s:I, s:I, s:o, s:o, s:o, s:o, s:s}", - "row", (json_int_t) rii->rowid, - "bank_row", (json_int_t) row_off, - "amount_exchange_expected", - TALER_JSON_from_amount ( - &zero), - "amount_wired", TALER_JSON_from_amount ( - &details->amount), - "reserve_pub", GNUNET_JSON_from_data_auto ( - &details->reserve_pub), - "timestamp", TALER_ARL_json_from_time_abs ( - details->execution_date), - "diagnostic", "wire subject does not match")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rii->rowid), + GNUNET_JSON_pack_uint64 ("bank_row", + row_off), + TALER_JSON_pack_amount ("amount_exchange_expected", + &zero), + TALER_JSON_pack_amount ("amount_wired", + &details->amount), + GNUNET_JSON_pack_data_auto ("reserve_pub", + &details->reserve_pub), + TALER_JSON_pack_time_abs_human ("timestamp", + details->execution_date), + GNUNET_JSON_pack_string ("diagnostic", + "wire subject does not match"))); TALER_ARL_amount_add (&total_bad_amount_in_plus, &total_bad_amount_in_plus, @@ -1707,19 +1725,21 @@ history_credit_cb (void *cls, &details->amount)) { TALER_ARL_report (report_reserve_in_inconsistencies, - json_pack ("{s:I, s:I, s:o, s:o, s:o, s:o, s:s}", - "row", (json_int_t) rii->rowid, - "bank_row", (json_int_t) row_off, - "amount_exchange_expected", - TALER_JSON_from_amount ( - &rii->details.amount), - "amount_wired", TALER_JSON_from_amount ( - &details->amount), - "reserve_pub", GNUNET_JSON_from_data_auto ( - &details->reserve_pub), - "timestamp", TALER_ARL_json_from_time_abs ( - details->execution_date), - "diagnostic", "wire amount does not match")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_uint64 ("row", + rii->rowid), + GNUNET_JSON_pack_uint64 ("bank_row", + row_off), + TALER_JSON_pack_amount ("amount_exchange_expected", + &rii->details.amount), + TALER_JSON_pack_amount ("amount_wired", + &details->amount), + GNUNET_JSON_pack_data_auto ("reserve_pub", + &details->reserve_pub), + TALER_JSON_pack_time_abs_human ("timestamp", + details->execution_date), + GNUNET_JSON_pack_string ("diagnostic", + "wire amount does not match"))); if (0 < TALER_amount_cmp (&details->amount, &rii->details.amount)) { @@ -1751,13 +1771,16 @@ history_credit_cb (void *cls, rii->details.debit_account_url)) { TALER_ARL_report (report_missattribution_in_inconsistencies, - json_pack ("{s:o, s:I, s:I, s:o}", - "amount", TALER_JSON_from_amount ( - &rii->details.amount), - "row", (json_int_t) rii->rowid, - "bank_row", (json_int_t) row_off, - "reserve_pub", GNUNET_JSON_from_data_auto ( - &rii->details.reserve_pub))); + GNUNET_JSON_PACK ( + TALER_JSON_pack_amount ("amount", + &rii->details.amount), + GNUNET_JSON_pack_uint64 ("row", + rii->rowid), + GNUNET_JSON_pack_uint64 ("bank_row", + row_off), + GNUNET_JSON_pack_data_auto ( + "reserve_pub", + &rii->details.reserve_pub))); TALER_ARL_amount_add (&total_missattribution_in, &total_missattribution_in, &rii->details.amount); @@ -1766,11 +1789,15 @@ history_credit_cb (void *cls, rii->details.execution_date.abs_value_us) { TALER_ARL_report (report_row_minor_inconsistencies, - json_pack ("{s:s, s:I, s:I, s:s}", - "table", "reserves_in", - "row", (json_int_t) rii->rowid, - "bank_row", (json_int_t) row_off, - "diagnostic", "execution date mismatch")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + "reserves_in"), + GNUNET_JSON_pack_uint64 ("row", + rii->rowid), + GNUNET_JSON_pack_uint64 ("bank_row", + row_off), + GNUNET_JSON_pack_string ("diagnostic", + "execution date mismatch"))); } cleanup: GNUNET_assert (GNUNET_OK == @@ -1893,17 +1920,19 @@ reserve_closed_cb (void *cls, closing_fee)) { TALER_ARL_report (report_row_inconsistencies, - json_pack ("{s:s, s:I, s:o, s:o, s:o, s:s}", - "table", "reserves_closures", - "row", (json_int_t) rowid, - "reserve_pub", GNUNET_JSON_from_data_auto ( - reserve_pub), - "amount_with_fee", TALER_JSON_from_amount ( - amount_with_fee), - "closing_fee", TALER_JSON_from_amount ( - closing_fee), - "diagnostic", - "closing fee above total amount")); + GNUNET_JSON_PACK ( + GNUNET_JSON_pack_string ("table", + "reserves_closures"), + GNUNET_JSON_pack_uint64 ("row", + rowid), + GNUNET_JSON_pack_data_auto ("reserve_pub", + reserve_pub), + TALER_JSON_pack_amount ("amount_with_fee", + amount_with_fee), + TALER_JSON_pack_amount ("closing_fee", + closing_fee), + GNUNET_JSON_pack_string ("diagnostic", + "closing fee above total amount"))); GNUNET_free (rc); if (TALER_ARL_do_abort ()) return GNUNET_SYSERR; diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h index 0cbeba082..f338d44ae 100644 --- a/src/include/taler_json_lib.h +++ b/src/include/taler_json_lib.h @@ -52,6 +52,19 @@ TALER_JSON_pack_time_abs (const char *name, struct GNUNET_TIME_Absolute at); +/** + * Generate packer instruction for a JSON field of type + * absolute time creating a human-readable timestamp. + * + * @param name name of the field to add to the object + * @param at absolute time to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs_human (const char *name, + struct GNUNET_TIME_Absolute at); + + /** * Generate packer instruction for a JSON field of type * absolute time in network byte order. @@ -66,6 +79,19 @@ TALER_JSON_pack_time_abs_nbo (const char *name, struct GNUNET_TIME_AbsoluteNBO at); +/** + * Generate packer instruction for a JSON field of type + * absolute time creating a human-readable timestamp. + * + * @param name name of the field to add to the object + * @param at absolute time to pack + * @return json pack specification + */ +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs_nbo_human (const char *name, + struct GNUNET_TIME_AbsoluteNBO at); + + /** * Generate packer instruction for a JSON field of type * relative time. diff --git a/src/json/json_pack.c b/src/json/json_pack.c index 7a5d22ee2..1859e264a 100644 --- a/src/json/json_pack.c +++ b/src/json/json_pack.c @@ -35,6 +35,20 @@ TALER_JSON_pack_time_abs (const char *name, } +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs_human (const char *name, + struct GNUNET_TIME_Absolute at) +{ + struct GNUNET_JSON_PackSpec ps = { + .field_name = name, + .object = json_string ( + GNUNET_STRINGS_absolute_time_to_string (at)) + }; + + return ps; +} + + struct GNUNET_JSON_PackSpec TALER_JSON_pack_time_abs_nbo (const char *name, struct GNUNET_TIME_AbsoluteNBO at) @@ -44,6 +58,15 @@ TALER_JSON_pack_time_abs_nbo (const char *name, } +struct GNUNET_JSON_PackSpec +TALER_JSON_pack_time_abs_nbo_human (const char *name, + struct GNUNET_TIME_AbsoluteNBO at) +{ + return TALER_JSON_pack_time_abs_human (name, + GNUNET_TIME_absolute_ntoh (at)); +} + + struct GNUNET_JSON_PackSpec TALER_JSON_pack_time_rel (const char *name, struct GNUNET_TIME_Relative rt) -- cgit v1.2.3