summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c
diff options
context:
space:
mode:
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.c116
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);