summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2022-04-24 15:29:50 +0200
committerChristian Grothoff <christian@grothoff.org>2022-04-24 15:29:58 +0200
commitaedd2014ec50e2b52cad76d9c40c218ed0c9ccfc (patch)
tree3b4ef17e90f152a161c6929fbe1da07c366a4268 /src
parent36c568ab8df9b8e523c9ffc45271533af77accc7 (diff)
downloadexchange-aedd2014ec50e2b52cad76d9c40c218ed0c9ccfc.tar.gz
exchange-aedd2014ec50e2b52cad76d9c40c218ed0c9ccfc.tar.bz2
exchange-aedd2014ec50e2b52cad76d9c40c218ed0c9ccfc.zip
-misc p2p fixes
Diffstat (limited to 'src')
-rw-r--r--src/exchange/taler-exchange-httpd_purses_merge.c3
-rw-r--r--src/exchangedb/exchange-0001-part.sql1
-rw-r--r--src/exchangedb/plugin_exchangedb_postgres.c11
-rw-r--r--src/include/taler_exchange_service.h2
-rw-r--r--src/lib/exchange_api_purse_create_with_deposit.c9
-rw-r--r--src/lib/exchange_api_purse_merge.c21
-rw-r--r--src/testing/test_exchange_p2p.c2
-rw-r--r--src/testing/testing_api_cmd_purse_create_deposit.c21
-rw-r--r--src/testing/testing_api_cmd_purse_merge.c9
-rw-r--r--src/util/wallet_signatures.c2
10 files changed, 43 insertions, 38 deletions
diff --git a/src/exchange/taler-exchange-httpd_purses_merge.c b/src/exchange/taler-exchange-httpd_purses_merge.c
index b998a3b16..ee8a73756 100644
--- a/src/exchange/taler-exchange-httpd_purses_merge.c
+++ b/src/exchange/taler-exchange-httpd_purses_merge.c
@@ -388,6 +388,9 @@ TEH_handler_purses_merge (
break;
}
/* parse 'payto_uri' into pcc.reserve_pub and provider_url */
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Received payto: `%s'\n",
+ pcc.payto_uri);
if ( (0 != strncmp (pcc.payto_uri,
"payto://taler/",
strlen ("payto://taler/"))) &&
diff --git a/src/exchangedb/exchange-0001-part.sql b/src/exchangedb/exchange-0001-part.sql
index 0a333880b..4785964de 100644
--- a/src/exchangedb/exchange-0001-part.sql
+++ b/src/exchangedb/exchange-0001-part.sql
@@ -2647,6 +2647,7 @@ PERFORM
IF NOT FOUND
THEN
out_no_balance=TRUE;
+ out_conflict=FALSE;
RETURN;
END IF;
out_no_balance=FALSE;
diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c
index 93d71e594..d27ff7783 100644
--- a/src/exchangedb/plugin_exchangedb_postgres.c
+++ b/src/exchangedb/plugin_exchangedb_postgres.c
@@ -13066,7 +13066,7 @@ postgres_select_contract (void *cls,
purse_pub),
GNUNET_PQ_result_spec_auto_from_type ("contract_sig",
econtract_sig),
- GNUNET_PQ_result_spec_variable_size ("econtract",
+ GNUNET_PQ_result_spec_variable_size ("e_contract",
econtract,
econtract_size),
GNUNET_PQ_result_spec_end
@@ -13111,7 +13111,7 @@ postgres_select_contract_by_purse (void *cls,
pub_ckey),
GNUNET_PQ_result_spec_auto_from_type ("contract_sig",
econtract_sig),
- GNUNET_PQ_result_spec_variable_size ("econtract",
+ GNUNET_PQ_result_spec_variable_size ("e_contract",
econtract,
econtract_size),
GNUNET_PQ_result_spec_end
@@ -13430,8 +13430,9 @@ postgres_do_purse_deposit (
bool *conflict)
{
struct PostgresClosure *pg = cls;
+ uint64_t partner_id = 0;
struct GNUNET_PQ_QueryParam params[] = {
- GNUNET_PQ_query_param_uint64 (0), /* FIXME: partner ID */
+ GNUNET_PQ_query_param_uint64 (&partner_id),
GNUNET_PQ_query_param_auto_from_type (purse_pub),
TALER_PQ_query_param_amount (amount),
GNUNET_PQ_query_param_auto_from_type (coin_pub),
@@ -13537,7 +13538,9 @@ postgres_do_purse_merge (
GNUNET_PQ_query_param_auto_from_type (merge_sig),
GNUNET_PQ_query_param_timestamp (&merge_timestamp),
GNUNET_PQ_query_param_auto_from_type (reserve_sig),
- GNUNET_PQ_query_param_string (partner_url),
+ (NULL == partner_url)
+ ? GNUNET_PQ_query_param_null ()
+ : GNUNET_PQ_query_param_string (partner_url),
GNUNET_PQ_query_param_auto_from_type (reserve_pub),
GNUNET_PQ_query_param_end
};
diff --git a/src/include/taler_exchange_service.h b/src/include/taler_exchange_service.h
index 6bb298077..a36007757 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -4256,7 +4256,6 @@ struct TALER_EXCHANGE_PurseDeposit
* @param merge_priv the merge credential
* @param contract_priv key needed to obtain and decrypt the contract
* @param contract_terms contract the purse is about
- * @param purse_expiration when will the unmerged purse expire
* @param num_deposits length of the @a deposits array
* @param deposits array of deposits to make into the purse
* @param upload_contract true to upload the contract; must
@@ -4273,7 +4272,6 @@ TALER_EXCHANGE_purse_create_with_deposit (
const struct TALER_PurseMergePrivateKeyP *merge_priv,
const struct TALER_ContractDiffiePrivateP *contract_priv,
const json_t *contract_terms,
- struct GNUNET_TIME_Timestamp purse_expiration,
unsigned int num_deposits,
const struct TALER_EXCHANGE_PurseDeposit *deposits,
bool upload_contract,
diff --git a/src/lib/exchange_api_purse_create_with_deposit.c b/src/lib/exchange_api_purse_create_with_deposit.c
index f6f8c2d86..60f0f7361 100644
--- a/src/lib/exchange_api_purse_create_with_deposit.c
+++ b/src/lib/exchange_api_purse_create_with_deposit.c
@@ -242,7 +242,6 @@ TALER_EXCHANGE_purse_create_with_deposit (
const struct TALER_PurseMergePrivateKeyP *merge_priv,
const struct TALER_ContractDiffiePrivateP *contract_priv,
const json_t *contract_terms,
- struct GNUNET_TIME_Timestamp purse_expiration,
unsigned int num_deposits,
const struct TALER_EXCHANGE_PurseDeposit *deposits,
bool upload_contract,
@@ -265,10 +264,10 @@ TALER_EXCHANGE_purse_create_with_deposit (
pch->exchange = exchange;
pch->cb = cb;
pch->cb_cls = cb_cls;
- // FIXME: get expiration from pay deadline of contract?
- pch->purse_expiration = purse_expiration;
{
struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_timestamp ("pay_deadline",
+ &pch->purse_expiration),
TALER_JSON_spec_amount_any ("amount",
&pch->purse_value_after_fees),
GNUNET_JSON_spec_mark_optional (
@@ -390,7 +389,7 @@ TALER_EXCHANGE_purse_create_with_deposit (
jdeposit));
}
GNUNET_free (url);
- TALER_wallet_purse_create_sign (purse_expiration,
+ TALER_wallet_purse_create_sign (pch->purse_expiration,
&pch->h_contract_terms,
&pch->merge_pub,
min_age,
@@ -443,7 +442,7 @@ TALER_EXCHANGE_purse_create_with_deposit (
GNUNET_JSON_pack_data_auto ("h_contract_terms",
&pch->h_contract_terms),
GNUNET_JSON_pack_timestamp ("purse_expiration",
- purse_expiration),
+ pch->purse_expiration),
GNUNET_JSON_pack_array_steal ("deposits",
deposit_arr));
GNUNET_free (econtract);
diff --git a/src/lib/exchange_api_purse_merge.c b/src/lib/exchange_api_purse_merge.c
index e541afaba..2dc9e4ca0 100644
--- a/src/lib/exchange_api_purse_merge.c
+++ b/src/lib/exchange_api_purse_merge.c
@@ -272,7 +272,10 @@ TALER_EXCHANGE_account_merge (
pch->h_contract_terms = *h_contract_terms;
pch->purse_expiration = purse_expiration;
pch->purse_value_after_fees = *purse_value_after_fees;
- pch->provider_url = GNUNET_strdup (reserve_exchange_url);
+ if (NULL == reserve_exchange_url)
+ pch->provider_url = GNUNET_strdup (exchange->url);
+ else
+ pch->provider_url = GNUNET_strdup (reserve_exchange_url);
GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv,
&pch->reserve_pub.eddsa_pub);
@@ -305,31 +308,33 @@ TALER_EXCHANGE_account_merge (
pub_str,
sizeof (pub_str));
*end = '\0';
- if (0 == strncmp (reserve_exchange_url,
+ if (0 == strncmp (pch->provider_url,
"http://",
strlen ("http://")))
{
is_http = true;
- exchange_url = &reserve_exchange_url[strlen ("http://")];
+ exchange_url = &pch->provider_url[strlen ("http://")];
}
- else if (0 == strncmp (reserve_exchange_url,
+ else if (0 == strncmp (pch->provider_url,
"https://",
strlen ("https://")))
{
is_http = false;
- exchange_url = &reserve_exchange_url[strlen ("https://")];
+ exchange_url = &pch->provider_url[strlen ("https://")];
}
else
{
GNUNET_break (0);
+ GNUNET_free (pch->provider_url);
GNUNET_free (pch);
return NULL;
}
+ /* exchange_url includes trailing '/' */
GNUNET_asprintf (&reserve_url,
- "payto://%s/%s/%s",
+ "payto://%s/%s%s",
is_http ? "taler+http" : "taler",
- pub_str,
- exchange_url);
+ exchange_url,
+ pub_str);
}
pch->url = TEAH_path_to_url (exchange,
arg_str);
diff --git a/src/testing/test_exchange_p2p.c b/src/testing/test_exchange_p2p.c
index b16b2f0a2..e4b334aa0 100644
--- a/src/testing/test_exchange_p2p.c
+++ b/src/testing/test_exchange_p2p.c
@@ -158,7 +158,7 @@ run (void *cls,
true, /* upload contract */
GNUNET_TIME_UNIT_MINUTES, /* expiration */
"withdraw-coin-1",
- "EUR:1", /* FIXME: check amount vs. fees! */
+ "EUR:1.01", /* FIXME: check amount vs. fees! */
NULL),
TALER_TESTING_cmd_contract_get (
"purse-get-contract",
diff --git a/src/testing/testing_api_cmd_purse_create_deposit.c b/src/testing/testing_api_cmd_purse_create_deposit.c
index 13b2dffa6..ef98c9055 100644
--- a/src/testing/testing_api_cmd_purse_create_deposit.c
+++ b/src/testing/testing_api_cmd_purse_create_deposit.c
@@ -259,17 +259,23 @@ deposit_run (void *cls,
GNUNET_CRYPTO_eddsa_key_create (&ds->purse_priv.eddsa_priv);
GNUNET_CRYPTO_eddsa_key_create (&ds->merge_priv.eddsa_priv);
GNUNET_CRYPTO_ecdhe_key_create (&ds->contract_priv.ecdhe_priv);
- ds->purse_expiration
- = GNUNET_TIME_relative_to_timestamp (ds->rel_expiration);
GNUNET_CRYPTO_eddsa_key_get_public (&ds->purse_priv.eddsa_priv,
&ds->purse_pub.eddsa_pub);
+
+ ds->purse_expiration =
+ GNUNET_TIME_absolute_to_timestamp (
+ GNUNET_TIME_relative_to_absolute (ds->rel_expiration));
+ GNUNET_assert (0 ==
+ json_object_set_new (
+ ds->contract_terms,
+ "pay_deadline",
+ GNUNET_JSON_from_timestamp (ds->purse_expiration)));
ds->dh = TALER_EXCHANGE_purse_create_with_deposit (
is->exchange,
&ds->purse_priv,
&ds->merge_priv,
&ds->contract_priv,
ds->contract_terms,
- ds->purse_expiration,
ds->num_coin_references,
deposits,
ds->upload_contract,
@@ -361,7 +367,6 @@ TALER_TESTING_cmd_purse_create_with_deposit (
...)
{
struct PurseCreateDepositState *ds;
- struct GNUNET_TIME_Timestamp pay_deadline;
ds = GNUNET_new (struct PurseCreateDepositState);
ds->rel_expiration = purse_expiration;
@@ -378,14 +383,6 @@ TALER_TESTING_cmd_purse_create_with_deposit (
label);
GNUNET_assert (0);
}
- pay_deadline =
- GNUNET_TIME_absolute_to_timestamp (
- GNUNET_TIME_relative_to_absolute (purse_expiration));
- GNUNET_assert (0 ==
- json_object_set_new (
- ds->contract_terms,
- "pay_deadline",
- GNUNET_JSON_from_timestamp (pay_deadline)));
{
va_list ap;
unsigned int i;
diff --git a/src/testing/testing_api_cmd_purse_merge.c b/src/testing/testing_api_cmd_purse_merge.c
index a17f8a9d7..27aa120ed 100644
--- a/src/testing/testing_api_cmd_purse_merge.c
+++ b/src/testing/testing_api_cmd_purse_merge.c
@@ -128,7 +128,7 @@ merge_run (void *cls,
const struct TALER_PurseMergePrivateKeyP *merge_priv;
const json_t *ct;
struct TALER_PrivateContractHashP h_contract_terms;
- uint32_t min_age;
+ uint32_t min_age = 0;
struct TALER_Amount value_after_fees;
struct GNUNET_TIME_Timestamp purse_expiration;
const struct TALER_TESTING_Command *ref;
@@ -172,6 +172,8 @@ merge_run (void *cls,
}
{
struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_timestamp ("pay_deadline",
+ &purse_expiration),
TALER_JSON_spec_amount_any ("amount",
&value_after_fees),
GNUNET_JSON_spec_mark_optional (
@@ -192,9 +194,6 @@ merge_run (void *cls,
}
}
- // FIXME: how to get purse_expiration nicely!?!?
- // See create_with_deposit FIXME: from pay deadline?
-
if (NULL == ds->reserve_ref)
{
GNUNET_CRYPTO_eddsa_key_create (&ds->reserve_priv.eddsa_priv);
@@ -204,7 +203,7 @@ merge_run (void *cls,
const struct TALER_ReservePrivateKeyP *rp;
ref = TALER_TESTING_interpreter_lookup_command (ds->is,
- ds->merge_ref);
+ ds->reserve_ref);
GNUNET_assert (NULL != ref);
if (GNUNET_OK !=
TALER_TESTING_get_trait_reserve_priv (ref,
diff --git a/src/util/wallet_signatures.c b/src/util/wallet_signatures.c
index f0ff2dc89..ce757b753 100644
--- a/src/util/wallet_signatures.c
+++ b/src/util/wallet_signatures.c
@@ -1033,7 +1033,7 @@ TALER_wallet_purse_merge_verify (
TALER_payto_hash (reserve_url,
&pm.h_payto);
return GNUNET_CRYPTO_eddsa_verify (
- TALER_SIGNATURE_WALLET_ACCOUNT_MERGE,
+ TALER_SIGNATURE_WALLET_PURSE_MERGE,
&pm,
&merge_sig->eddsa_signature,
&merge_pub->eddsa_pub);