diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-post-reserves.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_private-post-reserves.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/backend/taler-merchant-httpd_private-post-reserves.c b/src/backend/taler-merchant-httpd_private-post-reserves.c index a6008f32..4001badd 100644 --- a/src/backend/taler-merchant-httpd_private-post-reserves.c +++ b/src/backend/taler-merchant-httpd_private-post-reserves.c @@ -229,7 +229,6 @@ handle_exchange (void *cls, } rc->suspended = GNUNET_NO; MHD_resume_connection (rc->connection); - TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ GNUNET_CONTAINER_DLL_remove (rc_head, rc_tail, rc); @@ -237,18 +236,22 @@ handle_exchange (void *cls, { rc->ec = TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT; rc->http_status = MHD_HTTP_GATEWAY_TIMEOUT; + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ return; } if (NULL == eh) { rc->ec = TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE; rc->http_status = MHD_HTTP_BAD_GATEWAY; + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ return; } if (MHD_HTTP_OK != hr->http_status) { + GNUNET_assert (TALER_EC_NONE != hr->ec); rc->ec = hr->ec; rc->http_status = hr->http_status; + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ return; } keys = TALER_EXCHANGE_get_keys (eh); @@ -256,6 +259,7 @@ handle_exchange (void *cls, { rc->ec = TALER_EC_MERCHANT_GENERIC_EXCHANGE_KEYS_FAILURE; rc->http_status = MHD_HTTP_BAD_GATEWAY; + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ return; } rc->master_pub = keys->master_pub; @@ -267,17 +271,20 @@ handle_exchange (void *cls, { rc->ec = TALER_EC_GENERIC_DB_FETCH_FAILED; rc->http_status = MHD_HTTP_CONFLICT; + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ return; } if (0 == json_array_size (rc->accounts)) { rc->ec = TALER_EC_MERCHANT_PRIVATE_POST_RESERVES_UNSUPPORTED_WIRE_METHOD; rc->http_status = MHD_HTTP_CONFLICT; + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ return; } } rc->reserve_expiration = GNUNET_TIME_relative_to_timestamp (keys->reserve_closing_delay); + TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */ } @@ -321,17 +328,13 @@ TMH_private_post_reserves (const struct TMH_RequestHandler *rh, GNUNET_assert (NULL != mi); if (NULL == rc) { - rc = GNUNET_new (struct PostReserveContext); rc->connection = connection; rc->hc = hc; - rc->accounts = json_array (); - GNUNET_assert (NULL != rc->accounts); hc->ctx = rc; hc->cc = &reserve_context_cleanup; { - enum GNUNET_GenericReturnValue res; struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_string ("exchange_url", &rc->exchange_url), @@ -342,6 +345,8 @@ TMH_private_post_reserves (const struct TMH_RequestHandler *rh, &rc->initial_balance), GNUNET_JSON_spec_end () }; + enum GNUNET_GenericReturnValue res; + res = TALER_MHD_parse_json_data (connection, hc->request_body, spec); @@ -375,6 +380,8 @@ TMH_private_post_reserves (const struct TMH_RequestHandler *rh, NULL); } GNUNET_assert (GNUNET_NO == rc->suspended); + GNUNET_assert (! GNUNET_TIME_absolute_is_zero ( + rc->reserve_expiration.abs_time)); { struct TALER_ReservePublicKeyP reserve_pub; struct TALER_ReservePrivateKeyP reserve_priv; @@ -406,8 +413,8 @@ TMH_private_post_reserves (const struct TMH_RequestHandler *rh, MHD_HTTP_OK, GNUNET_JSON_pack_data_auto ("reserve_pub", &reserve_pub), - GNUNET_JSON_pack_array_steal ("accounts", - rc->accounts)); + GNUNET_JSON_pack_array_incref ("accounts", + rc->accounts)); } } |