summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-11-11 20:04:13 +0100
committerChristian Grothoff <christian@grothoff.org>2019-11-11 20:04:13 +0100
commit4170ac40d66b19b73913afdbf71bdfa33ac94e2f (patch)
treebeef94241480838928d395d51d54eb08554ec047 /src
parent5379d577ff6f674fcfb080425bf5a8a42dd2b1c0 (diff)
downloadmerchant-4170ac40d66b19b73913afdbf71bdfa33ac94e2f.tar.gz
merchant-4170ac40d66b19b73913afdbf71bdfa33ac94e2f.tar.bz2
merchant-4170ac40d66b19b73913afdbf71bdfa33ac94e2f.zip
contract can change between suspend and resume, fetch it again
Diffstat (limited to 'src')
-rw-r--r--src/backend/taler-merchant-httpd_check-payment.c66
1 files changed, 34 insertions, 32 deletions
diff --git a/src/backend/taler-merchant-httpd_check-payment.c b/src/backend/taler-merchant-httpd_check-payment.c
index 260f3310..31e24d31 100644
--- a/src/backend/taler-merchant-httpd_check-payment.c
+++ b/src/backend/taler-merchant-httpd_check-payment.c
@@ -434,41 +434,43 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
"Starting /check-payment processing with timeout %s\n",
GNUNET_STRINGS_absolute_time_to_string (
cprc->sc.long_poll_timeout));
- db->preflight (db->cls);
- qs = db->find_contract_terms (db->cls,
- &cprc->contract_terms,
- cprc->order_id,
- &mi->pubkey);
- if (0 > qs)
- {
- /* single, read-only SQL statements should never cause
- serialization problems */
- GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
- /* Always report on hard error as well to enable diagnostics */
- GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
- return TMH_RESPONSE_reply_internal_error (connection,
- TALER_EC_CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR,
- "db error fetching contract terms");
- }
-
- if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
- {
- /* Check that we're at least aware of the order */
- return check_order_and_request_payment (cprc);
- }
- GNUNET_assert (NULL != cprc->contract_terms);
+ }
+ if (NULL != cprc->contract_terms)
+ {
+ json_decref (cprc->contract_terms);
+ cprc->contract_terms = NULL;
+ }
+ db->preflight (db->cls);
+ qs = db->find_contract_terms (db->cls,
+ &cprc->contract_terms,
+ cprc->order_id,
+ &mi->pubkey);
+ if (0 > qs)
+ {
+ /* single, read-only SQL statements should never cause
+ serialization problems */
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
+ /* Always report on hard error as well to enable diagnostics */
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ return TMH_RESPONSE_reply_internal_error (connection,
+ TALER_EC_CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR,
+ "db error fetching contract terms");
+ }
- if (GNUNET_OK !=
- parse_contract_terms (cprc))
- return cprc->ret;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Order `%s' matches contract %s\n",
- cprc->order_id,
- GNUNET_h2s (&cprc->h_contract_terms));
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ /* Check that we're at least aware of the order */
+ return check_order_and_request_payment (cprc);
}
+ GNUNET_assert (NULL != cprc->contract_terms);
+
+ if (GNUNET_OK !=
+ parse_contract_terms (cprc))
+ return cprc->ret;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Checking payment status for order `%s'\n",
- cprc->order_id);
+ "Checkig payment status for order `%s' with contract %s\n",
+ cprc->order_id,
+ GNUNET_h2s (&cprc->h_contract_terms));
GNUNET_assert (NULL != cprc->contract_terms);
/* Check if the order has been paid for. */