minor bugfixes, towards /deposit in test interpreter
This commit is contained in:
parent
ac8420a661
commit
f623214c12
@ -670,6 +670,10 @@ TALER_MINT_deposit (struct TALER_MINT_Handle *mint,
|
||||
curl_easy_setopt (eh,
|
||||
CURLOPT_URL,
|
||||
dh->url));
|
||||
GNUNET_assert (CURLE_OK ==
|
||||
curl_easy_setopt (eh,
|
||||
CURLOPT_VERBOSE,
|
||||
1LL));
|
||||
GNUNET_assert (CURLE_OK ==
|
||||
curl_easy_setopt (eh,
|
||||
CURLOPT_POSTFIELDS,
|
||||
|
@ -811,9 +811,6 @@ handle_withdraw_sign_finished (void *cls,
|
||||
GNUNET_break (0);
|
||||
response_code = 0;
|
||||
}
|
||||
fprintf (stderr,
|
||||
"Response code: %u\n",
|
||||
(unsigned int) response_code);
|
||||
if ( (0 == wsh->eno) &&
|
||||
(0 != response_code) )
|
||||
{
|
||||
@ -1037,10 +1034,6 @@ TALER_MINT_withdraw_sign (struct TALER_MINT_Handle *mint,
|
||||
curl_easy_setopt (eh,
|
||||
CURLOPT_URL,
|
||||
wsh->url));
|
||||
GNUNET_assert (CURLE_OK ==
|
||||
curl_easy_setopt (eh,
|
||||
CURLOPT_VERBOSE,
|
||||
1LL));
|
||||
GNUNET_assert (CURLE_OK ==
|
||||
curl_easy_setopt (eh,
|
||||
CURLOPT_POSTFIELDS,
|
||||
|
@ -222,7 +222,7 @@ struct Command
|
||||
* Set (by the interpreter) to a fresh private key of the merchant,
|
||||
* if @e refund_deadline is non-zero.
|
||||
*/
|
||||
struct TALER_MerchantPublicKeyP merchant_priv;
|
||||
struct TALER_MerchantPrivateKeyP merchant_priv;
|
||||
|
||||
/**
|
||||
* Deposit handle while operation is running.
|
||||
@ -406,6 +406,37 @@ withdraw_sign_cb (void *cls,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Function called with the result of a /deposit operation.
|
||||
*
|
||||
* @param cls closure with the interpreter state
|
||||
* @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful deposit;
|
||||
* 0 if the mint's reply is bogus (fails to follow the protocol)
|
||||
* @param obj the received JSON reply, should be kept as proof (and, in case of errors,
|
||||
* be forwarded to the customer)
|
||||
*/
|
||||
static void
|
||||
deposit_cb (void *cls,
|
||||
unsigned int http_status,
|
||||
json_t *obj)
|
||||
{
|
||||
struct InterpreterState *is = cls;
|
||||
struct Command *cmd = &is->commands[is->ip];
|
||||
|
||||
cmd->details.deposit.dh = NULL;
|
||||
if (MHD_HTTP_OK != http_status)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
fail (is);
|
||||
return;
|
||||
}
|
||||
is->ip++;
|
||||
is->task = GNUNET_SCHEDULER_add_now (&interpreter_run,
|
||||
is);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find denomination key matching the given amount.
|
||||
*
|
||||
@ -601,9 +632,91 @@ interpreter_run (void *cls,
|
||||
trigger_context_task ();
|
||||
return;
|
||||
case OC_DEPOSIT:
|
||||
GNUNET_break (0); // to be implemented!
|
||||
is->ip++;
|
||||
break;
|
||||
{
|
||||
struct GNUNET_HashCode h_contract;
|
||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||
struct TALER_CoinSpendSignatureP coin_sig;
|
||||
struct GNUNET_TIME_Absolute refund_deadline;
|
||||
struct GNUNET_TIME_Absolute timestamp;
|
||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||
json_t *wire;
|
||||
|
||||
GNUNET_assert (NULL !=
|
||||
cmd->details.deposit.coin_ref);
|
||||
ref = find_command (is,
|
||||
cmd->details.deposit.coin_ref);
|
||||
GNUNET_assert (NULL != ref);
|
||||
GNUNET_assert (OC_WITHDRAW_SIGN == ref->oc);
|
||||
if (GNUNET_OK !=
|
||||
TALER_string_to_amount (cmd->details.deposit.amount,
|
||||
&amount))
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Failed to parse amount `%s' at %u\n",
|
||||
cmd->details.deposit.amount,
|
||||
is->ip);
|
||||
fail (is);
|
||||
return;
|
||||
}
|
||||
GNUNET_CRYPTO_hash (cmd->details.deposit.contract,
|
||||
strlen (cmd->details.deposit.contract),
|
||||
&h_contract);
|
||||
wire = json_loads (cmd->details.deposit.wire_details,
|
||||
JSON_REJECT_DUPLICATES,
|
||||
NULL);
|
||||
if (NULL == wire)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Failed to parse wire details `%s' at %u\n",
|
||||
cmd->details.deposit.wire_details,
|
||||
is->ip);
|
||||
fail (is);
|
||||
return;
|
||||
}
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&ref->details.withdraw_sign.coin_priv.eddsa_priv,
|
||||
&coin_pub.eddsa_pub);
|
||||
|
||||
if (0 != cmd->details.deposit.refund_deadline.rel_value_us)
|
||||
{
|
||||
struct GNUNET_CRYPTO_EddsaPrivateKey *priv;
|
||||
|
||||
priv = GNUNET_CRYPTO_eddsa_key_create ();
|
||||
cmd->details.deposit.merchant_priv.eddsa_priv = *priv;
|
||||
GNUNET_free (priv);
|
||||
refund_deadline = GNUNET_TIME_relative_to_absolute (cmd->details.deposit.refund_deadline);
|
||||
}
|
||||
else
|
||||
{
|
||||
refund_deadline = GNUNET_TIME_UNIT_ZERO_ABS;
|
||||
}
|
||||
timestamp = GNUNET_TIME_absolute_get ();
|
||||
|
||||
/* FIXME: init "coin_sig" here! */
|
||||
|
||||
cmd->details.deposit.dh
|
||||
= TALER_MINT_deposit (mint,
|
||||
&amount,
|
||||
wire,
|
||||
&h_contract,
|
||||
&coin_pub,
|
||||
&ref->details.withdraw_sign.sig,
|
||||
&ref->details.withdraw_sign.pk->key,
|
||||
timestamp,
|
||||
cmd->details.deposit.transaction_id,
|
||||
&merchant_pub,
|
||||
refund_deadline,
|
||||
&coin_sig,
|
||||
&deposit_cb,
|
||||
is);
|
||||
if (NULL == cmd->details.deposit.dh)
|
||||
{
|
||||
GNUNET_break (0);
|
||||
json_decref (wire);
|
||||
fail (is);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
default:
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Unknown instruction %d at %u (%s)\n",
|
||||
|
Loading…
Reference in New Issue
Block a user