summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_private-post-reserves.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-post-reserves.c')
-rw-r--r--src/backend/taler-merchant-httpd_private-post-reserves.c21
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));
}
}