aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-07-28 15:39:28 +0200
committerChristian Grothoff <christian@grothoff.org>2019-07-28 15:39:28 +0200
commit5b2efa2b0694f2e1d16af15c7c47cbd26f7c64c1 (patch)
treee7ecdf583e74612b5bec4718678b2f4beee5b996
parentfbf94ee666c5958dcac63363330590ccadc73be8 (diff)
fixing #5767
-rw-r--r--src/auditor/taler-auditor-httpd_deposit-confirmation.c16
-rw-r--r--src/auditor/taler-auditor-httpd_parsing.c2
-rw-r--r--src/exchange/taler-exchange-httpd_deposit.c4
-rw-r--r--src/lib/auditor_api_deposit_confirmation.c55
-rw-r--r--src/lib/auditor_api_handle.c24
-rw-r--r--src/lib/exchange_api_common.c10
-rw-r--r--src/lib/exchange_api_deposit.c8
-rw-r--r--src/lib/teah_common.c7
-rw-r--r--src/lib/test_auditor_api.c20
-rw-r--r--src/lib/testing_api_cmd_deposit.c51
-rw-r--r--src/lib/testing_auditor_api_cmd_deposit_confirmation.c89
11 files changed, 156 insertions, 130 deletions
diff --git a/src/auditor/taler-auditor-httpd_deposit-confirmation.c b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
index a3d03baf2..af86378cd 100644
--- a/src/auditor/taler-auditor-httpd_deposit-confirmation.c
+++ b/src/auditor/taler-auditor-httpd_deposit-confirmation.c
@@ -153,7 +153,7 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
{
TALER_LOG_WARNING ("Invalid signature on exchange signing key\n");
return TAH_RESPONSE_reply_signature_invalid (connection,
- TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
+ TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
"master_sig");
}
@@ -161,9 +161,9 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
if (GNUNET_OK !=
TAH_DB_run_transaction (connection,
"persist exchange signing key",
- &mhd_ret,
- &store_exchange_signing_key_transaction,
- (void *) es))
+ &mhd_ret,
+ &store_exchange_signing_key_transaction,
+ (void *) es))
return mhd_ret;
/* check deposit confirmation signature */
@@ -185,7 +185,7 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
{
TALER_LOG_WARNING ("Invalid signature on /deposit-confirmation request\n");
return TAH_RESPONSE_reply_signature_invalid (connection,
- TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
+ TALER_EC_DEPOSIT_CONFIRMATION_SIGNATURE_INVALID,
"exchange_sig");
}
@@ -193,9 +193,9 @@ verify_and_execute_deposit_confirmation (struct MHD_Connection *connection,
if (GNUNET_OK !=
TAH_DB_run_transaction (connection,
"store deposit confirmation",
- &mhd_ret,
- &deposit_confirmation_transaction,
- (void *) dc))
+ &mhd_ret,
+ &deposit_confirmation_transaction,
+ (void *) dc))
return mhd_ret;
return reply_deposit_confirmation_success (connection);
}
diff --git a/src/auditor/taler-auditor-httpd_parsing.c b/src/auditor/taler-auditor-httpd_parsing.c
index 6c4bece94..36ae4a166 100644
--- a/src/auditor/taler-auditor-httpd_parsing.c
+++ b/src/auditor/taler-auditor-httpd_parsing.c
@@ -80,7 +80,7 @@ TAH_PARSE_post_json (struct MHD_Connection *connection,
case GNUNET_JSON_PR_OUT_OF_MEMORY:
return (MHD_NO ==
TAH_RESPONSE_reply_internal_error (connection,
- TALER_EC_PARSER_OUT_OF_MEMORY,
+ TALER_EC_PARSER_OUT_OF_MEMORY,
"out of memory"))
? GNUNET_SYSERR : GNUNET_NO;
case GNUNET_JSON_PR_CONTINUE:
diff --git a/src/exchange/taler-exchange-httpd_deposit.c b/src/exchange/taler-exchange-httpd_deposit.c
index 51adacb7c..c19ad4b1e 100644
--- a/src/exchange/taler-exchange-httpd_deposit.c
+++ b/src/exchange/taler-exchange-httpd_deposit.c
@@ -80,8 +80,8 @@ reply_deposit_success (struct MHD_Connection *connection,
dc.merchant = *merchant;
if (GNUNET_OK !=
TEH_KS_sign (&dc.purpose,
- &pub,
- &sig))
+ &pub,
+ &sig))
{
return TEH_RESPONSE_reply_internal_error (connection,
TALER_EC_EXCHANGE_BAD_CONFIGURATION,
diff --git a/src/lib/auditor_api_deposit_confirmation.c b/src/lib/auditor_api_deposit_confirmation.c
index f26339a6d..2001a2c5f 100644
--- a/src/lib/auditor_api_deposit_confirmation.c
+++ b/src/lib/auditor_api_deposit_confirmation.c
@@ -189,7 +189,6 @@ verify_signatures (const struct GNUNET_HashCode *h_wire,
TALER_LOG_DEBUG ("... amount_without_fee was %s\n",
TALER_amount2s (amount_without_fee));
}
-
return GNUNET_SYSERR;
}
sv.purpose.purpose = htonl (TALER_SIGNATURE_MASTER_SIGNING_KEY_VALIDITY);
@@ -268,8 +267,8 @@ TALER_AUDITOR_deposit_confirmation (struct TALER_AUDITOR_Handle *auditor,
struct GNUNET_TIME_Absolute ep_expire,
struct GNUNET_TIME_Absolute ep_end,
const struct TALER_MasterSignatureP *master_sig,
- TALER_AUDITOR_DepositConfirmationResultCallback cb,
- void *cb_cls)
+ TALER_AUDITOR_DepositConfirmationResultCallback cb,
+ void *cb_cls)
{
struct TALER_AUDITOR_DepositConfirmationHandle *dh;
struct GNUNET_CURL_Context *ctx;
@@ -282,7 +281,7 @@ TALER_AUDITOR_deposit_confirmation (struct TALER_AUDITOR_Handle *auditor,
(void) GNUNET_TIME_round_abs (&ep_expire);
(void) GNUNET_TIME_round_abs (&ep_end);
GNUNET_assert (GNUNET_YES ==
- MAH_handle_is_ready (auditor));
+ MAH_handle_is_ready (auditor));
if (GNUNET_OK !=
verify_signatures (h_wire,
h_contract_terms,
@@ -305,26 +304,26 @@ TALER_AUDITOR_deposit_confirmation (struct TALER_AUDITOR_Handle *auditor,
deposit_confirmation_obj
= json_pack ("{s:o, s:o," /* H_wire, h_contract_terms */
- " s:o, s:o," /* timestamp, refund_deadline */
- " s:o, s:o," /* amount_without_fees, coin_pub */
- " s:o, s:o," /* merchant_pub, exchange_sig */
- " s:o, s:o," /* master_pub, ep_start */
- " s:o, s:o," /* ep_expire, ep_end */
+ " s:o, s:o," /* timestamp, refund_deadline */
+ " s:o, s:o," /* amount_without_fees, coin_pub */
+ " s:o, s:o," /* merchant_pub, exchange_sig */
+ " s:o, s:o," /* master_pub, ep_start */
+ " s:o, s:o," /* ep_expire, ep_end */
" s:o, s:o}", /* master_sig, exchange_pub */
- "h_wire", GNUNET_JSON_from_data_auto (h_wire),
- "h_contract_terms", GNUNET_JSON_from_data_auto (h_contract_terms),
- "timestamp", GNUNET_JSON_from_time_abs (timestamp),
- "refund_deadline", GNUNET_JSON_from_time_abs (refund_deadline),
- "amount_without_fee", TALER_JSON_from_amount (amount_without_fee),
- "coin_pub", GNUNET_JSON_from_data_auto (coin_pub),
- "merchant_pub", GNUNET_JSON_from_data_auto (merchant_pub),
- "exchange_sig", GNUNET_JSON_from_data_auto (exchange_sig),
- "master_pub", GNUNET_JSON_from_data_auto (master_pub),
- "ep_start", GNUNET_JSON_from_time_abs (ep_start),
- "ep_expire", GNUNET_JSON_from_time_abs (ep_expire),
- "ep_end", GNUNET_JSON_from_time_abs (ep_end),
- "master_sig", GNUNET_JSON_from_data_auto (master_sig),
- "exchange_pub", GNUNET_JSON_from_data_auto (exchange_pub));
+ "h_wire", GNUNET_JSON_from_data_auto (h_wire),
+ "h_contract_terms", GNUNET_JSON_from_data_auto (h_contract_terms),
+ "timestamp", GNUNET_JSON_from_time_abs (timestamp),
+ "refund_deadline", GNUNET_JSON_from_time_abs (refund_deadline),
+ "amount_without_fee", TALER_JSON_from_amount (amount_without_fee),
+ "coin_pub", GNUNET_JSON_from_data_auto (coin_pub),
+ "merchant_pub", GNUNET_JSON_from_data_auto (merchant_pub),
+ "exchange_sig", GNUNET_JSON_from_data_auto (exchange_sig),
+ "master_pub", GNUNET_JSON_from_data_auto (master_pub),
+ "ep_start", GNUNET_JSON_from_time_abs (ep_start),
+ "ep_expire", GNUNET_JSON_from_time_abs (ep_expire),
+ "ep_end", GNUNET_JSON_from_time_abs (ep_end),
+ "master_sig", GNUNET_JSON_from_data_auto (master_sig),
+ "exchange_pub", GNUNET_JSON_from_data_auto (exchange_pub));
if (NULL == deposit_confirmation_obj)
{
@@ -360,11 +359,11 @@ TALER_AUDITOR_deposit_confirmation (struct TALER_AUDITOR_Handle *auditor,
"URL for deposit-confirmation: `%s'\n",
dh->url);
ctx = MAH_handle_to_context (auditor);
- dh->job = GNUNET_CURL_job_add (ctx,
- eh,
- GNUNET_YES,
- &handle_deposit_confirmation_finished,
- dh);
+ dh->job = GNUNET_CURL_job_add2 (ctx,
+ eh,
+ dh->ctx.headers,
+ &handle_deposit_confirmation_finished,
+ dh);
return dh;
}
diff --git a/src/lib/auditor_api_handle.c b/src/lib/auditor_api_handle.c
index 8077b80cf..bf8c31abb 100644
--- a/src/lib/auditor_api_handle.c
+++ b/src/lib/auditor_api_handle.c
@@ -385,9 +385,10 @@ int
MAH_handle_is_ready (struct TALER_AUDITOR_Handle *h)
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Checking if auditor %p is now ready: %s\n",
+ "Checking if auditor %p (%s) is now ready: %s\n",
h,
- (MHD_VERSION == h->state) ? "yes" : "no");
+ h->url,
+ (MHD_VERSION == h->state) ? "yes" : "no");
return (MHS_VERSION == h->state) ? GNUNET_YES : GNUNET_NO;
}
@@ -453,15 +454,12 @@ MAH_path_to_url2 (const char *base_url,
*/
struct TALER_AUDITOR_Handle *
TALER_AUDITOR_connect (struct GNUNET_CURL_Context *ctx,
- const char *url,
- TALER_AUDITOR_VersionCallback version_cb,
- void *version_cb_cls)
+ const char *url,
+ TALER_AUDITOR_VersionCallback version_cb,
+ void *version_cb_cls)
{
struct TALER_AUDITOR_Handle *auditor;
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Connecting to auditor at URL `%s'.\n",
- url);
/* Disable 100 continue processing */
GNUNET_break (GNUNET_OK ==
GNUNET_CURL_append_header (ctx,
@@ -472,7 +470,11 @@ TALER_AUDITOR_connect (struct GNUNET_CURL_Context *ctx,
auditor->version_cb = version_cb;
auditor->version_cb_cls = version_cb_cls;
auditor->retry_task = GNUNET_SCHEDULER_add_now (&request_version,
- auditor);
+ auditor);
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Connecting to auditor at URL `%s' (%p).\n",
+ url,
+ auditor);
return auditor;
}
@@ -520,6 +522,10 @@ request_version (void *cls)
void
TALER_AUDITOR_disconnect (struct TALER_AUDITOR_Handle *auditor)
{
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Disconnecting from auditor at URL `%s' (%p).\n",
+ auditor->url,
+ auditor);
if (NULL != auditor->vr)
{
GNUNET_CURL_job_cancel (auditor->vr->job);
diff --git a/src/lib/exchange_api_common.c b/src/lib/exchange_api_common.c
index 72eb9ace5..7c70567df 100644
--- a/src/lib/exchange_api_common.c
+++ b/src/lib/exchange_api_common.c
@@ -37,8 +37,8 @@
*/
int
TALER_EXCHANGE_verify_coin_history (const char *currency,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- json_t *history,
+ const struct TALER_CoinSpendPublicKeyP *coin_pub,
+ json_t *history,
struct TALER_Amount *total)
{
size_t len;
@@ -241,8 +241,8 @@ TALER_EXCHANGE_verify_coin_history (const char *currency,
&exchange_pub),
GNUNET_JSON_spec_fixed_auto ("reserve_pub",
&pc.reserve_pub),
- GNUNET_JSON_spec_absolute_time_nbo ("timestamp",
- &pc.timestamp),
+ GNUNET_JSON_spec_absolute_time_nbo ("timestamp",
+ &pc.timestamp),
GNUNET_JSON_spec_end()
};
@@ -335,7 +335,7 @@ TALER_EXCHANGE_verify_coin_history (const char *currency,
*/
const struct TALER_EXCHANGE_SigningPublicKey *
TALER_EXCHANGE_get_exchange_signing_key_info (const struct TALER_EXCHANGE_Keys *keys,
- const struct TALER_ExchangePublicKeyP *exchange_pub)
+ const struct TALER_ExchangePublicKeyP *exchange_pub)
{
for (unsigned int i=0;i<keys->num_sign_keys;i++)
{
diff --git a/src/lib/exchange_api_deposit.c b/src/lib/exchange_api_deposit.c
index 72aefca1b..6570a17f3 100644
--- a/src/lib/exchange_api_deposit.c
+++ b/src/lib/exchange_api_deposit.c
@@ -600,10 +600,10 @@ TALER_EXCHANGE_deposit (struct TALER_EXCHANGE_Handle *exchange,
dh->url);
ctx = TEAH_handle_to_context (exchange);
dh->job = GNUNET_CURL_job_add2 (ctx,
- eh,
- dh->ctx.headers,
- &handle_deposit_finished,
- dh);
+ eh,
+ dh->ctx.headers,
+ &handle_deposit_finished,
+ dh);
return dh;
}
diff --git a/src/lib/teah_common.c b/src/lib/teah_common.c
index b8bea1871..cc8a23754 100644
--- a/src/lib/teah_common.c
+++ b/src/lib/teah_common.c
@@ -31,8 +31,7 @@
/**
- * Add the @a body as POST data to the easy handle in
- * @a ctx.
+ * Add the @a body as POST data to the easy handle in @a ctx.
*
* @param ctx[in,out] a request context (updated)
* @param eh easy handle to use
@@ -41,8 +40,8 @@
*/
int
TALER_curl_easy_post (struct TEAH_PostContext *ctx,
- CURL *eh,
- const json_t *body)
+ CURL *eh,
+ const json_t *body)
{
char *str;
size_t slen;
diff --git a/src/lib/test_auditor_api.c b/src/lib/test_auditor_api.c
index df69eac9e..f8861bc43 100644
--- a/src/lib/test_auditor_api.c
+++ b/src/lib/test_auditor_api.c
@@ -555,47 +555,38 @@ run (void *cls,
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-2",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-3",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-4",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-5",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-6",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-7",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-8",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-9",
"massive-reserve",
"EUR:1",
MHD_HTTP_OK),
-
TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-10",
"massive-reserve",
"EUR:1",
@@ -710,6 +701,12 @@ run (void *cls,
GNUNET_TIME_UNIT_ZERO,
"EUR:1",
MHD_HTTP_OK),
+ TALER_TESTING_cmd_deposit_confirmation ("deposit-confirmation",
+ is->auditor,
+ "massive-deposit-10",
+ 0,
+ "EUR:0.99",
+ MHD_HTTP_OK),
CMD_RUN_AUDITOR("massive-auditor"),
TALER_TESTING_cmd_end ()
@@ -752,7 +749,6 @@ int
main (int argc,
char * const *argv)
{
-
/* These environment variables get in the way... */
unsetenv ("XDG_DATA_HOME");
unsetenv ("XDG_CONFIG_HOME");
@@ -770,8 +766,8 @@ main (int argc,
* fetches the port number from config in order to see
* if it's available. */
switch (TALER_TESTING_prepare_exchange (CONFIG_FILE,
- &auditor_url,
- &exchange_url))
+ &auditor_url,
+ &exchange_url))
{
case GNUNET_SYSERR:
GNUNET_break (0);
diff --git a/src/lib/testing_api_cmd_deposit.c b/src/lib/testing_api_cmd_deposit.c
index 1868e8bd6..d6e3ef548 100644
--- a/src/lib/testing_api_cmd_deposit.c
+++ b/src/lib/testing_api_cmd_deposit.c
@@ -66,10 +66,9 @@ struct DepositState
json_t *contract_terms;
/**
- * Relative time (to add to 'now') to compute the refund
- * deadline. Zero for no refunds.
+ * Refund deadline. Zero for no refunds.
*/
- struct GNUNET_TIME_Relative refund_deadline;
+ struct GNUNET_TIME_Absolute refund_deadline;
/**
* Set (by the interpreter) to a fresh private key. This
@@ -83,6 +82,11 @@ struct DepositState
struct TALER_EXCHANGE_DepositHandle *dh;
/**
+ * Timestamp of the /deposit operation.
+ */
+ struct GNUNET_TIME_Absolute timestamp;
+
+ /**
* Interpreter state.
*/
struct TALER_TESTING_Interpreter *is;
@@ -245,9 +249,7 @@ deposit_run (void *cls,
const struct TALER_EXCHANGE_DenomPublicKey *denom_pub;
const struct TALER_DenominationSignature *denom_pub_sig;
struct TALER_CoinSpendSignatureP coin_sig;
- struct GNUNET_TIME_Absolute refund_deadline;
struct GNUNET_TIME_Absolute wire_deadline;
- struct GNUNET_TIME_Absolute timestamp;
struct GNUNET_CRYPTO_EddsaPrivateKey *merchant_priv;
struct TALER_MerchantPublicKeyP merchant_pub;
struct GNUNET_HashCode h_contract_terms;
@@ -307,17 +309,17 @@ deposit_run (void *cls,
ds->merchant_priv.eddsa_priv = *merchant_priv;
GNUNET_free (merchant_priv);
- if (0 != ds->refund_deadline.rel_value_us)
+ if (0 != ds->refund_deadline.abs_value_us)
{
- refund_deadline = GNUNET_TIME_relative_to_absolute
- (ds->refund_deadline);
+ struct GNUNET_TIME_Relative refund_deadline;
+
+ refund_deadline = GNUNET_TIME_absolute_get_remaining (ds->refund_deadline);
wire_deadline = GNUNET_TIME_relative_to_absolute
- (GNUNET_TIME_relative_multiply
- (ds->refund_deadline, 2));
+ (GNUNET_TIME_relative_multiply (refund_deadline, 2));
}
else
{
- refund_deadline = GNUNET_TIME_UNIT_ZERO_ABS;
+ ds->refund_deadline = ds->timestamp;
wire_deadline = GNUNET_TIME_relative_to_absolute
(GNUNET_TIME_UNIT_ZERO);
}
@@ -325,10 +327,7 @@ deposit_run (void *cls,
(&ds->merchant_priv.eddsa_priv,
&merchant_pub.eddsa_pub);
- timestamp = GNUNET_TIME_absolute_get ();
- GNUNET_TIME_round_abs (&timestamp);
- GNUNET_TIME_round_abs (&refund_deadline);
- GNUNET_TIME_round_abs (&wire_deadline);
+ (void) GNUNET_TIME_round_abs (&wire_deadline);
{
struct TALER_DepositRequestPS dr;
@@ -343,9 +342,9 @@ deposit_run (void *cls,
(GNUNET_OK ==
TALER_JSON_merchant_wire_signature_hash (ds->wire_details,
&dr.h_wire));
- dr.timestamp = GNUNET_TIME_absolute_hton (timestamp);
+ dr.timestamp = GNUNET_TIME_absolute_hton (ds->timestamp);
dr.refund_deadline = GNUNET_TIME_absolute_hton
- (refund_deadline);
+ (ds->refund_deadline);
TALER_amount_hton (&dr.amount_with_fee, &amount);
TALER_amount_hton
(&dr.deposit_fee, &denom_pub->fee_deposit);
@@ -365,9 +364,9 @@ deposit_run (void *cls,
&coin_pub,
denom_pub_sig,
&denom_pub->key,
- timestamp,
+ ds->timestamp,
&merchant_pub,
- refund_deadline,
+ ds->refund_deadline,
&coin_sig,
&deposit_cb,
ds);
@@ -537,8 +536,20 @@ TALER_TESTING_cmd_deposit
label);
GNUNET_assert (0);
}
+ ds->timestamp = GNUNET_TIME_absolute_get ();
+ (void) GNUNET_TIME_round_abs (&ds->timestamp);
- ds->refund_deadline = refund_deadline;
+ json_object_set (ds->contract_terms,
+ "timestamp",
+ GNUNET_JSON_from_time_abs (ds->timestamp));
+ if (0 != refund_deadline.rel_value_us)
+ {
+ ds->refund_deadline = GNUNET_TIME_relative_to_absolute (refund_deadline);
+ (void) GNUNET_TIME_round_abs (&ds->refund_deadline);
+ json_object_set (ds->contract_terms,
+ "refund_deadline",
+ GNUNET_JSON_from_time_abs (ds->refund_deadline));
+ }
ds->amount = amount;
ds->expected_response_code = expected_response_code;
diff --git a/src/lib/testing_auditor_api_cmd_deposit_confirmation.c b/src/lib/testing_auditor_api_cmd_deposit_confirmation.c
index 95871ef17..f52352669 100644
--- a/src/lib/testing_auditor_api_cmd_deposit_confirmation.c
+++ b/src/lib/testing_auditor_api_cmd_deposit_confirmation.c
@@ -101,8 +101,8 @@ struct DepositConfirmationState
*/
static void
deposit_confirmation_run (void *cls,
- const struct TALER_TESTING_Command *cmd,
- struct TALER_TESTING_Interpreter *is);
+ const struct TALER_TESTING_Command *cmd,
+ struct TALER_TESTING_Interpreter *is);
/**
@@ -133,9 +133,9 @@ do_retry (void *cls)
*/
static void
deposit_confirmation_cb (void *cls,
- unsigned int http_status,
- enum TALER_ErrorCode ec,
- const json_t *obj)
+ unsigned int http_status,
+ enum TALER_ErrorCode ec,
+ const json_t *obj)
{
struct DepositConfirmationState *dcs = cls;
@@ -152,14 +152,14 @@ deposit_confirmation_cb (void *cls,
"Retrying deposit confirmation failed with %u/%d\n",
http_status,
(int) ec);
- /* on DB conflicts, do not use backoff */
- if (TALER_EC_DB_COMMIT_FAILED_ON_RETRY == ec)
- dcs->backoff = GNUNET_TIME_UNIT_ZERO;
- else
- dcs->backoff = EXCHANGE_LIB_BACKOFF (dcs->backoff);
- dcs->retry_task = GNUNET_SCHEDULER_add_delayed (dcs->backoff,
- &do_retry,
- dcs);
+ /* on DB conflicts, do not use backoff */
+ if (TALER_EC_DB_COMMIT_FAILED_ON_RETRY == ec)
+ dcs->backoff = GNUNET_TIME_UNIT_ZERO;
+ else
+ dcs->backoff = EXCHANGE_LIB_BACKOFF (dcs->backoff);
+ dcs->retry_task = GNUNET_SCHEDULER_add_delayed (dcs->backoff,
+ &do_retry,
+ dcs);
return;
}
}
@@ -186,8 +186,8 @@ deposit_confirmation_cb (void *cls,
*/
static void
deposit_confirmation_run (void *cls,
- const struct TALER_TESTING_Command *cmd,
- struct TALER_TESTING_Interpreter *is)
+ const struct TALER_TESTING_Command *cmd,
+ struct TALER_TESTING_Interpreter *is)
{
struct DepositConfirmationState *dcs = cls;
const struct TALER_TESTING_Command *deposit_cmd;
@@ -211,7 +211,7 @@ deposit_confirmation_run (void *cls,
GNUNET_assert (NULL != dcs->deposit_reference);
deposit_cmd
= TALER_TESTING_interpreter_lookup_command (is,
- dcs->deposit_reference);
+ dcs->deposit_reference);
if (NULL == deposit_cmd)
{
GNUNET_break (0);
@@ -221,41 +221,41 @@ deposit_confirmation_run (void *cls,
GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_exchange_pub (deposit_cmd,
- dcs->coin_index,
- &exchange_pub));
+ dcs->coin_index,
+ &exchange_pub));
GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_exchange_sig (deposit_cmd,
- dcs->coin_index,
- &exchange_sig));
+ dcs->coin_index,
+ &exchange_sig));
keys = TALER_EXCHANGE_get_keys (dcs->is->exchange);
GNUNET_assert (NULL != keys);
spk = TALER_EXCHANGE_get_exchange_signing_key_info (keys,
- exchange_pub);
+ exchange_pub);
GNUNET_assert (GNUNET_OK ==
TALER_TESTING_get_trait_contract_terms (deposit_cmd,
- dcs->coin_index,
- &contract_terms));
+ dcs->coin_index,
+ &contract_terms));
/* Very unlikely to fail */
GNUNET_assert (NULL != contract_terms);
GNUNET_assert (GNUNET_OK ==
TALER_JSON_hash (contract_terms,
&h_contract_terms));
GNUNET_assert (GNUNET_OK ==
- TALER_TESTING_get_trait_wire_details (deposit_cmd,
- dcs->coin_index,
- &wire_details));
+ TALER_TESTING_get_trait_wire_details (deposit_cmd,
+ dcs->coin_index,
+ &wire_details));
GNUNET_assert (GNUNET_OK ==
- TALER_JSON_hash (wire_details,
- &h_wire));
+ TALER_JSON_merchant_wire_signature_hash (wire_details,
+ &h_wire));
GNUNET_assert (GNUNET_OK ==
- TALER_TESTING_get_trait_coin_priv (deposit_cmd,
- dcs->coin_index,
- &coin_priv));
+ TALER_TESTING_get_trait_coin_priv (deposit_cmd,
+ dcs->coin_index,
+ &coin_priv));
GNUNET_CRYPTO_eddsa_key_get_public (&coin_priv->eddsa_priv,
&coin_pub.eddsa_pub);
GNUNET_assert (GNUNET_OK ==
- TALER_TESTING_get_trait_peer_key (deposit_cmd,
+ TALER_TESTING_get_trait_peer_key (deposit_cmd,
dcs->coin_index,
&merchant_priv));
GNUNET_CRYPTO_eddsa_key_get_public (merchant_priv,
@@ -263,10 +263,10 @@ deposit_confirmation_run (void *cls,
GNUNET_assert (GNUNET_OK ==
TALER_string_to_amount (dcs->amount_without_fee,
&amount_without_fee));
+ /* timestamp is mandatory */
{
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_absolute_time ("timestamp", &timestamp),
- GNUNET_JSON_spec_absolute_time ("refund_deadline", &refund_deadline),
GNUNET_JSON_spec_end()
};
@@ -280,6 +280,21 @@ deposit_confirmation_run (void *cls,
return;
}
}
+ /* refund deadline is optional, defaults to zero */
+ {
+ struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_absolute_time ("refund_deadline", &refund_deadline),
+ GNUNET_JSON_spec_end()
+ };
+
+ if (GNUNET_OK !=
+ GNUNET_JSON_parse (contract_terms,
+ spec,
+ NULL, NULL))
+ {
+ refund_deadline = timestamp;
+ }
+ }
dcs->dc = TALER_AUDITOR_deposit_confirmation
(dcs->auditor,
&h_wire,
@@ -318,7 +333,7 @@ deposit_confirmation_run (void *cls,
*/
static void
deposit_confirmation_cleanup (void *cls,
- const struct TALER_TESTING_Command *cmd)
+ const struct TALER_TESTING_Command *cmd)
{
struct DepositConfirmationState *dcs = cls;
@@ -352,9 +367,9 @@ deposit_confirmation_cleanup (void *cls,
*/
static int
deposit_confirmation_traits (void *cls,
- const void **ret,
- const char *trait,
- unsigned int index)
+ const void **ret,
+ const char *trait,
+ unsigned int index)
{
/* Must define this function because some callbacks
* look for certain traits on _all_ the commands. */