diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_post-tips-ID-pickup.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_post-tips-ID-pickup.c | 116 |
1 files changed, 83 insertions, 33 deletions
diff --git a/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c b/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c index 79c58632..29b8f13e 100644 --- a/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c +++ b/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c @@ -292,7 +292,7 @@ withdraw_cb (void *cls, pc->response = TALER_MHD_make_json_pack ( "{s:I, s:I, s:I, s:O}", - "code", (json_int_t) TALER_EC_TIP_PICKUP_EXCHANGE_ERROR, + "code", (json_int_t) TALER_EC_MERCHANT_TIP_PICKUP_EXCHANGE_ERROR, "exchange_code", (json_int_t) hr->ec, "exchange_http_status", (json_int_t) hr->http_status, "exchange_reply", hr->reply); @@ -309,8 +309,8 @@ withdraw_cb (void *cls, stop_operations (pc); pc->http_status = MHD_HTTP_INTERNAL_SERVER_ERROR; pc->response = TALER_MHD_make_error ( - TALER_EC_TIP_PICKUP_DB_STORE_HARD_ERROR, - "Could not store blind signature in DB"); + TALER_EC_GENERIC_DB_STORE_FAILED, + "blind signature"); MHD_resume_connection (pc->connection); TMH_trigger_daemon (); /* we resumed, kick MHD */ return; @@ -348,17 +348,37 @@ do_withdraw (void *cls, struct PickupContext *pc = po->pc; po->fo = NULL; + if (NULL == hr) + { + stop_operations (pc); + GNUNET_CONTAINER_DLL_remove (pc->po_head, + pc->po_tail, + po); + pc->http_status = MHD_HTTP_GATEWAY_TIMEOUT; + pc->response = TALER_MHD_make_json_pack ( + "{s:s, s:I}", + "hint", + TALER_ErrorCode_get_hint ( + TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT), + "code", + (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT); + MHD_resume_connection (pc->connection); + TMH_trigger_daemon (); /* we resumed, kick MHD */ + return; + } if (NULL == eh) { stop_operations (pc); GNUNET_CONTAINER_DLL_remove (pc->po_head, pc->po_tail, po); - pc->http_status = MHD_HTTP_FAILED_DEPENDENCY; + pc->http_status = MHD_HTTP_BAD_GATEWAY; pc->response = TALER_MHD_make_json_pack ( - "{s:I, s:I, s:I, s:O}", - "code", (json_int_t) TALER_EC_TIP_PICKUP_CONTACT_EXCHANGE_ERROR, + "{s:s, s:I, s:I, s:I, s:O?}", + "hint", TALER_ErrorCode_get_hint ( + TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE), + "code", (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE, "exchange_code", (json_int_t) hr->ec, "exchange_http_status", (json_int_t) hr->http_status, "exchange_reply", hr->reply); @@ -422,10 +442,10 @@ do_timeout (void *cls) pc->tt = NULL; stop_operations (pc); - pc->http_status = MHD_HTTP_REQUEST_TIMEOUT; + pc->http_status = MHD_HTTP_GATEWAY_TIMEOUT; pc->response = TALER_MHD_make_error ( - TALER_EC_TIP_PICKUP_EXCHANGE_TIMEOUT, - "Timeout trying to withdraw from exchange (try again later)"); + TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT, + NULL); MHD_resume_connection (pc->connection); TMH_trigger_daemon (); /* we resumed, kick MHD */ } @@ -457,14 +477,43 @@ compute_total_requested (void *cls, pc->fo = NULL; stop_operations (pc); /* stops timeout job */ - if ( (NULL == eh) || - (NULL == (keys = TALER_EXCHANGE_get_keys (eh))) ) + if (NULL == hr) { - pc->http_status = MHD_HTTP_FAILED_DEPENDENCY; + pc->http_status = MHD_HTTP_GATEWAY_TIMEOUT; + pc->response = TALER_MHD_make_json_pack ( + "{s:I, s:s}", + "code", (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT, + "hint", TALER_ErrorCode_get_hint ( + TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT)); + MHD_resume_connection (pc->connection); + TMH_trigger_daemon (); /* we resumed, kick MHD */ + return; + } + if (NULL == eh) + { + pc->http_status = MHD_HTTP_BAD_GATEWAY; pc->response = TALER_MHD_make_json_pack ( - "{s:I, s:I, s:I, s:O}", - "code", (json_int_t) TALER_EC_TIP_PICKUP_EXCHANGE_KEYS_ERROR, + "{s:I, s:s, s:I, s:I, s:O}", + "code", (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE, + "hint", TALER_ErrorCode_get_hint ( + TALER_EC_MERCHANT_GENERIC_EXCHANGE_CONNECT_FAILURE), + "exchange_code", (json_int_t) hr->ec, + "exchange_http_status", (json_int_t) hr->http_status, + "exchange_reply", hr->reply); + MHD_resume_connection (pc->connection); + TMH_trigger_daemon (); /* we resumed, kick MHD */ + return; + } + if (NULL == (keys = TALER_EXCHANGE_get_keys (eh))) + { + pc->http_status = MHD_HTTP_BAD_GATEWAY; + pc->response = + TALER_MHD_make_json_pack ( + "{s:I, s:s, s:I, s:I, s:O}", + "code", (json_int_t) TALER_EC_MERCHANT_GENERIC_EXCHANGE_KEYS_FAILURE, + "hint", TALER_ErrorCode_get_hint ( + TALER_EC_MERCHANT_GENERIC_EXCHANGE_KEYS_FAILURE), "exchange_code", (json_int_t) hr->ec, "exchange_http_status", (json_int_t) hr->http_status, "exchange_reply", hr->reply); @@ -488,7 +537,8 @@ compute_total_requested (void *cls, pc->response = TALER_MHD_make_json_pack ( "{s:I, s:I, s:I, s:O}", - "code", (json_int_t) TALER_EC_TIP_PICKUP_DENOMINATION_UNKNOWN, + "code", + (json_int_t) TALER_EC_MERCHANT_TIP_PICKUP_DENOMINATION_UNKNOWN, "exchange_code", (json_int_t) hr->ec, "exchange_http_status", (json_int_t) hr->http_status, "exchange_reply", hr->reply); @@ -507,7 +557,7 @@ compute_total_requested (void *cls, { pc->http_status = MHD_HTTP_BAD_REQUEST; pc->response = - TALER_MHD_make_error (TALER_EC_TIP_PICKUP_SUMMATION_FAILED, + TALER_MHD_make_error (TALER_EC_MERCHANT_TIP_PICKUP_SUMMATION_FAILED, "Could not add up values to compute pickup total"); MHD_resume_connection (pc->connection); TMH_trigger_daemon (); /* we resumed, kick MHD */ @@ -538,20 +588,20 @@ reply_lookup_tip_failed (struct MHD_Connection *connection, switch (qs) { case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: - ec = TALER_EC_TIP_PICKUP_TIP_ID_UNKNOWN; + ec = TALER_EC_MERCHANT_GENERIC_TIP_ID_UNKNOWN; response_code = MHD_HTTP_NOT_FOUND; break; case GNUNET_DB_STATUS_SOFT_ERROR: - ec = TALER_EC_TIP_PICKUP_DB_ERROR_SOFT; + ec = TALER_EC_GENERIC_DB_SOFT_FAILURE; response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; break; case GNUNET_DB_STATUS_HARD_ERROR: - ec = TALER_EC_TIP_PICKUP_DB_ERROR_HARD; + ec = TALER_EC_GENERIC_DB_COMMIT_FAILED; response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; break; default: GNUNET_break (0); - ec = TALER_EC_INTERNAL_LOGIC_ERROR; + ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE; response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; break; } @@ -604,7 +654,7 @@ TMH_post_tips_ID_pickup (const struct TMH_RequestHandler *rh, GNUNET_break_op (0); return TALER_MHD_reply_with_error (connection, MHD_HTTP_BAD_REQUEST, - TALER_EC_PARAMETER_MALFORMED, + TALER_EC_GENERIC_PARAMETER_MALFORMED, hc->infix); } @@ -632,7 +682,7 @@ TMH_post_tips_ID_pickup (const struct TMH_RequestHandler *rh, json_decref (planchets); return TALER_MHD_reply_with_error (connection, MHD_HTTP_BAD_REQUEST, - TALER_EC_PARAMETER_MALFORMED, + TALER_EC_GENERIC_PARAMETER_MALFORMED, "planchets"); } @@ -735,7 +785,7 @@ RETRY: GNUNET_break (0); return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_TIP_PICKUP_DB_ERROR_SOFT, + TALER_EC_GENERIC_DB_SOFT_FAILURE, NULL); } if (GNUNET_OK != @@ -745,7 +795,7 @@ RETRY: GNUNET_break (0); return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_TIP_PICKUP_DB_ERROR_HARD, + TALER_EC_GENERIC_DB_START_FAILED, NULL); } { @@ -827,12 +877,12 @@ RETRY: goto RETRY; break; case GNUNET_DB_STATUS_HARD_ERROR: - ec = TALER_EC_TIP_PICKUP_DB_ERROR_HARD; + ec = TALER_EC_GENERIC_DB_FETCH_FAILED; response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; break; default: GNUNET_break (0); - ec = TALER_EC_INTERNAL_LOGIC_ERROR; + ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE; response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; break; } @@ -861,7 +911,7 @@ RETRY: TMH_db->rollback (TMH_db->cls); return TALER_MHD_reply_with_error (connection, MHD_HTTP_GONE, - TALER_EC_TIP_PICKUP_HAS_EXPIRED, + TALER_EC_MERCHANT_TIP_PICKUP_HAS_EXPIRED, hc->infix); } if (0 > @@ -873,8 +923,8 @@ RETRY: TMH_db->rollback (TMH_db->cls); return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_INTERNAL_LOGIC_ERROR, - hc->infix); + TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE, + "picked up amount exceeds authorized amount"); } if (0 > @@ -885,7 +935,7 @@ RETRY: TMH_db->rollback (TMH_db->cls); return TALER_MHD_reply_with_error (connection, MHD_HTTP_BAD_REQUEST, - TALER_EC_TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING, + TALER_EC_MERCHANT_TIP_PICKUP_AMOUNT_EXCEEDS_TIP_REMAINING, hc->infix); } @@ -906,8 +956,8 @@ RETRY: goto RETRY; return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_TIP_PICKUP_DB_STORE_HARD_ERROR, - NULL); + TALER_EC_GENERIC_DB_STORE_FAILED, + "pickup"); } qs = TMH_db->commit (TMH_db->cls); if (qs < 0) @@ -917,7 +967,7 @@ RETRY: goto RETRY; return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_TIP_PICKUP_DB_STORE_HARD_ERROR, + TALER_EC_GENERIC_DB_COMMIT_FAILED, NULL); } MHD_suspend_connection (connection); |