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

View File

@ -32,13 +32,13 @@
/** /**
* Closure for #handle_transfer_data(). * Closure for #handle_link_data().
*/ */
struct HTD_Context 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; struct TALER_CoinSpendPublicKeyP coin_pub;
@ -70,10 +70,9 @@ handle_link_data (void *cls,
{ {
struct HTD_Context *ctx = cls; struct HTD_Context *ctx = cls;
json_t *list; json_t *list;
json_t *root;
if (NULL == ctx->mlist) if (NULL == ctx->mlist)
return; return; /* we failed earlier */
if (NULL == (list = json_array ())) if (NULL == (list = json_array ()))
goto fail; goto fail;
@ -101,6 +100,9 @@ handle_link_data (void *cls,
goto fail; goto fail;
} }
} }
{
json_t *root;
root = json_pack ("{s:o, s:o}", root = json_pack ("{s:o, s:o}",
"new_coins", "new_coins",
list, list,
@ -111,6 +113,7 @@ handle_link_data (void *cls,
json_array_append_new (ctx->mlist, json_array_append_new (ctx->mlist,
root)) ) root)) )
goto fail; goto fail;
}
return; return;
fail: fail:
ctx->ec = TALER_EC_JSON_ALLOCATION_FAILURE; ctx->ec = TALER_EC_JSON_ALLOCATION_FAILURE;
@ -120,15 +123,13 @@ fail:
/** /**
* Execute a "/refresh/link". Returns the linkage information that * Execute a link operation. Returns the linkage information that will allow
* will allow the owner of a coin to follow the refresh trail to * the owner of a coin to follow the trail to the refreshed coin.
* the refreshed coin.
* *
* If it returns a non-error code, the transaction logic MUST * If it returns a non-error code, the transaction logic MUST NOT queue a MHD
* NOT queue a MHD response. IF it returns an hard error, the * response. IF it returns an hard error, the transaction logic MUST queue a
* transaction logic MUST queue a MHD response and set @a mhd_ret. IF * MHD response and set @a mhd_ret. IF it returns the soft error code, the
* it returns the soft error code, the function MAY be called again to * function MAY be called again to retry and MUST not queue a MHD response.
* retry and MUST not queue a MHD response.
* *
* @param cls closure * @param cls closure
* @param connection MHD request which triggered the transaction * @param connection MHD request which triggered the transaction
@ -138,7 +139,7 @@ fail:
* @return transaction status * @return transaction status
*/ */
static enum GNUNET_DB_QueryStatus static enum GNUNET_DB_QueryStatus
refresh_link_transaction (void *cls, link_transaction (void *cls,
struct MHD_Connection *connection, struct MHD_Connection *connection,
struct TALER_EXCHANGEDB_Session *session, struct TALER_EXCHANGEDB_Session *session,
int *mhd_ret) int *mhd_ret)
@ -204,11 +205,19 @@ TEH_handler_link (const struct TEH_RequestHandler *rh,
"coin public key malformed"); "coin public key malformed");
} }
ctx.mlist = json_array (); 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 != if (GNUNET_OK !=
TEH_DB_run_transaction (connection, TEH_DB_run_transaction (connection,
"run link", "run link",
&mhd_ret, &mhd_ret,
&refresh_link_transaction, &link_transaction,
&ctx)) &ctx))
{ {
if (NULL != ctx.mlist) 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.h"
#include "taler-exchange-httpd_mhd.h" #include "taler-exchange-httpd_mhd.h"
/** /**
* Function to call to handle the request by sending * Function to call to handle the request by sending
* back static data from the @a rh. * back static data from the @a rh.
@ -48,7 +49,6 @@ TEH_handler_static_response (const struct TEH_RequestHandler *rh,
const char *const args[]) const char *const args[])
{ {
struct MHD_Response *response; struct MHD_Response *response;
int ret;
size_t dlen; size_t dlen;
(void) args; (void) args;
@ -68,11 +68,15 @@ TEH_handler_static_response (const struct TEH_RequestHandler *rh,
(void) MHD_add_response_header (response, (void) MHD_add_response_header (response,
MHD_HTTP_HEADER_CONTENT_TYPE, MHD_HTTP_HEADER_CONTENT_TYPE,
rh->mime_type); rh->mime_type);
{
int ret;
ret = MHD_queue_response (connection, ret = MHD_queue_response (connection,
rh->response_code, rh->response_code,
response); response);
MHD_destroy_response (response); MHD_destroy_response (response);
return ret; return ret;
}
} }

View File

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

View File

@ -42,8 +42,8 @@
* @return json representation of the @a rh, NULL on error * @return json representation of the @a rh, NULL on error
*/ */
json_t * json_t *
TEH_RESPONSE_compile_reserve_history (const struct TEH_RESPONSE_compile_reserve_history (
TALER_EXCHANGEDB_ReserveHistory *rh, const struct TALER_EXCHANGEDB_ReserveHistory *rh,
struct TALER_Amount *balance); struct TALER_Amount *balance);
@ -60,12 +60,11 @@ TEH_RESPONSE_compile_reserve_history (const struct
* @return MHD result code * @return MHD result code
*/ */
int int
TEH_RESPONSE_reply_coin_insufficient_funds (struct MHD_Connection *connection, TEH_RESPONSE_reply_coin_insufficient_funds (
struct MHD_Connection *connection,
enum TALER_ErrorCode ec, enum TALER_ErrorCode ec,
const struct const struct TALER_CoinSpendPublicKeyP *coin_pub,
TALER_CoinSpendPublicKeyP *coin_pub, const struct TALER_EXCHANGEDB_TransactionList *tl);
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 * @return json representation of the @a rh, NULL on error
*/ */
json_t * json_t *
TEH_RESPONSE_compile_transaction_history (const struct TEH_RESPONSE_compile_transaction_history (
TALER_CoinSpendPublicKeyP *coin_pub, const struct TALER_CoinSpendPublicKeyP *coin_pub,
const struct const struct TALER_EXCHANGEDB_TransactionList *tl);
TALER_EXCHANGEDB_TransactionList *tl);
#endif #endif