nicer generic error reporting logic, for #6432
This commit is contained in:
parent
ce266ce8f2
commit
4bba726356
@ -1 +1 @@
|
|||||||
Subproject commit bc9def4616494c85af54418bb11193c42f087634
|
Subproject commit 4c0be7d53a083926c2dcc8e3781d650243466e89
|
@ -86,7 +86,7 @@ verify_and_execute_deposit_confirmation (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
|
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
|
||||||
"master_sig (expired)");
|
"master signature expired");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check our cache */
|
/* check our cache */
|
||||||
@ -105,7 +105,7 @@ verify_and_execute_deposit_confirmation (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_SETUP_FAILED,
|
TALER_EC_DB_SETUP_FAILED,
|
||||||
"failed to establish session with database");
|
NULL);
|
||||||
}
|
}
|
||||||
if (! cached)
|
if (! cached)
|
||||||
{
|
{
|
||||||
@ -120,7 +120,7 @@ verify_and_execute_deposit_confirmation (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
|
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
|
||||||
"master_sig");
|
"master signature invalid");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* execute transaction */
|
/* execute transaction */
|
||||||
@ -134,7 +134,7 @@ verify_and_execute_deposit_confirmation (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_AUDITOR_EXCHANGE_STORE_DB_ERROR,
|
TALER_EC_AUDITOR_EXCHANGE_STORE_DB_ERROR,
|
||||||
"failed to persist exchange signing key");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cache it, due to concurreny it might already be in the cache,
|
/* Cache it, due to concurreny it might already be in the cache,
|
||||||
@ -174,7 +174,7 @@ verify_and_execute_deposit_confirmation (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
|
TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
|
||||||
"exchange_sig");
|
"exchange signature invalid");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +189,7 @@ verify_and_execute_deposit_confirmation (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSIT_CONFIRMATION_STORE_DB_ERROR,
|
TALER_EC_DEPOSIT_CONFIRMATION_STORE_DB_ERROR,
|
||||||
"failed to persist deposit-confirmation data");
|
NULL);
|
||||||
}
|
}
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (connection,
|
||||||
MHD_HTTP_OK,
|
MHD_HTTP_OK,
|
||||||
|
@ -90,7 +90,7 @@ TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_SETUP_FAILED,
|
TALER_EC_DB_SETUP_FAILED,
|
||||||
"failed to establish session with database");
|
NULL);
|
||||||
}
|
}
|
||||||
ja = json_array ();
|
ja = json_array ();
|
||||||
GNUNET_break (NULL != ja);
|
GNUNET_break (NULL != ja);
|
||||||
@ -106,7 +106,7 @@ TAH_EXCHANGES_handler (struct TAH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_LIST_EXCHANGES_DB_ERROR,
|
TALER_EC_LIST_EXCHANGES_DB_ERROR,
|
||||||
"Could not fetch exchange list from database");
|
NULL);
|
||||||
}
|
}
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (connection,
|
||||||
MHD_HTTP_OK,
|
MHD_HTTP_OK,
|
||||||
|
@ -760,14 +760,19 @@ handle_transfer (struct TALER_FAKEBANK_Handle *h,
|
|||||||
&row_id);
|
&row_id);
|
||||||
if (GNUNET_OK != ret)
|
if (GNUNET_OK != ret)
|
||||||
{
|
{
|
||||||
|
MHD_RESULT res;
|
||||||
|
char *uids;
|
||||||
|
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
|
uids = GNUNET_STRINGS_data_to_string_alloc (&uuid,
|
||||||
|
sizeof (uuid));
|
||||||
json_decref (json);
|
json_decref (json);
|
||||||
return TALER_MHD_reply_with_error (connection,
|
res = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_CONFLICT,
|
MHD_HTTP_CONFLICT,
|
||||||
TALER_EC_BANK_TRANSFER_REQUEST_UID_REUSED,
|
TALER_EC_BANK_TRANSFER_REQUEST_UID_REUSED,
|
||||||
"transfer request UID was reused");
|
uids);
|
||||||
|
GNUNET_free (uids);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Receiving incoming wire transfer: %s->%s, subject: %s, amount: %s, from %s\n",
|
"Receiving incoming wire transfer: %s->%s, subject: %s, amount: %s, from %s\n",
|
||||||
|
@ -236,7 +236,7 @@ handle_post_coins (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_COINS_INVALID_COIN_PUB,
|
TALER_EC_COINS_INVALID_COIN_PUB,
|
||||||
"coin public key malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
for (unsigned int i = 0; NULL != h[i].op; i++)
|
for (unsigned int i = 0; NULL != h[i].op; i++)
|
||||||
if (0 == strcmp (h[i].op,
|
if (0 == strcmp (h[i].op,
|
||||||
@ -247,7 +247,7 @@ handle_post_coins (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_OPERATION_UNKNOWN,
|
TALER_EC_OPERATION_UNKNOWN,
|
||||||
"requested operation on coin unknown");
|
args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -331,7 +331,7 @@ proceed_with_handler (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_URI_TOO_LONG,
|
MHD_HTTP_URI_TOO_LONG,
|
||||||
TALER_EC_URI_TOO_LONG,
|
TALER_EC_URI_TOO_LONG,
|
||||||
"The URI given is too long");
|
url);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* All POST endpoints come with a body in JSON format. So we parse
|
/* All POST endpoints come with a body in JSON format. So we parse
|
||||||
@ -745,7 +745,7 @@ handle_mhd_request (void *cls,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_METHOD_NOT_ALLOWED,
|
MHD_HTTP_METHOD_NOT_ALLOWED,
|
||||||
TALER_EC_METHOD_INVALID,
|
TALER_EC_METHOD_INVALID,
|
||||||
"The HTTP method used is invalid for this URL");
|
method);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -756,7 +756,7 @@ handle_mhd_request (void *cls,
|
|||||||
ret = TALER_MHD_reply_with_error (connection,
|
ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_ENDPOINT_UNKNOWN,
|
TALER_EC_ENDPOINT_UNKNOWN,
|
||||||
"No handler found for the given URL");
|
url);
|
||||||
GNUNET_async_scope_restore (&old_scope);
|
GNUNET_async_scope_restore (&old_scope);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ TEH_make_coin_known (const struct TALER_CoinPublicInfo *coin,
|
|||||||
= TALER_MHD_reply_with_error (connection,
|
= TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_COIN_HISTORY_STORE_ERROR,
|
TALER_EC_DB_COIN_HISTORY_STORE_ERROR,
|
||||||
"could not persist coin data");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
case TALER_EXCHANGEDB_CKS_CONFLICT:
|
case TALER_EXCHANGEDB_CKS_CONFLICT:
|
||||||
break;
|
break;
|
||||||
@ -96,7 +96,7 @@ TEH_make_coin_known (const struct TALER_CoinPublicInfo *coin,
|
|||||||
connection,
|
connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
||||||
"could not fetch coin transaction history");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
*mhd_ret
|
*mhd_ret
|
||||||
@ -146,7 +146,7 @@ TEH_DB_run_transaction (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_SETUP_FAILED,
|
TALER_EC_DB_SETUP_FAILED,
|
||||||
"could not establish database session");
|
NULL);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
for (unsigned int retries = 0;
|
for (unsigned int retries = 0;
|
||||||
@ -165,7 +165,7 @@ TEH_DB_run_transaction (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_START_FAILED,
|
TALER_EC_DB_START_FAILED,
|
||||||
"could not begin transaction");
|
NULL);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
qs = cb (cb_cls,
|
qs = cb (cb_cls,
|
||||||
@ -186,7 +186,7 @@ TEH_DB_run_transaction (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_COMMIT_FAILED_HARD,
|
TALER_EC_DB_COMMIT_FAILED_HARD,
|
||||||
"could not commit database transaction");
|
NULL);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
/* make sure callback did not violate invariants! */
|
/* make sure callback did not violate invariants! */
|
||||||
@ -202,7 +202,7 @@ TEH_DB_run_transaction (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DB_COMMIT_FAILED_ON_RETRY,
|
TALER_EC_DB_COMMIT_FAILED_ON_RETRY,
|
||||||
"repatedly failed to serialize database transaction");
|
NULL);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ deposit_precheck (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
||||||
"Could not check for existing identical deposit");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
@ -255,7 +255,7 @@ deposit_transaction (void *cls,
|
|||||||
connection,
|
connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
||||||
"could not fetch coin transaction history");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
@ -269,7 +269,7 @@ deposit_transaction (void *cls,
|
|||||||
connection,
|
connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
TALER_EC_DEPOSIT_HISTORY_DB_ERROR,
|
||||||
"could not calculate historic coin amount total");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
/* Check that cost of all transactions (including the current one) is
|
/* Check that cost of all transactions (including the current one) is
|
||||||
@ -301,7 +301,7 @@ deposit_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSIT_STORE_DB_ERROR,
|
TALER_EC_DEPOSIT_STORE_DB_ERROR,
|
||||||
"Could not persist /deposit data");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -382,7 +382,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE,
|
TALER_EC_DEPOSIT_REFUND_DEADLINE_AFTER_WIRE_DEADLINE,
|
||||||
"refund_deadline");
|
NULL);
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_JSON_merchant_wire_signature_hash (wire,
|
TALER_JSON_merchant_wire_signature_hash (wire,
|
||||||
@ -394,7 +394,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSIT_INVALID_WIRE_FORMAT_JSON,
|
TALER_EC_DEPOSIT_INVALID_WIRE_FORMAT_JSON,
|
||||||
"wire");
|
NULL);
|
||||||
}
|
}
|
||||||
if (0 != GNUNET_memcmp (&deposit.h_wire,
|
if (0 != GNUNET_memcmp (&deposit.h_wire,
|
||||||
&my_h_wire))
|
&my_h_wire))
|
||||||
@ -404,7 +404,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT,
|
TALER_EC_DEPOSIT_INVALID_WIRE_FORMAT_CONTRACT_HASH_CONFLICT,
|
||||||
"h_wire");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for idempotency: did we get this request before? */
|
/* Check for idempotency: did we get this request before? */
|
||||||
@ -457,7 +457,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
hc,
|
hc,
|
||||||
ec,
|
ec,
|
||||||
"Could not find denomination key used in deposit");
|
NULL);
|
||||||
}
|
}
|
||||||
TALER_amount_ntoh (&deposit.deposit_fee,
|
TALER_amount_ntoh (&deposit.deposit_fee,
|
||||||
&dki->issue.properties.fee_deposit);
|
&dki->issue.properties.fee_deposit);
|
||||||
@ -471,7 +471,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSIT_CURRENCY_MISMATCH,
|
TALER_EC_DEPOSIT_CURRENCY_MISMATCH,
|
||||||
"contribution");
|
deposit.deposit_fee.currency);
|
||||||
}
|
}
|
||||||
/* check coin signature */
|
/* check coin signature */
|
||||||
if (GNUNET_YES !=
|
if (GNUNET_YES !=
|
||||||
@ -484,7 +484,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_UNAUTHORIZED,
|
MHD_HTTP_UNAUTHORIZED,
|
||||||
TALER_EC_DEPOSIT_DENOMINATION_SIGNATURE_INVALID,
|
TALER_EC_DEPOSIT_DENOMINATION_SIGNATURE_INVALID,
|
||||||
"ub_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
TALER_amount_ntoh (&dc.value,
|
TALER_amount_ntoh (&dc.value,
|
||||||
&dki->issue.properties.value);
|
&dki->issue.properties.value);
|
||||||
@ -498,7 +498,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE,
|
TALER_EC_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE,
|
||||||
"deposited amount smaller than depositing fee");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check deposit signature */
|
/* check deposit signature */
|
||||||
@ -530,7 +530,7 @@ TEH_handler_deposit (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_UNAUTHORIZED,
|
MHD_HTTP_UNAUTHORIZED,
|
||||||
TALER_EC_DEPOSIT_COIN_SIGNATURE_INVALID,
|
TALER_EC_DEPOSIT_COIN_SIGNATURE_INVALID,
|
||||||
"coin_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ deposits_get_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSITS_GET_DB_FETCH_FAILED,
|
TALER_EC_DEPOSITS_GET_DB_FETCH_FAILED,
|
||||||
"failed to fetch transaction data");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -243,7 +243,7 @@ deposits_get_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_DEPOSITS_GET_NOT_FOUND,
|
TALER_EC_DEPOSITS_GET_NOT_FOUND,
|
||||||
"transaction unknown");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
@ -289,7 +289,7 @@ handle_track_transaction_request (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_DEPOSITS_GET_DB_FEE_INCONSISTENT,
|
TALER_EC_DEPOSITS_GET_DB_FEE_INCONSISTENT,
|
||||||
"fees are inconsistent");
|
NULL);
|
||||||
return reply_deposit_details (connection,
|
return reply_deposit_details (connection,
|
||||||
&tps->h_contract_terms,
|
&tps->h_contract_terms,
|
||||||
&tps->h_wire,
|
&tps->h_wire,
|
||||||
@ -333,7 +333,7 @@ TEH_handler_deposits_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSITS_INVALID_H_WIRE,
|
TALER_EC_DEPOSITS_INVALID_H_WIRE,
|
||||||
"wire hash malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_STRINGS_string_to_data (args[1],
|
GNUNET_STRINGS_string_to_data (args[1],
|
||||||
@ -345,7 +345,7 @@ TEH_handler_deposits_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSITS_INVALID_MERCHANT_PUB,
|
TALER_EC_DEPOSITS_INVALID_MERCHANT_PUB,
|
||||||
"merchant public key malformed");
|
args[1]);
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_STRINGS_string_to_data (args[2],
|
GNUNET_STRINGS_string_to_data (args[2],
|
||||||
@ -357,7 +357,7 @@ TEH_handler_deposits_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSITS_INVALID_H_CONTRACT_TERMS,
|
TALER_EC_DEPOSITS_INVALID_H_CONTRACT_TERMS,
|
||||||
"contract terms hash malformed");
|
args[2]);
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_STRINGS_string_to_data (args[3],
|
GNUNET_STRINGS_string_to_data (args[3],
|
||||||
@ -369,7 +369,7 @@ TEH_handler_deposits_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_DEPOSITS_INVALID_COIN_PUB,
|
TALER_EC_DEPOSITS_INVALID_COIN_PUB,
|
||||||
"coin public key malformed");
|
args[3]);
|
||||||
}
|
}
|
||||||
res = TALER_MHD_parse_request_arg_data (connection,
|
res = TALER_MHD_parse_request_arg_data (connection,
|
||||||
"merchant_sig",
|
"merchant_sig",
|
||||||
@ -389,7 +389,7 @@ TEH_handler_deposits_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID,
|
TALER_EC_DEPOSITS_GET_MERCHANT_SIGNATURE_INVALID,
|
||||||
"merchant_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return handle_track_transaction_request (connection,
|
return handle_track_transaction_request (connection,
|
||||||
|
@ -2502,7 +2502,7 @@ TEH_handler_keys (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_KEYS_HAVE_NOT_NUMERIC,
|
TALER_EC_KEYS_HAVE_NOT_NUMERIC,
|
||||||
"last_issue_date");
|
have_cherrypick);
|
||||||
}
|
}
|
||||||
/* The following multiplication may overflow; but this should not really
|
/* The following multiplication may overflow; but this should not really
|
||||||
be a problem, as giving back 'older' data than what the client asks for
|
be a problem, as giving back 'older' data than what the client asks for
|
||||||
@ -2531,7 +2531,7 @@ TEH_handler_keys (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_KEYS_HAVE_NOT_NUMERIC,
|
TALER_EC_KEYS_HAVE_NOT_NUMERIC,
|
||||||
"now");
|
have_fakenow);
|
||||||
}
|
}
|
||||||
if (TEH_allow_keys_timetravel)
|
if (TEH_allow_keys_timetravel)
|
||||||
{
|
{
|
||||||
@ -2547,7 +2547,7 @@ TEH_handler_keys (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_KEYS_TIMETRAVEL_FORBIDDEN,
|
TALER_EC_KEYS_TIMETRAVEL_FORBIDDEN,
|
||||||
"timetravel not allowed by this exchange");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
@ -2567,7 +2567,7 @@ TEH_handler_keys (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_EXCHANGE_BAD_CONFIGURATION,
|
TALER_EC_EXCHANGE_BAD_CONFIGURATION,
|
||||||
"no keys for requested time");
|
NULL);
|
||||||
}
|
}
|
||||||
krd = bsearch (&last_issue_date,
|
krd = bsearch (&last_issue_date,
|
||||||
key_state->krd_array,
|
key_state->krd_array,
|
||||||
@ -2599,7 +2599,7 @@ TEH_handler_keys (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_KEYS_MISSING,
|
TALER_EC_KEYS_MISSING,
|
||||||
"no key response found");
|
NULL);
|
||||||
}
|
}
|
||||||
ret = MHD_queue_response (connection,
|
ret = MHD_queue_response (connection,
|
||||||
MHD_HTTP_OK,
|
MHD_HTTP_OK,
|
||||||
|
@ -157,7 +157,7 @@ link_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
ctx->ec,
|
ctx->ec,
|
||||||
"coin_pub");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
|
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
|
||||||
@ -165,7 +165,7 @@ link_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_LINK_COIN_UNKNOWN,
|
TALER_EC_LINK_COIN_UNKNOWN,
|
||||||
"coin_pub");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
@ -202,7 +202,7 @@ TEH_handler_link (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_COINS_INVALID_COIN_PUB,
|
TALER_EC_COINS_INVALID_COIN_PUB,
|
||||||
"coin public key malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
ctx.mlist = json_array ();
|
ctx.mlist = json_array ();
|
||||||
if (NULL == ctx.mlist)
|
if (NULL == ctx.mlist)
|
||||||
|
@ -64,25 +64,25 @@ reply_melt_insufficient_funds (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_MELT_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS,
|
TALER_EC_MELT_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS,
|
||||||
"Failed to compile transaction history");
|
NULL);
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_CONFLICT,
|
connection,
|
||||||
"{s:s, s:I, s:o, s:o, s:o, s:o, s:o}",
|
MHD_HTTP_CONFLICT,
|
||||||
"hint",
|
"{s:s, s:I, s:o, s:o, s:o, s:o, s:o}",
|
||||||
"insufficient funds",
|
TALER_ErrorCode_get_hint (TALER_EC_MELT_INSUFFICIENT_FUNDS),
|
||||||
"code",
|
"code",
|
||||||
(json_int_t)
|
(json_int_t)
|
||||||
TALER_EC_MELT_INSUFFICIENT_FUNDS,
|
TALER_EC_MELT_INSUFFICIENT_FUNDS,
|
||||||
"coin_pub",
|
"coin_pub",
|
||||||
GNUNET_JSON_from_data_auto (coin_pub),
|
GNUNET_JSON_from_data_auto (coin_pub),
|
||||||
"original_value",
|
"original_value",
|
||||||
TALER_JSON_from_amount (coin_value),
|
TALER_JSON_from_amount (coin_value),
|
||||||
"residual_value",
|
"residual_value",
|
||||||
TALER_JSON_from_amount (residual),
|
TALER_JSON_from_amount (residual),
|
||||||
"requested_value",
|
"requested_value",
|
||||||
TALER_JSON_from_amount (requested),
|
TALER_JSON_from_amount (requested),
|
||||||
"history",
|
"history",
|
||||||
history);
|
history);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ refresh_check_melt (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_MELT_DB_FETCH_ERROR,
|
TALER_EC_MELT_DB_FETCH_ERROR,
|
||||||
"failed to fetch old coin history");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
if (rmc->zombie_required)
|
if (rmc->zombie_required)
|
||||||
@ -229,7 +229,7 @@ refresh_check_melt (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_MELT_COIN_EXPIRED_NO_ZOMBIE,
|
TALER_EC_MELT_COIN_EXPIRED_NO_ZOMBIE,
|
||||||
"denomination expired");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -244,7 +244,7 @@ refresh_check_melt (struct MHD_Connection *connection,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_MELT_COIN_HISTORY_COMPUTATION_FAILED,
|
TALER_EC_MELT_COIN_HISTORY_COMPUTATION_FAILED,
|
||||||
"failed to compute coin transaction history");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ melt_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_MELT_DB_FETCH_ERROR,
|
TALER_EC_MELT_DB_FETCH_ERROR,
|
||||||
"failed to fetch melt index");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,7 +367,7 @@ melt_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_MELT_DB_STORE_SESSION_ERROR,
|
TALER_EC_MELT_DB_STORE_SESSION_ERROR,
|
||||||
"failed to persist melt data");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
@ -417,7 +417,7 @@ handle_melt (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_MELT_COIN_SIGNATURE_INVALID,
|
TALER_EC_MELT_COIN_SIGNATURE_INVALID,
|
||||||
"confirm_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,7 +509,7 @@ check_for_denomination_key (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_MELT_DB_FETCH_ERROR,
|
TALER_EC_MELT_DB_FETCH_ERROR,
|
||||||
"failed to find information about old coin");
|
NULL);
|
||||||
}
|
}
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
GNUNET_break (0 ==
|
GNUNET_break (0 ==
|
||||||
@ -549,7 +549,7 @@ check_for_denomination_key (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
hc,
|
hc,
|
||||||
ec,
|
ec,
|
||||||
"unknown denomination");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
TALER_amount_ntoh (&rmc->coin_refresh_fee,
|
TALER_amount_ntoh (&rmc->coin_refresh_fee,
|
||||||
@ -566,7 +566,8 @@ check_for_denomination_key (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_MELT_CURRENCY_MISMATCH,
|
TALER_EC_MELT_CURRENCY_MISMATCH,
|
||||||
"value_with_fee");
|
rmc->refresh_session.amount_with_fee.
|
||||||
|
currency);
|
||||||
|
|
||||||
}
|
}
|
||||||
/* check coin is actually properly signed */
|
/* check coin is actually properly signed */
|
||||||
@ -579,7 +580,7 @@ check_for_denomination_key (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_MELT_DENOMINATION_SIGNATURE_INVALID,
|
TALER_EC_MELT_DENOMINATION_SIGNATURE_INVALID,
|
||||||
"denom_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TEH_KS_release (key_state);
|
TEH_KS_release (key_state);
|
||||||
@ -593,7 +594,7 @@ check_for_denomination_key (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_MELT_FEES_EXCEED_CONTRIBUTION,
|
TALER_EC_MELT_FEES_EXCEED_CONTRIBUTION,
|
||||||
"melt amount smaller than melting fee");
|
NULL);
|
||||||
}
|
}
|
||||||
return handle_melt (connection,
|
return handle_melt (connection,
|
||||||
rmc);
|
rmc);
|
||||||
|
@ -156,7 +156,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_DB_FETCH_FAILED,
|
TALER_EC_RECOUP_DB_FETCH_FAILED,
|
||||||
"failed to fetch old coin of blind coin");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -175,7 +175,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_DB_FETCH_FAILED,
|
TALER_EC_RECOUP_DB_FETCH_FAILED,
|
||||||
"failed to fetch reserve of blinded coin");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -188,7 +188,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_RECOUP_WITHDRAW_NOT_FOUND,
|
TALER_EC_RECOUP_WITHDRAW_NOT_FOUND,
|
||||||
"envelope unknown");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_DB_FETCH_FAILED,
|
TALER_EC_RECOUP_DB_FETCH_FAILED,
|
||||||
"failed to fetch coin transaction history");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -241,7 +241,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_HISTORY_DB_ERROR,
|
TALER_EC_RECOUP_HISTORY_DB_ERROR,
|
||||||
"failed to calculate old coin transaction history");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
@ -261,7 +261,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_COIN_BALANCE_NEGATIVE,
|
TALER_EC_RECOUP_COIN_BALANCE_NEGATIVE,
|
||||||
"calculated negative coin balance");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
if ( (0 == pc->amount.fraction) &&
|
if ( (0 == pc->amount.fraction) &&
|
||||||
@ -328,7 +328,7 @@ recoup_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_DB_PUT_FAILED,
|
TALER_EC_RECOUP_DB_PUT_FAILED,
|
||||||
"failed to persist recoup data");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -392,7 +392,7 @@ verify_and_execute_recoup (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
hc,
|
hc,
|
||||||
ec,
|
ec,
|
||||||
"denomination not valid for recoup");
|
NULL);
|
||||||
}
|
}
|
||||||
TALER_amount_ntoh (&pc.value,
|
TALER_amount_ntoh (&pc.value,
|
||||||
&dki->issue.properties.value);
|
&dki->issue.properties.value);
|
||||||
@ -407,7 +407,7 @@ verify_and_execute_recoup (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_RECOUP_DENOMINATION_SIGNATURE_INVALID,
|
TALER_EC_RECOUP_DENOMINATION_SIGNATURE_INVALID,
|
||||||
"denom_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check recoup request signature */
|
/* check recoup request signature */
|
||||||
@ -431,7 +431,7 @@ verify_and_execute_recoup (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_RECOUP_SIGNATURE_INVALID,
|
TALER_EC_RECOUP_SIGNATURE_INVALID,
|
||||||
"coin_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GNUNET_CRYPTO_hash (&coin->coin_pub.eddsa_pub,
|
GNUNET_CRYPTO_hash (&coin->coin_pub.eddsa_pub,
|
||||||
@ -449,7 +449,7 @@ verify_and_execute_recoup (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RECOUP_BLINDING_FAILED,
|
TALER_EC_RECOUP_BLINDING_FAILED,
|
||||||
"coin_bks");
|
NULL);
|
||||||
}
|
}
|
||||||
TEH_KS_release (key_state);
|
TEH_KS_release (key_state);
|
||||||
}
|
}
|
||||||
|
@ -257,7 +257,7 @@ refreshes_reveal_preflight (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_DB_FETCH_REVEAL_ERROR,
|
TALER_EC_REVEAL_DB_FETCH_REVEAL_ERROR,
|
||||||
"failed to fetch reveal data");
|
NULL);
|
||||||
rctx->preflight_ok = GNUNET_SYSERR;
|
rctx->preflight_ok = GNUNET_SYSERR;
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
|
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
|
||||||
@ -309,7 +309,7 @@ refreshes_reveal_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_REVEAL_SESSION_UNKNOWN,
|
TALER_EC_REVEAL_SESSION_UNKNOWN,
|
||||||
"rc");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
|
||||||
@ -321,7 +321,7 @@ refreshes_reveal_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_DB_FETCH_SESSION_ERROR,
|
TALER_EC_REVEAL_DB_FETCH_SESSION_ERROR,
|
||||||
"failed to fetch valid challenge from database");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,16 +409,17 @@ refreshes_reveal_transaction (void *cls,
|
|||||||
&rc_expected))
|
&rc_expected))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
*mhd_ret = TALER_MHD_reply_json_pack (connection,
|
*mhd_ret = TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_CONFLICT,
|
connection,
|
||||||
"{s:s, s:I, s:o}",
|
MHD_HTTP_CONFLICT,
|
||||||
"hint", "commitment violation",
|
"{s:s, s:I, s:o}",
|
||||||
"code",
|
"hint",
|
||||||
(json_int_t)
|
TALER_ErrorCode_get_hint (TALER_EC_REVEAL_COMMITMENT_VIOLATION),
|
||||||
TALER_EC_REVEAL_COMMITMENT_VIOLATION,
|
"code",
|
||||||
"rc_expected",
|
(json_int_t) TALER_EC_REVEAL_COMMITMENT_VIOLATION,
|
||||||
GNUNET_JSON_from_data_auto (
|
"rc_expected",
|
||||||
&rc_expected));
|
GNUNET_JSON_from_data_auto (
|
||||||
|
&rc_expected));
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
} /* end of checking "rc_expected" */
|
} /* end of checking "rc_expected" */
|
||||||
@ -451,7 +452,7 @@ refreshes_reveal_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_COST_CALCULATION_OVERFLOW,
|
TALER_EC_REVEAL_COST_CALCULATION_OVERFLOW,
|
||||||
"failed to add up refresh costs");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -462,7 +463,7 @@ refreshes_reveal_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_AMOUNT_INSUFFICIENT,
|
TALER_EC_REVEAL_AMOUNT_INSUFFICIENT,
|
||||||
"melted coin value is insufficient to cover cost of operation");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -517,7 +518,7 @@ refreshes_reveal_persist (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_DB_COMMIT_ERROR,
|
TALER_EC_REVEAL_DB_COMMIT_ERROR,
|
||||||
"failed to persist reveal data");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -582,7 +583,7 @@ resolve_refreshes_reveal_denominations (struct TEH_KS_StateHandle *key_state,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
hc,
|
hc,
|
||||||
ec,
|
ec,
|
||||||
"failed to find denomination key");
|
NULL);
|
||||||
}
|
}
|
||||||
/* #TEH_KS_DKU_WITHDRAW should warrant that we only get denomination
|
/* #TEH_KS_DKU_WITHDRAW should warrant that we only get denomination
|
||||||
keys where we did not yet forget the private key */
|
keys where we did not yet forget the private key */
|
||||||
@ -630,13 +631,13 @@ resolve_refreshes_reveal_denominations (struct TEH_KS_StateHandle *key_state,
|
|||||||
ret = TALER_MHD_reply_with_error (connection,
|
ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_REVEAL_SESSION_UNKNOWN,
|
TALER_EC_REVEAL_SESSION_UNKNOWN,
|
||||||
"rc");
|
NULL);
|
||||||
break;
|
break;
|
||||||
case GNUNET_DB_STATUS_HARD_ERROR:
|
case GNUNET_DB_STATUS_HARD_ERROR:
|
||||||
ret = TALER_MHD_reply_with_error (connection,
|
ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_DB_FETCH_SESSION_ERROR,
|
TALER_EC_REVEAL_DB_FETCH_SESSION_ERROR,
|
||||||
"failed to fetch session data");
|
NULL);
|
||||||
break;
|
break;
|
||||||
case GNUNET_DB_STATUS_SOFT_ERROR:
|
case GNUNET_DB_STATUS_SOFT_ERROR:
|
||||||
default:
|
default:
|
||||||
@ -644,7 +645,7 @@ resolve_refreshes_reveal_denominations (struct TEH_KS_StateHandle *key_state,
|
|||||||
ret = TALER_MHD_reply_with_error (connection,
|
ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_INTERNAL_INVARIANT_FAILURE,
|
TALER_EC_INTERNAL_INVARIANT_FAILURE,
|
||||||
"assertion failed (unexpected database serialization error)");
|
NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@ -689,7 +690,7 @@ resolve_refreshes_reveal_denominations (struct TEH_KS_StateHandle *key_state,
|
|||||||
ret = TALER_MHD_reply_with_error (connection,
|
ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_REVEAL_LINK_SIGNATURE_INVALID,
|
TALER_EC_REVEAL_LINK_SIGNATURE_INVALID,
|
||||||
"link_sig");
|
NULL);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -716,7 +717,7 @@ resolve_refreshes_reveal_denominations (struct TEH_KS_StateHandle *key_state,
|
|||||||
ret = TALER_MHD_reply_with_error (connection,
|
ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REVEAL_SIGNING_ERROR,
|
TALER_EC_REVEAL_SIGNING_ERROR,
|
||||||
"internal signing error");
|
NULL);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -831,7 +832,7 @@ handle_refreshes_reveal_json (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_REVEAL_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE,
|
TALER_EC_REVEAL_NEW_DENOMS_ARRAY_SIZE_EXCESSIVE,
|
||||||
"new_denoms_h");
|
NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (json_array_size (new_denoms_h_json) !=
|
if (json_array_size (new_denoms_h_json) !=
|
||||||
@ -945,7 +946,7 @@ TEH_handler_reveal (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_REVEAL_INVALID_RCH,
|
TALER_EC_REVEAL_INVALID_RCH,
|
||||||
"refresh commitment hash malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
if (0 != strcmp (args[1],
|
if (0 != strcmp (args[1],
|
||||||
"reveal"))
|
"reveal"))
|
||||||
@ -954,7 +955,7 @@ TEH_handler_reveal (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_OPERATION_INVALID,
|
TALER_EC_OPERATION_INVALID,
|
||||||
"expected 'reveal' operation");
|
args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -979,7 +980,7 @@ TEH_handler_reveal (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID,
|
TALER_EC_REVEAL_CNC_TRANSFER_ARRAY_SIZE_INVALID,
|
||||||
"transfer_privs");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -125,9 +125,9 @@ refund_transaction (void *cls,
|
|||||||
{
|
{
|
||||||
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
|
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
|
||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REFUND_COIN_NOT_FOUND,
|
TALER_EC_REFUND_DATABASE_LOOKUP_ERROR,
|
||||||
"database transaction failure");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
deposit_found = false;
|
deposit_found = false;
|
||||||
@ -163,7 +163,7 @@ refund_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_GONE,
|
MHD_HTTP_GONE,
|
||||||
TALER_EC_REFUND_MERCHANT_ALREADY_PAID,
|
TALER_EC_REFUND_MERCHANT_ALREADY_PAID,
|
||||||
"money already sent to merchant");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,9 +230,11 @@ refund_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_json_pack (
|
*mhd_ret = TALER_MHD_reply_json_pack (
|
||||||
connection,
|
connection,
|
||||||
MHD_HTTP_PRECONDITION_FAILED,
|
MHD_HTTP_PRECONDITION_FAILED,
|
||||||
"{s:s, s:I, s:o}",
|
"{s:s, s:s, s:I, s:o}",
|
||||||
"hint",
|
"detail",
|
||||||
"conflicting refund with different amount but same refund transaction ID",
|
"conflicting refund with different amount but same refund transaction ID",
|
||||||
|
"hint", TALER_ErrorCode_get_hint (
|
||||||
|
TALER_EC_REFUND_INCONSISTENT_AMOUNT),
|
||||||
"code", (json_int_t) TALER_EC_REFUND_INCONSISTENT_AMOUNT,
|
"code", (json_int_t) TALER_EC_REFUND_INCONSISTENT_AMOUNT,
|
||||||
"history", TEH_RESPONSE_compile_transaction_history (
|
"history", TEH_RESPONSE_compile_transaction_history (
|
||||||
&refund->coin.coin_pub,
|
&refund->coin.coin_pub,
|
||||||
@ -306,7 +308,7 @@ refund_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_REFUND_DEPOSIT_NOT_FOUND,
|
TALER_EC_REFUND_DEPOSIT_NOT_FOUND,
|
||||||
"deposit unknown");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,7 +323,7 @@ refund_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_REFUND_CURRENCY_MISMATCH,
|
TALER_EC_REFUND_CURRENCY_MISMATCH,
|
||||||
"currencies involved do not match");
|
deposit_total.currency);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,13 +342,16 @@ refund_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_json_pack (
|
*mhd_ret = TALER_MHD_reply_json_pack (
|
||||||
connection,
|
connection,
|
||||||
MHD_HTTP_CONFLICT,
|
MHD_HTTP_CONFLICT,
|
||||||
"{s:s, s:I, s:o}",
|
"{s:s, s:s, s:I, s:o}",
|
||||||
"hint",
|
"detail",
|
||||||
"total amount refunded exceeds total amount deposited for this coin",
|
"total amount refunded exceeds total amount deposited for this coin",
|
||||||
"code", (json_int_t) TALER_EC_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT,
|
"hint",
|
||||||
"history", TEH_RESPONSE_compile_transaction_history (
|
TALER_ErrorCode_get_hint (TALER_EC_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT),
|
||||||
&refund->coin.coin_pub,
|
"code",
|
||||||
tlx));
|
(json_int_t) TALER_EC_REFUND_CONFLICT_DEPOSIT_INSUFFICIENT,
|
||||||
|
"history",
|
||||||
|
TEH_RESPONSE_compile_transaction_history (&refund->coin.coin_pub,
|
||||||
|
tlx));
|
||||||
TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
|
TEH_plugin->free_coin_transaction_list (TEH_plugin->cls,
|
||||||
tlx);
|
tlx);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
@ -365,7 +370,7 @@ refund_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_REFUND_STORE_DB_ERROR,
|
TALER_EC_REFUND_STORE_DB_ERROR,
|
||||||
"could not persist store information");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
/* Success or soft failure */
|
/* Success or soft failure */
|
||||||
@ -411,7 +416,7 @@ verify_and_execute_refund (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_REFUND_MERCHANT_SIGNATURE_INVALID,
|
TALER_EC_REFUND_MERCHANT_SIGNATURE_INVALID,
|
||||||
"merchant_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,11 +430,18 @@ verify_and_execute_refund (struct MHD_Connection *connection,
|
|||||||
&denom_hash);
|
&denom_hash);
|
||||||
if (0 > qs)
|
if (0 > qs)
|
||||||
{
|
{
|
||||||
|
MHD_RESULT res;
|
||||||
|
char *dhs;
|
||||||
|
|
||||||
GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
|
GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
|
||||||
return TALER_MHD_reply_with_error (connection,
|
dhs = GNUNET_STRINGS_data_to_string_alloc (&denom_hash,
|
||||||
MHD_HTTP_NOT_FOUND,
|
sizeof (denom_hash));
|
||||||
TALER_EC_REFUND_COIN_NOT_FOUND,
|
res = TALER_MHD_reply_with_error (connection,
|
||||||
"denomination of coin to be refunded not found in DB");
|
MHD_HTTP_NOT_FOUND,
|
||||||
|
TALER_EC_REFUND_COIN_NOT_FOUND,
|
||||||
|
dhs);
|
||||||
|
GNUNET_free (dhs);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +477,7 @@ verify_and_execute_refund (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
hc,
|
hc,
|
||||||
ec,
|
ec,
|
||||||
"denomination not found, but coin known");
|
NULL);
|
||||||
}
|
}
|
||||||
TALER_amount_ntoh (&refund->details.refund_fee,
|
TALER_amount_ntoh (&refund->details.refund_fee,
|
||||||
&dki->issue.properties.fee_refund);
|
&dki->issue.properties.fee_refund);
|
||||||
|
@ -51,7 +51,7 @@ reply_reserve_history_success (struct MHD_Connection *connection,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_RESERVE_STATUS_DB_ERROR,
|
TALER_EC_RESERVE_STATUS_DB_ERROR,
|
||||||
"balance calculation failure");
|
NULL);
|
||||||
json_balance = TALER_JSON_from_amount (&balance);
|
json_balance = TALER_JSON_from_amount (&balance);
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (connection,
|
||||||
MHD_HTTP_OK,
|
MHD_HTTP_OK,
|
||||||
@ -143,7 +143,7 @@ TEH_handler_reserves_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_RESERVES_INVALID_RESERVE_PUB,
|
TALER_EC_RESERVES_INVALID_RESERVE_PUB,
|
||||||
"reserve public key malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
rsc.rh = NULL;
|
rsc.rh = NULL;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
@ -156,14 +156,10 @@ TEH_handler_reserves_get (const struct TEH_RequestHandler *rh,
|
|||||||
|
|
||||||
/* generate proper response */
|
/* generate proper response */
|
||||||
if (NULL == rsc.rh)
|
if (NULL == rsc.rh)
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
"{s:s, s:s, s:I}",
|
TALER_EC_RESERVE_STATUS_UNKNOWN,
|
||||||
"hint", "Reserve not found",
|
args[0]);
|
||||||
"parameter", "reserve_pub",
|
|
||||||
"code",
|
|
||||||
(json_int_t)
|
|
||||||
TALER_EC_RESERVE_STATUS_UNKNOWN);
|
|
||||||
mhd_ret = reply_reserve_history_success (connection,
|
mhd_ret = reply_reserve_history_success (connection,
|
||||||
rsc.rh);
|
rsc.rh);
|
||||||
TEH_plugin->free_reserve_history (TEH_plugin->cls,
|
TEH_plugin->free_reserve_history (TEH_plugin->cls,
|
||||||
|
@ -445,13 +445,13 @@ TEH_RESPONSE_reply_coin_insufficient_funds (
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_COIN_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS,
|
TALER_EC_JSON_ALLOCATION_FAILURE,
|
||||||
"failed to convert transaction history to JSON");
|
"Failed to generated proof of insufficient funds");
|
||||||
}
|
}
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (connection,
|
||||||
MHD_HTTP_CONFLICT,
|
MHD_HTTP_CONFLICT,
|
||||||
"{s:s, s:I, s:o}",
|
"{s:s, s:I, s:o}",
|
||||||
"hint", "insufficient funds",
|
"hint", TALER_ErrorCode_get_hint (ec),
|
||||||
"code", (json_int_t) ec,
|
"code", (json_int_t) ec,
|
||||||
"history", history);
|
"history", history);
|
||||||
}
|
}
|
||||||
|
@ -446,7 +446,7 @@ get_transfer_deposits (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_TRANSFERS_GET_DB_FETCH_FAILED,
|
TALER_EC_TRANSFERS_GET_DB_FETCH_FAILED,
|
||||||
"failed to fetch transaction data");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -456,7 +456,7 @@ get_transfer_deposits (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_TRANSFERS_GET_DB_INCONSISTENT,
|
TALER_EC_TRANSFERS_GET_DB_INCONSISTENT,
|
||||||
"exchange database internally inconsistent");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
if (GNUNET_NO == ctx->is_valid)
|
if (GNUNET_NO == ctx->is_valid)
|
||||||
@ -464,7 +464,7 @@ get_transfer_deposits (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_TRANSFERS_GET_WTID_NOT_FOUND,
|
TALER_EC_TRANSFERS_GET_WTID_NOT_FOUND,
|
||||||
"wtid");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
qs = TEH_plugin->get_wire_fee (TEH_plugin->cls,
|
qs = TEH_plugin->get_wire_fee (TEH_plugin->cls,
|
||||||
@ -485,7 +485,7 @@ get_transfer_deposits (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_TRANSFERS_GET_WIRE_FEE_NOT_FOUND,
|
TALER_EC_TRANSFERS_GET_WIRE_FEE_NOT_FOUND,
|
||||||
"did not find wire fee");
|
NULL);
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -498,7 +498,7 @@ get_transfer_deposits (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_TRANSFERS_GET_WIRE_FEE_INCONSISTENT,
|
TALER_EC_TRANSFERS_GET_WIRE_FEE_INCONSISTENT,
|
||||||
"could not subtract wire fee");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
|
return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT;
|
||||||
@ -535,7 +535,7 @@ TEH_handler_transfers_get (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_TRANSFERS_INVALID_WTID,
|
TALER_EC_TRANSFERS_INVALID_WTID,
|
||||||
"wire transfer identifier malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TEH_DB_run_transaction (connection,
|
TEH_DB_run_transaction (connection,
|
||||||
|
@ -66,7 +66,7 @@ reply_withdraw_insufficient_funds (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS,
|
TALER_EC_WITHDRAW_HISTORY_DB_ERROR_INSUFFICIENT_FUNDS,
|
||||||
"reserve balance calculation failure");
|
NULL);
|
||||||
if (0 !=
|
if (0 !=
|
||||||
TALER_amount_cmp (&balance,
|
TALER_amount_cmp (&balance,
|
||||||
ebalance))
|
ebalance))
|
||||||
@ -76,18 +76,20 @@ reply_withdraw_insufficient_funds (
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_RESERVE_BALANCE_CORRUPT,
|
TALER_EC_WITHDRAW_RESERVE_BALANCE_CORRUPT,
|
||||||
"internal balance inconsistency error");
|
NULL);
|
||||||
}
|
}
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_CONFLICT,
|
connection,
|
||||||
"{s:s, s:I, s:o, s:o}",
|
MHD_HTTP_CONFLICT,
|
||||||
"hint", "insufficient funds",
|
"{s:s, s:I, s:o, s:o}",
|
||||||
"code",
|
"hint",
|
||||||
(json_int_t)
|
TALER_ErrorCode_get_hint (TALER_EC_WITHDRAW_INSUFFICIENT_FUNDS),
|
||||||
TALER_EC_WITHDRAW_INSUFFICIENT_FUNDS,
|
"code",
|
||||||
"balance", TALER_JSON_from_amount (
|
(json_int_t) TALER_EC_WITHDRAW_INSUFFICIENT_FUNDS,
|
||||||
&balance),
|
"balance",
|
||||||
"history", json_history);
|
TALER_JSON_from_amount (&balance),
|
||||||
|
"history",
|
||||||
|
json_history);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -197,7 +199,7 @@ withdraw_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_DB_FETCH_ERROR,
|
TALER_EC_WITHDRAW_DB_FETCH_ERROR,
|
||||||
"failed to fetch withdraw data");
|
NULL);
|
||||||
wc->collectable.sig = denom_sig;
|
wc->collectable.sig = denom_sig;
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
@ -232,7 +234,7 @@ withdraw_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_DB_FETCH_ERROR,
|
TALER_EC_WITHDRAW_DB_FETCH_ERROR,
|
||||||
"failed to fetch reserve data");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
|
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
|
||||||
@ -240,7 +242,7 @@ withdraw_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_NOT_FOUND,
|
MHD_HTTP_NOT_FOUND,
|
||||||
TALER_EC_WITHDRAW_RESERVE_UNKNOWN,
|
TALER_EC_WITHDRAW_RESERVE_UNKNOWN,
|
||||||
"reserve_pub");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
if (0 < TALER_amount_cmp (&wc->amount_required,
|
if (0 < TALER_amount_cmp (&wc->amount_required,
|
||||||
@ -274,7 +276,7 @@ withdraw_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_DB_FETCH_ERROR,
|
TALER_EC_WITHDRAW_DB_FETCH_ERROR,
|
||||||
"failed to fetch reserve history");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
*mhd_ret = reply_withdraw_insufficient_funds (connection,
|
*mhd_ret = reply_withdraw_insufficient_funds (connection,
|
||||||
@ -299,7 +301,7 @@ withdraw_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_SIGNATURE_FAILED,
|
TALER_EC_WITHDRAW_SIGNATURE_FAILED,
|
||||||
"Failed to create blind signature");
|
NULL);
|
||||||
return GNUNET_DB_STATUS_HARD_ERROR;
|
return GNUNET_DB_STATUS_HARD_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,7 +321,7 @@ withdraw_transaction (void *cls,
|
|||||||
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
*mhd_ret = TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_DB_STORE_ERROR,
|
TALER_EC_WITHDRAW_DB_STORE_ERROR,
|
||||||
"failed to persist withdraw data");
|
NULL);
|
||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
return qs;
|
return qs;
|
||||||
@ -370,7 +372,7 @@ TEH_handler_withdraw (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_RESERVES_INVALID_RESERVE_PUB,
|
TALER_EC_RESERVES_INVALID_RESERVE_PUB,
|
||||||
"reserve public key malformed");
|
args[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -408,7 +410,7 @@ TEH_handler_withdraw (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
hc,
|
hc,
|
||||||
ec,
|
ec,
|
||||||
"could not find denomination key");
|
NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GNUNET_assert (NULL != wc.dki->denom_priv.rsa_private_key);
|
GNUNET_assert (NULL != wc.dki->denom_priv.rsa_private_key);
|
||||||
@ -430,7 +432,7 @@ TEH_handler_withdraw (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_AMOUNT_FEE_OVERFLOW,
|
TALER_EC_WITHDRAW_AMOUNT_FEE_OVERFLOW,
|
||||||
"amount overflow for value plus withdraw fee");
|
NULL);
|
||||||
}
|
}
|
||||||
TALER_amount_hton (&wc.wsrd.amount_with_fee,
|
TALER_amount_hton (&wc.wsrd.amount_with_fee,
|
||||||
&wc.amount_required);
|
&wc.amount_required);
|
||||||
@ -459,7 +461,7 @@ TEH_handler_withdraw (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_FORBIDDEN,
|
MHD_HTTP_FORBIDDEN,
|
||||||
TALER_EC_WITHDRAW_RESERVE_SIGNATURE_INVALID,
|
TALER_EC_WITHDRAW_RESERVE_SIGNATURE_INVALID,
|
||||||
"reserve_sig");
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OPTIMISTIC_SIGN
|
#if OPTIMISTIC_SIGN
|
||||||
@ -476,7 +478,7 @@ TEH_handler_withdraw (const struct TEH_RequestHandler *rh,
|
|||||||
return TALER_MHD_reply_with_error (connection,
|
return TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_WITHDRAW_SIGNATURE_FAILED,
|
TALER_EC_WITHDRAW_SIGNATURE_FAILED,
|
||||||
"Failed to sign");
|
NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -133,14 +133,14 @@ TALER_MHD_reply_json_pack (struct MHD_Connection *connection,
|
|||||||
* @param connection the MHD connection to use
|
* @param connection the MHD connection to use
|
||||||
* @param ec error code uniquely identifying the error
|
* @param ec error code uniquely identifying the error
|
||||||
* @param http_status HTTP status code to use
|
* @param http_status HTTP status code to use
|
||||||
* @param hint human readable hint about the error
|
* @param detail additional optional detail about the error
|
||||||
* @return a MHD result code
|
* @return a MHD result code
|
||||||
*/
|
*/
|
||||||
MHD_RESULT
|
MHD_RESULT
|
||||||
TALER_MHD_reply_with_error (struct MHD_Connection *connection,
|
TALER_MHD_reply_with_error (struct MHD_Connection *connection,
|
||||||
unsigned int http_status,
|
unsigned int http_status,
|
||||||
enum TALER_ErrorCode ec,
|
enum TALER_ErrorCode ec,
|
||||||
const char *hint);
|
const char *detail);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -169,12 +169,12 @@ TALER_MHD_make_json_pack (const char *fmt,
|
|||||||
* Create a response indicating an internal error.
|
* Create a response indicating an internal error.
|
||||||
*
|
*
|
||||||
* @param ec error code to return
|
* @param ec error code to return
|
||||||
* @param hint hint about the internal error's nature
|
* @param detail additional optional detail about the error, can be NULL
|
||||||
* @return a MHD response object
|
* @return a MHD response object
|
||||||
*/
|
*/
|
||||||
struct MHD_Response *
|
struct MHD_Response *
|
||||||
TALER_MHD_make_error (enum TALER_ErrorCode ec,
|
TALER_MHD_make_error (enum TALER_ErrorCode ec,
|
||||||
const char *hint);
|
const char *detail);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -651,7 +651,8 @@ TALER_JSON_get_error_hint (const json_t *json)
|
|||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
jc = json_object_get (json, "hint");
|
jc = json_object_get (json,
|
||||||
|
"hint");
|
||||||
if (NULL == jc)
|
if (NULL == jc)
|
||||||
return NULL; /* no hint, is allowed */
|
return NULL; /* no hint, is allowed */
|
||||||
if (! json_is_string (jc))
|
if (! json_is_string (jc))
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <gnunet/gnunet_json_lib.h>
|
#include <gnunet/gnunet_json_lib.h>
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#include <microhttpd.h>
|
#include <microhttpd.h>
|
||||||
|
#include "taler_util.h"
|
||||||
#include "taler_mhd_lib.h"
|
#include "taler_mhd_lib.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -76,11 +76,11 @@ TALER_MHD_parse_post_json (struct MHD_Connection *connection,
|
|||||||
case GNUNET_JSON_PR_OUT_OF_MEMORY:
|
case GNUNET_JSON_PR_OUT_OF_MEMORY:
|
||||||
GNUNET_break (NULL == *json);
|
GNUNET_break (NULL == *json);
|
||||||
return (MHD_NO ==
|
return (MHD_NO ==
|
||||||
TALER_MHD_reply_with_error
|
TALER_MHD_reply_with_error (
|
||||||
(connection,
|
connection,
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
TALER_EC_PARSER_OUT_OF_MEMORY,
|
TALER_EC_PARSER_OUT_OF_MEMORY,
|
||||||
"out of memory")) ? GNUNET_SYSERR : GNUNET_NO;
|
NULL)) ? GNUNET_SYSERR : GNUNET_NO;
|
||||||
|
|
||||||
case GNUNET_JSON_PR_CONTINUE:
|
case GNUNET_JSON_PR_CONTINUE:
|
||||||
GNUNET_break (NULL == *json);
|
GNUNET_break (NULL == *json);
|
||||||
@ -96,7 +96,7 @@ TALER_MHD_parse_post_json (struct MHD_Connection *connection,
|
|||||||
TALER_MHD_reply_with_error (connection,
|
TALER_MHD_reply_with_error (connection,
|
||||||
MHD_HTTP_BAD_REQUEST,
|
MHD_HTTP_BAD_REQUEST,
|
||||||
TALER_EC_JSON_INVALID,
|
TALER_EC_JSON_INVALID,
|
||||||
"invalid JSON uploaded"))
|
NULL))
|
||||||
? GNUNET_NO : GNUNET_SYSERR;
|
? GNUNET_NO : GNUNET_SYSERR;
|
||||||
case GNUNET_JSON_PR_SUCCESS:
|
case GNUNET_JSON_PR_SUCCESS:
|
||||||
GNUNET_break (NULL != *json);
|
GNUNET_break (NULL != *json);
|
||||||
@ -204,15 +204,15 @@ TALER_MHD_parse_json_data (struct MHD_Connection *connection,
|
|||||||
if (NULL == error_json_name)
|
if (NULL == error_json_name)
|
||||||
error_json_name = "<no field>";
|
error_json_name = "<no field>";
|
||||||
ret = (MHD_YES ==
|
ret = (MHD_YES ==
|
||||||
TALER_MHD_reply_json_pack (connection,
|
TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_BAD_REQUEST,
|
connection,
|
||||||
"{s:s, s:I, s:s, s:I}",
|
MHD_HTTP_BAD_REQUEST,
|
||||||
"hint", "JSON parse error",
|
"{s:s, s:I, s:s, s:I}",
|
||||||
"code",
|
"hint", TALER_ErrorCode_get_hint (
|
||||||
(json_int_t)
|
TALER_EC_JSON_INVALID_WITH_DETAILS),
|
||||||
TALER_EC_JSON_INVALID_WITH_DETAILS,
|
"code", (json_int_t) TALER_EC_JSON_INVALID_WITH_DETAILS,
|
||||||
"field", error_json_name,
|
"field", error_json_name,
|
||||||
"line", (json_int_t) error_line))
|
"line", (json_int_t) error_line))
|
||||||
? GNUNET_NO : GNUNET_SYSERR;
|
? GNUNET_NO : GNUNET_SYSERR;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -256,15 +256,15 @@ TALER_MHD_parse_internal_json_data (struct MHD_Connection *connection,
|
|||||||
if (NULL == error_json_name)
|
if (NULL == error_json_name)
|
||||||
error_json_name = "<no field>";
|
error_json_name = "<no field>";
|
||||||
ret = (MHD_YES ==
|
ret = (MHD_YES ==
|
||||||
TALER_MHD_reply_json_pack (connection,
|
TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
connection,
|
||||||
"{s:s, s:I, s:s, s:I}",
|
MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||||
"hint", "JSON parse error",
|
"{s:s, s:I, s:s, s:I}",
|
||||||
"code",
|
"hint", TALER_ErrorCode_get_hint (
|
||||||
(json_int_t)
|
TALER_EC_INTERNAL_INVARIANT_FAILURE),
|
||||||
TALER_EC_INTERNAL_INVARIANT_FAILURE,
|
"code", (json_int_t) TALER_EC_INTERNAL_INVARIANT_FAILURE,
|
||||||
"field", error_json_name,
|
"field", error_json_name,
|
||||||
"line", (json_int_t) error_line))
|
"line", (json_int_t) error_line))
|
||||||
? GNUNET_NO : GNUNET_SYSERR;
|
? GNUNET_NO : GNUNET_SYSERR;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -311,14 +311,15 @@ TALER_MHD_parse_json_array (struct MHD_Connection *connection,
|
|||||||
if (NULL == root)
|
if (NULL == root)
|
||||||
{
|
{
|
||||||
ret = (MHD_YES ==
|
ret = (MHD_YES ==
|
||||||
TALER_MHD_reply_json_pack (connection,
|
TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_BAD_REQUEST,
|
connection,
|
||||||
"{s:s, s:I, s:I}",
|
MHD_HTTP_BAD_REQUEST,
|
||||||
"hint", "expected array",
|
"{s:s, s:I, s:s, s:I}",
|
||||||
"code",
|
"hint", TALER_ErrorCode_get_hint (
|
||||||
(json_int_t)
|
TALER_EC_JSON_INVALID_WITH_DETAILS),
|
||||||
TALER_EC_JSON_INVALID_WITH_DETAILS,
|
"code", (json_int_t) TALER_EC_JSON_INVALID_WITH_DETAILS,
|
||||||
"dimension", dim))
|
"detail", "expected array",
|
||||||
|
"dimension", dim))
|
||||||
? GNUNET_NO : GNUNET_SYSERR;
|
? GNUNET_NO : GNUNET_SYSERR;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -331,14 +332,15 @@ TALER_MHD_parse_json_array (struct MHD_Connection *connection,
|
|||||||
if (NULL == error_json_name)
|
if (NULL == error_json_name)
|
||||||
error_json_name = "<no field>";
|
error_json_name = "<no field>";
|
||||||
ret = (MHD_YES ==
|
ret = (MHD_YES ==
|
||||||
TALER_MHD_reply_json_pack (connection,
|
TALER_MHD_reply_json_pack (
|
||||||
MHD_HTTP_BAD_REQUEST,
|
connection,
|
||||||
"{s:s, s:I, s:I}",
|
MHD_HTTP_BAD_REQUEST,
|
||||||
"hint", error_json_name,
|
"{s:s, s:s, s:I, s:I}",
|
||||||
"code",
|
"detail", error_json_name,
|
||||||
(json_int_t)
|
"hint", TALER_ErrorCode_get_hint (
|
||||||
TALER_EC_JSON_INVALID_WITH_DETAILS,
|
TALER_EC_JSON_INVALID_WITH_DETAILS),
|
||||||
"line", (json_int_t) error_line))
|
"code", (json_int_t) TALER_EC_JSON_INVALID_WITH_DETAILS,
|
||||||
|
"line", (json_int_t) error_line))
|
||||||
? GNUNET_NO : GNUNET_SYSERR;
|
? GNUNET_NO : GNUNET_SYSERR;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -404,16 +404,17 @@ TALER_MHD_make_json_pack (const char *fmt,
|
|||||||
* Create a response indicating an internal error.
|
* Create a response indicating an internal error.
|
||||||
*
|
*
|
||||||
* @param ec error code to return
|
* @param ec error code to return
|
||||||
* @param hint hint about the internal error's nature
|
* @param detail additional optional detail about the error, can be NULL
|
||||||
* @return a MHD response object
|
* @return a MHD response object
|
||||||
*/
|
*/
|
||||||
struct MHD_Response *
|
struct MHD_Response *
|
||||||
TALER_MHD_make_error (enum TALER_ErrorCode ec,
|
TALER_MHD_make_error (enum TALER_ErrorCode ec,
|
||||||
const char *hint)
|
const char *detail)
|
||||||
{
|
{
|
||||||
return TALER_MHD_make_json_pack ("{s:I, s:s}",
|
return TALER_MHD_make_json_pack ("{s:I, s:s, s:s?}",
|
||||||
"code", (json_int_t) ec,
|
"code", (json_int_t) ec,
|
||||||
"hint", hint);
|
"hint", TALER_ErrorCode_get_hint (ec),
|
||||||
|
"detail", detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -423,20 +424,21 @@ TALER_MHD_make_error (enum TALER_ErrorCode ec,
|
|||||||
* @param connection the MHD connection to use
|
* @param connection the MHD connection to use
|
||||||
* @param ec error code uniquely identifying the error
|
* @param ec error code uniquely identifying the error
|
||||||
* @param http_status HTTP status code to use
|
* @param http_status HTTP status code to use
|
||||||
* @param hint human readable hint about the error
|
* @param detail additional optional detail about the error, can be NULL
|
||||||
* @return a MHD result code
|
* @return a MHD result code
|
||||||
*/
|
*/
|
||||||
MHD_RESULT
|
MHD_RESULT
|
||||||
TALER_MHD_reply_with_error (struct MHD_Connection *connection,
|
TALER_MHD_reply_with_error (struct MHD_Connection *connection,
|
||||||
unsigned int http_status,
|
unsigned int http_status,
|
||||||
enum TALER_ErrorCode ec,
|
enum TALER_ErrorCode ec,
|
||||||
const char *hint)
|
const char *detail)
|
||||||
{
|
{
|
||||||
return TALER_MHD_reply_json_pack (connection,
|
return TALER_MHD_reply_json_pack (connection,
|
||||||
http_status,
|
http_status,
|
||||||
"{s:I, s:s}",
|
"{s:I, s:s, s:s?}",
|
||||||
"code", (json_int_t) ec,
|
"code", (json_int_t) ec,
|
||||||
"hint", hint);
|
"hint", TALER_ErrorCode_get_hint (ec),
|
||||||
|
"detail", detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user