diff options
| author | Christian Grothoff <christian@grothoff.org> | 2023-06-04 14:29:15 +0200 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2023-06-04 14:29:15 +0200 | 
| commit | 9e7d3f90657dc2ac9905c8800bff79cd1c97ebd9 (patch) | |
| tree | 0a300d457949440336ecc4230e5e8ee73e2d1b3f /src/bank-lib | |
| parent | 0ad3de938e37cd4f34dd791283350ccfc09df2db (diff) | |
address FIXMEs in bank service API
Diffstat (limited to 'src/bank-lib')
| -rw-r--r-- | src/bank-lib/bank_api_admin.c | 39 | ||||
| -rw-r--r-- | src/bank-lib/bank_api_transfer.c | 37 | ||||
| -rw-r--r-- | src/bank-lib/taler-exchange-wire-gateway-client.c | 48 | 
3 files changed, 50 insertions, 74 deletions
| diff --git a/src/bank-lib/bank_api_admin.c b/src/bank-lib/bank_api_admin.c index f0d97bda..0b8e80e9 100644 --- a/src/bank-lib/bank_api_admin.c +++ b/src/bank-lib/bank_api_admin.c @@ -74,25 +74,25 @@ handle_admin_add_incoming_finished (void *cls,                                      const void *response)  {    struct TALER_BANK_AdminAddIncomingHandle *aai = cls; -  uint64_t row_id = UINT64_MAX; -  struct GNUNET_TIME_Timestamp timestamp; -  enum TALER_ErrorCode ec;    const json_t *j = response; +  struct TALER_BANK_AdminAddIncomingResponse ir = { +    .http_status = response_code, +    .response = response +  };    aai->job = NULL; -  timestamp = GNUNET_TIME_UNIT_FOREVER_TS;    switch (response_code)    {    case 0: -    ec = TALER_EC_GENERIC_INVALID_RESPONSE; +    ir.ec = TALER_EC_GENERIC_INVALID_RESPONSE;      break;    case MHD_HTTP_OK:      {        struct GNUNET_JSON_Specification spec[] = {          GNUNET_JSON_spec_uint64 ("row_id", -                                 &row_id), +                                 &ir.details.ok.serial_id),          GNUNET_JSON_spec_timestamp ("timestamp", -                                    ×tamp), +                                    &ir.details.ok.timestamp),          GNUNET_JSON_spec_end ()        }; @@ -102,42 +102,41 @@ handle_admin_add_incoming_finished (void *cls,                               NULL, NULL))        {          GNUNET_break_op (0); -        response_code = 0; -        ec = TALER_EC_GENERIC_INVALID_RESPONSE; +        ir.http_status = 0; +        ir.ec = TALER_EC_GENERIC_INVALID_RESPONSE;          break;        } -      ec = TALER_EC_NONE;      }      break;    case MHD_HTTP_BAD_REQUEST:      /* This should never happen, either us or the bank is buggy         (or API version conflict); just pass JSON reply to the application */      GNUNET_break_op (0); -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_FORBIDDEN:      /* Access denied */ -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_UNAUTHORIZED:      /* Nothing really to verify, bank says the password is invalid; we should         pass the JSON reply to the application */ -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_NOT_FOUND:      /* Nothing really to verify, maybe account really does not exist.         We should pass the JSON reply to the application */ -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_CONFLICT:      /* Nothing to verify, we used the same wire subject         twice? */ -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_INTERNAL_SERVER_ERROR:      /* Server had an internal issue; we should retry, but this API         leaves this to the application */ -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    default:      /* unexpected response code */ @@ -145,15 +144,11 @@ handle_admin_add_incoming_finished (void *cls,                  "Unexpected response code %u\n",                  (unsigned int) response_code);      GNUNET_break (0); -    ec = TALER_JSON_get_error_code (j); +    ir.ec = TALER_JSON_get_error_code (j);      break;    }    aai->cb (aai->cb_cls, -           response_code, -           ec, -           row_id, -           timestamp, -           j); +           &ir);    TALER_BANK_admin_add_incoming_cancel (aai);  } diff --git a/src/bank-lib/bank_api_transfer.c b/src/bank-lib/bank_api_transfer.c index 94d8c6b6..0748a0d7 100644 --- a/src/bank-lib/bank_api_transfer.c +++ b/src/bank-lib/bank_api_transfer.c @@ -1,6 +1,6 @@  /*    This file is part of TALER -  Copyright (C) 2015--2020 Taler Systems SA +  Copyright (C) 2015--2023 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 @@ -158,23 +158,24 @@ handle_transfer_finished (void *cls,  {    struct TALER_BANK_TransferHandle *th = cls;    const json_t *j = response; -  uint64_t row_id = UINT64_MAX; -  struct GNUNET_TIME_Timestamp timestamp = GNUNET_TIME_UNIT_FOREVER_TS; -  enum TALER_ErrorCode ec; +  struct TALER_BANK_TransferResponse tr = { +    .http_status = response_code, +    .response = j +  };    th->job = NULL;    switch (response_code)    {    case 0: -    ec = TALER_EC_GENERIC_INVALID_RESPONSE; +    tr.ec = TALER_EC_GENERIC_INVALID_RESPONSE;      break;    case MHD_HTTP_OK:      {        struct GNUNET_JSON_Specification spec[] = {          GNUNET_JSON_spec_uint64 ("row_id", -                                 &row_id), +                                 &tr.details.ok.row_id),          GNUNET_JSON_spec_timestamp ("timestamp", -                                    ×tamp), +                                    &tr.details.ok.timestamp),          GNUNET_JSON_spec_end ()        }; @@ -184,39 +185,38 @@ handle_transfer_finished (void *cls,                               NULL, NULL))        {          GNUNET_break_op (0); -        response_code = 0; -        ec = TALER_EC_GENERIC_INVALID_RESPONSE; +        tr.http_status = 0; +        tr.ec = TALER_EC_GENERIC_INVALID_RESPONSE;          break;        } -      ec = TALER_EC_NONE;      }      break;    case MHD_HTTP_BAD_REQUEST:      /* This should never happen, either us or the bank is buggy         (or API version conflict); just pass JSON reply to the application */      GNUNET_break_op (0); -    ec = TALER_JSON_get_error_code (j); +    tr.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_UNAUTHORIZED:      /* Nothing really to verify, bank says our credentials are         invalid. We should pass the JSON reply to the application. */ -    ec = TALER_JSON_get_error_code (j); +    tr.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_NOT_FOUND:      /* Nothing really to verify, endpoint wrong -- could be user unknown */ -    ec = TALER_JSON_get_error_code (j); +    tr.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_CONFLICT:      /* Nothing really to verify. Server says we used the same transfer request         UID before, but with different details.  Should not happen if the user         properly used #TALER_BANK_prepare_transfer() and our PRNG is not         broken... */ -    ec = TALER_JSON_get_error_code (j); +    tr.ec = TALER_JSON_get_error_code (j);      break;    case MHD_HTTP_INTERNAL_SERVER_ERROR:      /* Server had an internal issue; we should retry, but this API         leaves this to the application */ -    ec = TALER_JSON_get_error_code (j); +    tr.ec = TALER_JSON_get_error_code (j);      break;    default:      /* unexpected response code */ @@ -224,14 +224,11 @@ handle_transfer_finished (void *cls,                  "Unexpected response code %u\n",                  (unsigned int) response_code);      GNUNET_break (0); -    ec = TALER_JSON_get_error_code (j); +    tr.ec = TALER_JSON_get_error_code (j);      break;    }    th->cb (th->cb_cls, -          response_code, -          ec, -          row_id, -          timestamp); +          &tr);    TALER_BANK_transfer_cancel (th);  } diff --git a/src/bank-lib/taler-exchange-wire-gateway-client.c b/src/bank-lib/taler-exchange-wire-gateway-client.c index a972bcfd..0d4bba00 100644 --- a/src/bank-lib/taler-exchange-wire-gateway-client.c +++ b/src/bank-lib/taler-exchange-wire-gateway-client.c @@ -357,34 +357,28 @@ execute_debit_history (void)   * execution.   *   * @param cls closure - * @param response_code HTTP status code - * @param ec taler error code - * @param row_id unique ID of the wire transfer in the bank's records - * @param timestamp when did the transaction go into effect + * @param tr response details   */  static void  confirmation_cb (void *cls, -                 unsigned int response_code, -                 enum TALER_ErrorCode ec, -                 uint64_t row_id, -                 struct GNUNET_TIME_Timestamp timestamp) +                 const struct TALER_BANK_TransferResponse *tr)  {    (void) cls;    eh = NULL; -  if (MHD_HTTP_OK != response_code) +  if (MHD_HTTP_OK != tr->http_status)    {      fprintf (stderr,               "The wire transfer didn't execute correctly (%u/%d).\n", -             response_code, -             ec); +             tr->http_status, +             tr->ec);      GNUNET_SCHEDULER_shutdown ();      return;    }    fprintf (stdout,             "Wire transfer #%llu executed successfully at %s.\n", -           (unsigned long long) row_id, -           GNUNET_TIME_timestamp2s (timestamp)); +           (unsigned long long) tr->details.ok.row_id, +           GNUNET_TIME_timestamp2s (tr->details.ok.timestamp));    global_ret = 0;    GNUNET_SCHEDULER_shutdown ();  } @@ -464,39 +458,29 @@ execute_wire_transfer (void)   * Function called with the result of the operation.   *   * @param cls closure - * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request - *                    0 if the bank's reply is bogus (fails to follow the protocol) - * @param ec detailed error code - * @param serial_id unique ID of the wire transfer in the bank's records; UINT64_MAX on error - * @param timestamp timestamp when the transaction got settled at the bank. - * @param json detailed response from the HTTPD, or NULL if reply was not in JSON + * @param air response details   */  static void  res_cb (void *cls, -        unsigned int http_status, -        enum TALER_ErrorCode ec, -        uint64_t serial_id, -        struct GNUNET_TIME_Timestamp timestamp, -        const json_t *json) +        const struct TALER_BANK_AdminAddIncomingResponse *air)  {    (void) cls; -  (void) timestamp;    op = NULL; -  switch (ec) +  switch (air->http_status)    { -  case TALER_EC_NONE: +  case MHD_HTTP_OK:      global_ret = 0;      fprintf (stdout,               "%llu\n", -             (unsigned long long) serial_id); +             (unsigned long long) air->details.ok.serial_id);      break;    default:      fprintf (stderr,               "Operation failed with status code %u/%u\n", -             (unsigned int) ec, -             http_status); -    if (NULL != json) -      json_dumpf (json, +             (unsigned int) air->ec, +             air->http_status); +    if (NULL != air->response) +      json_dumpf (air->response,                    stderr,                    JSON_INDENT (2));      break; | 
