clean up link logic

This commit is contained in:
Christian Grothoff 2020-03-15 22:24:15 +01:00
parent f29a7e3155
commit efdc91ead4
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
5 changed files with 71 additions and 62 deletions

View File

@ -701,7 +701,7 @@ handle_mhd_request (void *cls,
* @return #GNUNET_OK on success
*/
static int
exchange_serve_process_config ()
exchange_serve_process_config (void)
{
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_number (TEH_cfg,
@ -812,7 +812,7 @@ exchange_serve_process_config ()
* stats if requested.
*/
static void
write_stats ()
write_stats (void)
{
struct GNUNET_DISK_FileHandle *fh;
pid_t pid = getpid ();

View File

@ -32,13 +32,13 @@
/**
* Closure for #handle_transfer_data().
* Closure for #handle_link_data().
*/
struct HTD_Context
{
/**
* Public key of the coin for which we are running /refresh/link.
* Public key of the coin for which we are running link.
*/
struct TALER_CoinSpendPublicKeyP coin_pub;
@ -70,10 +70,9 @@ handle_link_data (void *cls,
{
struct HTD_Context *ctx = cls;
json_t *list;
json_t *root;
if (NULL == ctx->mlist)
return;
return; /* we failed earlier */
if (NULL == (list = json_array ()))
goto fail;
@ -101,16 +100,20 @@ handle_link_data (void *cls,
goto fail;
}
}
root = json_pack ("{s:o, s:o}",
"new_coins",
list,
"transfer_pub",
GNUNET_JSON_from_data_auto (transfer_pub));
if ( (NULL == root) ||
(0 !=
json_array_append_new (ctx->mlist,
root)) )
goto fail;
{
json_t *root;
root = json_pack ("{s:o, s:o}",
"new_coins",
list,
"transfer_pub",
GNUNET_JSON_from_data_auto (transfer_pub));
if ( (NULL == root) ||
(0 !=
json_array_append_new (ctx->mlist,
root)) )
goto fail;
}
return;
fail:
ctx->ec = TALER_EC_JSON_ALLOCATION_FAILURE;
@ -120,15 +123,13 @@ fail:
/**
* Execute a "/refresh/link". Returns the linkage information that
* will allow the owner of a coin to follow the refresh trail to
* the refreshed coin.
* Execute a link operation. Returns the linkage information that will allow
* the owner of a coin to follow the trail to the refreshed coin.
*
* If it returns a non-error code, the transaction logic MUST
* NOT queue a MHD response. IF it returns an hard error, the
* transaction logic MUST queue a MHD response and set @a mhd_ret. IF
* it returns the soft error code, the function MAY be called again to
* retry and MUST not queue a MHD response.
* If it returns a non-error code, the transaction logic MUST NOT queue a MHD
* response. IF it returns an hard error, the transaction logic MUST queue a
* MHD response and set @a mhd_ret. IF it returns the soft error code, the
* function MAY be called again to retry and MUST not queue a MHD response.
*
* @param cls closure
* @param connection MHD request which triggered the transaction
@ -138,10 +139,10 @@ fail:
* @return transaction status
*/
static enum GNUNET_DB_QueryStatus
refresh_link_transaction (void *cls,
struct MHD_Connection *connection,
struct TALER_EXCHANGEDB_Session *session,
int *mhd_ret)
link_transaction (void *cls,
struct MHD_Connection *connection,
struct TALER_EXCHANGEDB_Session *session,
int *mhd_ret)
{
struct HTD_Context *ctx = cls;
enum GNUNET_DB_QueryStatus qs;
@ -204,11 +205,19 @@ TEH_handler_link (const struct TEH_RequestHandler *rh,
"coin public key malformed");
}
ctx.mlist = json_array ();
if (NULL == ctx.mlist)
{
GNUNET_break (0);
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_JSON_ALLOCATION_FAILURE,
"json_array() call failed");
}
if (GNUNET_OK !=
TEH_DB_run_transaction (connection,
"run link",
&mhd_ret,
&refresh_link_transaction,
&link_transaction,
&ctx))
{
if (NULL != ctx.mlist)
@ -223,4 +232,4 @@ TEH_handler_link (const struct TEH_RequestHandler *rh,
}
/* end of taler-exchange-httpd_refresh_link.c */
/* end of taler-exchange-httpd_link.c */

View File

@ -33,6 +33,7 @@
#include "taler-exchange-httpd.h"
#include "taler-exchange-httpd_mhd.h"
/**
* Function to call to handle the request by sending
* back static data from the @a rh.
@ -48,7 +49,6 @@ TEH_handler_static_response (const struct TEH_RequestHandler *rh,
const char *const args[])
{
struct MHD_Response *response;
int ret;
size_t dlen;
(void) args;
@ -68,11 +68,15 @@ TEH_handler_static_response (const struct TEH_RequestHandler *rh,
(void) MHD_add_response_header (response,
MHD_HTTP_HEADER_CONTENT_TYPE,
rh->mime_type);
ret = MHD_queue_response (connection,
rh->response_code,
response);
MHD_destroy_response (response);
return ret;
{
int ret;
ret = MHD_queue_response (connection,
rh->response_code,
response);
MHD_destroy_response (response);
return ret;
}
}

View File

@ -39,10 +39,9 @@
* @return json representation of the @a rh, NULL on error
*/
json_t *
TEH_RESPONSE_compile_transaction_history (const struct
TALER_CoinSpendPublicKeyP *coin_pub,
const struct
TALER_EXCHANGEDB_TransactionList *tl)
TEH_RESPONSE_compile_transaction_history (
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_EXCHANGEDB_TransactionList *tl)
{
json_t *history;
@ -421,12 +420,11 @@ TEH_RESPONSE_compile_transaction_history (const struct
* @return MHD result code
*/
int
TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection,
enum TALER_ErrorCode ec,
const struct
TALER_CoinSpendPublicKeyP *coin_pub,
const struct
TALER_EXCHANGEDB_TransactionList *tl)
TEH_RESPONSE_reply_coin_insufficient_funds (
struct MHD_Connection *connection,
enum TALER_ErrorCode ec,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_EXCHANGEDB_TransactionList *tl)
{
json_t *history;
@ -458,9 +456,9 @@ TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection,
* @return json representation of the @a rh, NULL on error
*/
json_t *
TEH_RESPONSE_compile_reserve_history (const struct
TALER_EXCHANGEDB_ReserveHistory *rh,
struct TALER_Amount *balance)
TEH_RESPONSE_compile_reserve_history (
const struct TALER_EXCHANGEDB_ReserveHistory *rh,
struct TALER_Amount *balance)
{
struct TALER_Amount deposit_total;
struct TALER_Amount withdraw_total;

View File

@ -42,9 +42,9 @@
* @return json representation of the @a rh, NULL on error
*/
json_t *
TEH_RESPONSE_compile_reserve_history (const struct
TALER_EXCHANGEDB_ReserveHistory *rh,
struct TALER_Amount *balance);
TEH_RESPONSE_compile_reserve_history (
const struct TALER_EXCHANGEDB_ReserveHistory *rh,
struct TALER_Amount *balance);
/**
@ -60,12 +60,11 @@ TEH_RESPONSE_compile_reserve_history (const struct
* @return MHD result code
*/
int
TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection,
enum TALER_ErrorCode ec,
const struct
TALER_CoinSpendPublicKeyP *coin_pub,
const struct
TALER_EXCHANGEDB_TransactionList *tl);
TEH_RESPONSE_reply_coin_insufficient_funds (
struct MHD_Connection *connection,
enum TALER_ErrorCode ec,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_EXCHANGEDB_TransactionList *tl);
/**
@ -76,10 +75,9 @@ TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection,
* @return json representation of the @a rh, NULL on error
*/
json_t *
TEH_RESPONSE_compile_transaction_history (const struct
TALER_CoinSpendPublicKeyP *coin_pub,
const struct
TALER_EXCHANGEDB_TransactionList *tl);
TEH_RESPONSE_compile_transaction_history (
const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct TALER_EXCHANGEDB_TransactionList *tl);
#endif