next round of exchange API atomization
This commit is contained in:
parent
75733ee00e
commit
421129a32e
@ -1 +1 @@
|
|||||||
Subproject commit 5f377301db4d94c485422ecda277fe850e29504a
|
Subproject commit 3e5591a7e3fd93ba46fc2b538c63f0c16336283d
|
@ -604,7 +604,8 @@ TALER_EXCHANGE_keys_decref (struct TALER_EXCHANGE_Keys *keys);
|
|||||||
* @param last_denom_new new last denomination time.
|
* @param last_denom_new new last denomination time.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TALER_EXCHANGE_set_last_denom (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_set_last_denom (
|
||||||
|
struct TALER_EXCHANGE_Handle *exchange,
|
||||||
struct GNUNET_TIME_Timestamp last_denom_new);
|
struct GNUNET_TIME_Timestamp last_denom_new);
|
||||||
|
|
||||||
|
|
||||||
@ -653,7 +654,8 @@ enum TALER_EXCHANGE_CheckKeysFlags
|
|||||||
* @return until when the existing response is current, 0 if we are re-downloading now
|
* @return until when the existing response is current, 0 if we are re-downloading now
|
||||||
*/
|
*/
|
||||||
struct GNUNET_TIME_Timestamp
|
struct GNUNET_TIME_Timestamp
|
||||||
TALER_EXCHANGE_check_keys_current (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_check_keys_current (
|
||||||
|
struct TALER_EXCHANGE_Handle *exchange,
|
||||||
enum TALER_EXCHANGE_CheckKeysFlags flags,
|
enum TALER_EXCHANGE_CheckKeysFlags flags,
|
||||||
TALER_EXCHANGE_CertificationCallback cb,
|
TALER_EXCHANGE_CertificationCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
@ -669,6 +671,16 @@ json_t *
|
|||||||
TALER_EXCHANGE_get_keys_raw (struct TALER_EXCHANGE_Handle *exchange);
|
TALER_EXCHANGE_get_keys_raw (struct TALER_EXCHANGE_Handle *exchange);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the keys from the exchange in the raw JSON format.
|
||||||
|
*
|
||||||
|
* @param keys the keys structure
|
||||||
|
* @return the keys in raw JSON
|
||||||
|
*/
|
||||||
|
json_t *
|
||||||
|
TALER_EXCHANGE_keys_to_json (struct TALER_EXCHANGE_Keys *keys);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test if the given @a pub is a the current signing key from the exchange
|
* Test if the given @a pub is a the current signing key from the exchange
|
||||||
* according to @a keys.
|
* according to @a keys.
|
||||||
@ -1055,7 +1067,8 @@ struct TALER_EXCHANGE_WireHandle;
|
|||||||
* @return a handle for this request
|
* @return a handle for this request
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_WireHandle *
|
struct TALER_EXCHANGE_WireHandle *
|
||||||
TALER_EXCHANGE_wire (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_wire (
|
||||||
|
struct TALER_EXCHANGE_Handle *exchange,
|
||||||
TALER_EXCHANGE_WireCallback wire_cb,
|
TALER_EXCHANGE_WireCallback wire_cb,
|
||||||
void *wire_cb_cls);
|
void *wire_cb_cls);
|
||||||
|
|
||||||
@ -1377,7 +1390,9 @@ typedef void
|
|||||||
* finished processing the /keys reply). If this check fails, we do
|
* finished processing the /keys reply). If this check fails, we do
|
||||||
* NOT initiate the transaction with the exchange and instead return NULL.
|
* NOT initiate the transaction with the exchange and instead return NULL.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param amount the amount to be refunded; must be larger than the refund fee
|
* @param amount the amount to be refunded; must be larger than the refund fee
|
||||||
* (as that fee is still being subtracted), and smaller than the amount
|
* (as that fee is still being subtracted), and smaller than the amount
|
||||||
* (with deposit fee) of the original deposit contribution of this coin
|
* (with deposit fee) of the original deposit contribution of this coin
|
||||||
@ -1395,7 +1410,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_RefundHandle *
|
struct TALER_EXCHANGE_RefundHandle *
|
||||||
TALER_EXCHANGE_refund (
|
TALER_EXCHANGE_refund (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
@ -1504,7 +1521,8 @@ struct TALER_EXCHANGE_NonceKey
|
|||||||
/**
|
/**
|
||||||
* Get a set of CS R values using a /csr-melt request.
|
* Get a set of CS R values using a /csr-melt request.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
* @param rms master key used for the derivation of the CS values
|
* @param rms master key used for the derivation of the CS values
|
||||||
* @param nks_len length of the @a nks array
|
* @param nks_len length of the @a nks array
|
||||||
* @param nks array of denominations and nonces
|
* @param nks array of denominations and nonces
|
||||||
@ -1515,7 +1533,9 @@ struct TALER_EXCHANGE_NonceKey
|
|||||||
* In this case, the callback is not called.
|
* In this case, the callback is not called.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_CsRMeltHandle *
|
struct TALER_EXCHANGE_CsRMeltHandle *
|
||||||
TALER_EXCHANGE_csr_melt (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_csr_melt (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
const struct TALER_RefreshMasterSecretP *rms,
|
const struct TALER_RefreshMasterSecretP *rms,
|
||||||
unsigned int nks_len,
|
unsigned int nks_len,
|
||||||
struct TALER_EXCHANGE_NonceKey *nks,
|
struct TALER_EXCHANGE_NonceKey *nks,
|
||||||
@ -1608,7 +1628,8 @@ typedef void
|
|||||||
* In this case, the callback is not called.
|
* In this case, the callback is not called.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_CsRWithdrawHandle *
|
struct TALER_EXCHANGE_CsRWithdrawHandle *
|
||||||
TALER_EXCHANGE_csr_withdraw (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_csr_withdraw (
|
||||||
|
struct TALER_EXCHANGE_Handle *exchange,
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
||||||
const struct TALER_CsNonce *nonce,
|
const struct TALER_CsNonce *nonce,
|
||||||
TALER_EXCHANGE_CsRWithdrawCallback res_cb,
|
TALER_EXCHANGE_CsRWithdrawCallback res_cb,
|
||||||
@ -2132,7 +2153,9 @@ typedef void
|
|||||||
/**
|
/**
|
||||||
* Submit a request to obtain the reserve status.
|
* Submit a request to obtain the reserve status.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param reserve_priv private key of the reserve to inspect
|
* @param reserve_priv private key of the reserve to inspect
|
||||||
* @param cb the callback to call when a reply for this request is available
|
* @param cb the callback to call when a reply for this request is available
|
||||||
* @param cb_cls closure for the above callback
|
* @param cb_cls closure for the above callback
|
||||||
@ -2141,7 +2164,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_ReservesStatusHandle *
|
struct TALER_EXCHANGE_ReservesStatusHandle *
|
||||||
TALER_EXCHANGE_reserves_status (
|
TALER_EXCHANGE_reserves_status (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
TALER_EXCHANGE_ReservesStatusCallback cb,
|
TALER_EXCHANGE_ReservesStatusCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
@ -2250,7 +2275,9 @@ typedef void
|
|||||||
/**
|
/**
|
||||||
* Submit a request to obtain the reserve history.
|
* Submit a request to obtain the reserve history.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param reserve_priv private key of the reserve to inspect
|
* @param reserve_priv private key of the reserve to inspect
|
||||||
* @param cb the callback to call when a reply for this request is available
|
* @param cb the callback to call when a reply for this request is available
|
||||||
* @param cb_cls closure for the above callback
|
* @param cb_cls closure for the above callback
|
||||||
@ -2259,7 +2286,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_ReservesHistoryHandle *
|
struct TALER_EXCHANGE_ReservesHistoryHandle *
|
||||||
TALER_EXCHANGE_reserves_history (
|
TALER_EXCHANGE_reserves_history (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
TALER_EXCHANGE_ReservesHistoryCallback cb,
|
TALER_EXCHANGE_ReservesHistoryCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
@ -2649,7 +2678,8 @@ struct TALER_EXCHANGE_Withdraw2Handle;
|
|||||||
* In this case, the callback is not called.
|
* In this case, the callback is not called.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Withdraw2Handle *
|
struct TALER_EXCHANGE_Withdraw2Handle *
|
||||||
TALER_EXCHANGE_withdraw2 (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_withdraw2 (
|
||||||
|
struct TALER_EXCHANGE_Handle *exchange,
|
||||||
const struct TALER_PlanchetDetail *pd,
|
const struct TALER_PlanchetDetail *pd,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
TALER_EXCHANGE_Withdraw2Callback res_cb,
|
TALER_EXCHANGE_Withdraw2Callback res_cb,
|
||||||
@ -2911,7 +2941,9 @@ typedef void
|
|||||||
* argument @a rd should be committed to persistent storage
|
* argument @a rd should be committed to persistent storage
|
||||||
* prior to calling this function.
|
* prior to calling this function.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param rms the fresh secret that defines the refresh operation
|
* @param rms the fresh secret that defines the refresh operation
|
||||||
* @param rd the refresh data specifying the characteristics of the operation
|
* @param rd the refresh data specifying the characteristics of the operation
|
||||||
* @param melt_cb the callback to call with the result
|
* @param melt_cb the callback to call with the result
|
||||||
@ -2920,7 +2952,10 @@ typedef void
|
|||||||
* In this case, neither callback will be called.
|
* In this case, neither callback will be called.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_MeltHandle *
|
struct TALER_EXCHANGE_MeltHandle *
|
||||||
TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_melt (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_RefreshMasterSecretP *rms,
|
const struct TALER_RefreshMasterSecretP *rms,
|
||||||
const struct TALER_EXCHANGE_RefreshData *rd,
|
const struct TALER_EXCHANGE_RefreshData *rd,
|
||||||
TALER_EXCHANGE_MeltCallback melt_cb,
|
TALER_EXCHANGE_MeltCallback melt_cb,
|
||||||
@ -3044,7 +3079,9 @@ struct TALER_EXCHANGE_RefreshesRevealHandle;
|
|||||||
* arguments should have been committed to persistent storage
|
* arguments should have been committed to persistent storage
|
||||||
* prior to calling this function.
|
* prior to calling this function.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param rms the fresh secret that defines the refresh operation
|
* @param rms the fresh secret that defines the refresh operation
|
||||||
* @param rd the refresh data that characterizes the refresh operation
|
* @param rd the refresh data that characterizes the refresh operation
|
||||||
* @param num_coins number of fresh coins to be created, length of the @a exchange_vals array, must match value in @a rd
|
* @param num_coins number of fresh coins to be created, length of the @a exchange_vals array, must match value in @a rd
|
||||||
@ -3059,7 +3096,8 @@ struct TALER_EXCHANGE_RefreshesRevealHandle;
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_RefreshesRevealHandle *
|
struct TALER_EXCHANGE_RefreshesRevealHandle *
|
||||||
TALER_EXCHANGE_refreshes_reveal (
|
TALER_EXCHANGE_refreshes_reveal (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
const struct TALER_RefreshMasterSecretP *rms,
|
const struct TALER_RefreshMasterSecretP *rms,
|
||||||
const struct TALER_EXCHANGE_RefreshData *rd,
|
const struct TALER_EXCHANGE_RefreshData *rd,
|
||||||
unsigned int num_coins,
|
unsigned int num_coins,
|
||||||
@ -3311,7 +3349,9 @@ typedef void
|
|||||||
* Query the exchange about which transactions were combined
|
* Query the exchange about which transactions were combined
|
||||||
* to create a wire transfer.
|
* to create a wire transfer.
|
||||||
*
|
*
|
||||||
* @param exchange exchange to query
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param wtid raw wire transfer identifier to get information about
|
* @param wtid raw wire transfer identifier to get information about
|
||||||
* @param cb callback to call
|
* @param cb callback to call
|
||||||
* @param cb_cls closure for @a cb
|
* @param cb_cls closure for @a cb
|
||||||
@ -3319,7 +3359,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_TransfersGetHandle *
|
struct TALER_EXCHANGE_TransfersGetHandle *
|
||||||
TALER_EXCHANGE_transfers_get (
|
TALER_EXCHANGE_transfers_get (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_WireTransferIdentifierRawP *wtid,
|
const struct TALER_WireTransferIdentifierRawP *wtid,
|
||||||
TALER_EXCHANGE_TransfersGetCallback cb,
|
TALER_EXCHANGE_TransfersGetCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
@ -3449,7 +3491,9 @@ typedef void
|
|||||||
* which aggregate wire transfer the deposit operation identified by @a coin_pub,
|
* which aggregate wire transfer the deposit operation identified by @a coin_pub,
|
||||||
* @a merchant_priv and @a h_contract_terms contributed to.
|
* @a merchant_priv and @a h_contract_terms contributed to.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange to query
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param merchant_priv the merchant's private key
|
* @param merchant_priv the merchant's private key
|
||||||
* @param h_wire hash of merchant's wire transfer details
|
* @param h_wire hash of merchant's wire transfer details
|
||||||
* @param h_contract_terms hash of the proposal data
|
* @param h_contract_terms hash of the proposal data
|
||||||
@ -3461,7 +3505,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_DepositGetHandle *
|
struct TALER_EXCHANGE_DepositGetHandle *
|
||||||
TALER_EXCHANGE_deposits_get (
|
TALER_EXCHANGE_deposits_get (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||||
const struct TALER_MerchantWireHashP *h_wire,
|
const struct TALER_MerchantWireHashP *h_wire,
|
||||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
@ -3504,7 +3550,7 @@ TALER_EXCHANGE_verify_coin_history (
|
|||||||
* Parse history given in JSON format and return it in binary
|
* Parse history given in JSON format and return it in binary
|
||||||
* format.
|
* format.
|
||||||
*
|
*
|
||||||
* @param exchange connection to the exchange we can use
|
* @param keys exchange keys
|
||||||
* @param history JSON array with the history
|
* @param history JSON array with the history
|
||||||
* @param reserve_pub public key of the reserve to inspect
|
* @param reserve_pub public key of the reserve to inspect
|
||||||
* @param currency currency we expect the balance to be in
|
* @param currency currency we expect the balance to be in
|
||||||
@ -3519,7 +3565,7 @@ TALER_EXCHANGE_verify_coin_history (
|
|||||||
*/
|
*/
|
||||||
enum GNUNET_GenericReturnValue
|
enum GNUNET_GenericReturnValue
|
||||||
TALER_EXCHANGE_parse_reserve_history (
|
TALER_EXCHANGE_parse_reserve_history (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const json_t *history,
|
const json_t *history,
|
||||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||||
const char *currency,
|
const char *currency,
|
||||||
@ -3601,7 +3647,9 @@ typedef void
|
|||||||
* the emergency recoup protocol for a given denomination. The value
|
* the emergency recoup protocol for a given denomination. The value
|
||||||
* of the coin will be refunded to the original customer (without fees).
|
* of the coin will be refunded to the original customer (without fees).
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param pk kind of coin to pay back
|
* @param pk kind of coin to pay back
|
||||||
* @param denom_sig signature over the coin by the exchange using @a pk
|
* @param denom_sig signature over the coin by the exchange using @a pk
|
||||||
* @param exchange_vals contribution from the exchange on the withdraw
|
* @param exchange_vals contribution from the exchange on the withdraw
|
||||||
@ -3613,7 +3661,10 @@ typedef void
|
|||||||
* In this case, the callback is not called.
|
* In this case, the callback is not called.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_RecoupHandle *
|
struct TALER_EXCHANGE_RecoupHandle *
|
||||||
TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_recoup (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
||||||
const struct TALER_DenominationSignature *denom_sig,
|
const struct TALER_DenominationSignature *denom_sig,
|
||||||
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
||||||
@ -3692,7 +3743,9 @@ typedef void
|
|||||||
* revoked coin was refreshed from. The original coin is then
|
* revoked coin was refreshed from. The original coin is then
|
||||||
* considered a zombie.
|
* considered a zombie.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param pk kind of coin to pay back
|
* @param pk kind of coin to pay back
|
||||||
* @param denom_sig signature over the coin by the exchange using @a pk
|
* @param denom_sig signature over the coin by the exchange using @a pk
|
||||||
* @param exchange_vals contribution from the exchange on the withdraw
|
* @param exchange_vals contribution from the exchange on the withdraw
|
||||||
@ -3707,7 +3760,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_RecoupRefreshHandle *
|
struct TALER_EXCHANGE_RecoupRefreshHandle *
|
||||||
TALER_EXCHANGE_recoup_refresh (
|
TALER_EXCHANGE_recoup_refresh (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
||||||
const struct TALER_DenominationSignature *denom_sig,
|
const struct TALER_DenominationSignature *denom_sig,
|
||||||
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
||||||
@ -4258,7 +4313,8 @@ struct TALER_EXCHANGE_ManagementGetKeysHandle;
|
|||||||
* @return the request handle; NULL upon error
|
* @return the request handle; NULL upon error
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_ManagementGetKeysHandle *
|
struct TALER_EXCHANGE_ManagementGetKeysHandle *
|
||||||
TALER_EXCHANGE_get_management_keys (struct GNUNET_CURL_Context *ctx,
|
TALER_EXCHANGE_get_management_keys (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
const char *url,
|
const char *url,
|
||||||
TALER_EXCHANGE_ManagementGetKeysCallback cb,
|
TALER_EXCHANGE_ManagementGetKeysCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
@ -5787,7 +5843,9 @@ struct TALER_EXCHANGE_PurseGetHandle;
|
|||||||
/**
|
/**
|
||||||
* Request information about a purse from the exchange.
|
* Request information about a purse from the exchange.
|
||||||
*
|
*
|
||||||
* @param exchange exchange handle
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param purse_pub public key of the purse
|
* @param purse_pub public key of the purse
|
||||||
* @param timeout how long to wait for a change to happen
|
* @param timeout how long to wait for a change to happen
|
||||||
* @param wait_for_merge true to wait for a merge event, otherwise wait for a deposit event
|
* @param wait_for_merge true to wait for a merge event, otherwise wait for a deposit event
|
||||||
@ -5797,7 +5855,9 @@ struct TALER_EXCHANGE_PurseGetHandle;
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_PurseGetHandle *
|
struct TALER_EXCHANGE_PurseGetHandle *
|
||||||
TALER_EXCHANGE_purse_get (
|
TALER_EXCHANGE_purse_get (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
struct GNUNET_TIME_Relative timeout,
|
struct GNUNET_TIME_Relative timeout,
|
||||||
bool wait_for_merge,
|
bool wait_for_merge,
|
||||||
@ -5911,7 +5971,9 @@ struct TALER_EXCHANGE_PurseDeposit
|
|||||||
* Inform the exchange that a purse should be created
|
* Inform the exchange that a purse should be created
|
||||||
* and coins deposited into it.
|
* and coins deposited into it.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange to interact with
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param purse_priv private key of the purse
|
* @param purse_priv private key of the purse
|
||||||
* @param merge_priv the merge credential
|
* @param merge_priv the merge credential
|
||||||
* @param contract_priv key needed to obtain and decrypt the contract
|
* @param contract_priv key needed to obtain and decrypt the contract
|
||||||
@ -5927,7 +5989,9 @@ struct TALER_EXCHANGE_PurseDeposit
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_PurseCreateDepositHandle *
|
struct TALER_EXCHANGE_PurseCreateDepositHandle *
|
||||||
TALER_EXCHANGE_purse_create_with_deposit (
|
TALER_EXCHANGE_purse_create_with_deposit (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
||||||
const struct TALER_ContractDiffiePrivateP *contract_priv,
|
const struct TALER_ContractDiffiePrivateP *contract_priv,
|
||||||
@ -6091,7 +6155,9 @@ struct TALER_EXCHANGE_AccountMergeHandle;
|
|||||||
* Inform the exchange that a purse should be merged
|
* Inform the exchange that a purse should be merged
|
||||||
* with a reserve.
|
* with a reserve.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange hosting the purse
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param reserve_exchange_url base URL of the exchange with the reserve
|
* @param reserve_exchange_url base URL of the exchange with the reserve
|
||||||
* @param reserve_priv private key of the reserve to merge into
|
* @param reserve_priv private key of the reserve to merge into
|
||||||
* @param purse_pub public key of the purse to merge
|
* @param purse_pub public key of the purse to merge
|
||||||
@ -6107,7 +6173,9 @@ struct TALER_EXCHANGE_AccountMergeHandle;
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_AccountMergeHandle *
|
struct TALER_EXCHANGE_AccountMergeHandle *
|
||||||
TALER_EXCHANGE_account_merge (
|
TALER_EXCHANGE_account_merge (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const char *reserve_exchange_url,
|
const char *reserve_exchange_url,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
@ -6199,7 +6267,9 @@ struct TALER_EXCHANGE_PurseCreateMergeHandle;
|
|||||||
* Inform the exchange that a purse should be created
|
* Inform the exchange that a purse should be created
|
||||||
* and merged with a reserve.
|
* and merged with a reserve.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange hosting the reserve
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param reserve_priv private key of the reserve
|
* @param reserve_priv private key of the reserve
|
||||||
* @param purse_priv private key of the purse
|
* @param purse_priv private key of the purse
|
||||||
* @param merge_priv private key of the merge capability
|
* @param merge_priv private key of the merge capability
|
||||||
@ -6214,7 +6284,9 @@ struct TALER_EXCHANGE_PurseCreateMergeHandle;
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_PurseCreateMergeHandle *
|
struct TALER_EXCHANGE_PurseCreateMergeHandle *
|
||||||
TALER_EXCHANGE_purse_create_with_merge (
|
TALER_EXCHANGE_purse_create_with_merge (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
||||||
@ -6306,7 +6378,9 @@ struct TALER_EXCHANGE_PurseDepositHandle;
|
|||||||
* Inform the exchange that a deposit should be made into
|
* Inform the exchange that a deposit should be made into
|
||||||
* a purse.
|
* a purse.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange that issued the coins
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param purse_exchange_url base URL of the exchange hosting the purse
|
* @param purse_exchange_url base URL of the exchange hosting the purse
|
||||||
* @param purse_pub public key of the purse to merge
|
* @param purse_pub public key of the purse to merge
|
||||||
* @param min_age minimum age we need to prove for the purse
|
* @param min_age minimum age we need to prove for the purse
|
||||||
@ -6318,7 +6392,9 @@ struct TALER_EXCHANGE_PurseDepositHandle;
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_PurseDepositHandle *
|
struct TALER_EXCHANGE_PurseDepositHandle *
|
||||||
TALER_EXCHANGE_purse_deposit (
|
TALER_EXCHANGE_purse_deposit (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const char *purse_exchange_url,
|
const char *purse_exchange_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
uint8_t min_age,
|
uint8_t min_age,
|
||||||
@ -6442,7 +6518,9 @@ typedef void
|
|||||||
/**
|
/**
|
||||||
* Submit a request to open a reserve.
|
* Submit a request to open a reserve.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
|
* @param keys exchange keys
|
||||||
* @param reserve_priv private key of the reserve to open
|
* @param reserve_priv private key of the reserve to open
|
||||||
* @param reserve_contribution amount to pay from the reserve's balance for the operation
|
* @param reserve_contribution amount to pay from the reserve's balance for the operation
|
||||||
* @param coin_payments_length length of the @a coin_payments array
|
* @param coin_payments_length length of the @a coin_payments array
|
||||||
@ -6456,7 +6534,9 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_ReservesOpenHandle *
|
struct TALER_EXCHANGE_ReservesOpenHandle *
|
||||||
TALER_EXCHANGE_reserves_open (
|
TALER_EXCHANGE_reserves_open (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_Amount *reserve_contribution,
|
const struct TALER_Amount *reserve_contribution,
|
||||||
unsigned int coin_payments_length,
|
unsigned int coin_payments_length,
|
||||||
@ -6760,7 +6840,8 @@ typedef void
|
|||||||
/**
|
/**
|
||||||
* Submit a request to close a reserve.
|
* Submit a request to close a reserve.
|
||||||
*
|
*
|
||||||
* @param exchange the exchange handle; the exchange must be ready to operate
|
* @param ctx curl context
|
||||||
|
* @param url exchange base URL
|
||||||
* @param reserve_priv private key of the reserve to close
|
* @param reserve_priv private key of the reserve to close
|
||||||
* @param target_payto_uri where to send the payment, NULL to send to reserve origin
|
* @param target_payto_uri where to send the payment, NULL to send to reserve origin
|
||||||
* @param cb the callback to call when a reply for this request is available
|
* @param cb the callback to call when a reply for this request is available
|
||||||
@ -6770,7 +6851,8 @@ typedef void
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_ReservesCloseHandle *
|
struct TALER_EXCHANGE_ReservesCloseHandle *
|
||||||
TALER_EXCHANGE_reserves_close (
|
TALER_EXCHANGE_reserves_close (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const char *target_payto_uri,
|
const char *target_payto_uri,
|
||||||
TALER_EXCHANGE_ReservesCloseCallback cb,
|
TALER_EXCHANGE_ReservesCloseCallback cb,
|
||||||
|
@ -218,7 +218,8 @@ reserve_batch_withdraw_payment_required (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_parse_reserve_history (wh->exchange,
|
TALER_EXCHANGE_parse_reserve_history (
|
||||||
|
TALER_EXCHANGE_get_keys (wh->exchange),
|
||||||
history,
|
history,
|
||||||
&wh->reserve_pub,
|
&wh->reserve_pub,
|
||||||
balance.currency,
|
balance.currency,
|
||||||
|
@ -34,9 +34,9 @@ struct HistoryParseContext
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exchange we use.
|
* Keys of the exchange we use.
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Our reserve public key.
|
* Our reserve public key.
|
||||||
@ -187,7 +187,7 @@ parse_withdraw (struct TALER_EXCHANGE_ReserveHistoryEntry *rh,
|
|||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
const struct TALER_EXCHANGE_Keys *key_state;
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *dki;
|
const struct TALER_EXCHANGE_DenomPublicKey *dki;
|
||||||
|
|
||||||
key_state = TALER_EXCHANGE_get_keys (uc->exchange);
|
key_state = uc->keys;
|
||||||
dki = TALER_EXCHANGE_get_denomination_key_by_hash (key_state,
|
dki = TALER_EXCHANGE_get_denomination_key_by_hash (key_state,
|
||||||
&h_denom_pub);
|
&h_denom_pub);
|
||||||
if ( (GNUNET_YES !=
|
if ( (GNUNET_YES !=
|
||||||
@ -275,7 +275,7 @@ parse_recoup (struct TALER_EXCHANGE_ReserveHistoryEntry *rh,
|
|||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
key_state = TALER_EXCHANGE_get_keys (uc->exchange);
|
key_state = uc->keys;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (key_state,
|
||||||
&rh->details.
|
&rh->details.
|
||||||
@ -349,7 +349,7 @@ parse_closing (struct TALER_EXCHANGE_ReserveHistoryEntry *rh,
|
|||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
key_state = TALER_EXCHANGE_get_keys (uc->exchange);
|
key_state = uc->keys;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (
|
TALER_EXCHANGE_test_signing_key (
|
||||||
key_state,
|
key_state,
|
||||||
@ -647,7 +647,7 @@ parse_close (struct TALER_EXCHANGE_ReserveHistoryEntry *rh,
|
|||||||
|
|
||||||
enum GNUNET_GenericReturnValue
|
enum GNUNET_GenericReturnValue
|
||||||
TALER_EXCHANGE_parse_reserve_history (
|
TALER_EXCHANGE_parse_reserve_history (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const json_t *history,
|
const json_t *history,
|
||||||
const struct TALER_ReservePublicKeyP *reserve_pub,
|
const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||||
const char *currency,
|
const char *currency,
|
||||||
@ -673,7 +673,7 @@ TALER_EXCHANGE_parse_reserve_history (
|
|||||||
};
|
};
|
||||||
struct GNUNET_HashCode uuid[history_length];
|
struct GNUNET_HashCode uuid[history_length];
|
||||||
struct HistoryParseContext uc = {
|
struct HistoryParseContext uc = {
|
||||||
.exchange = exchange,
|
.keys = keys,
|
||||||
.reserve_pub = reserve_pub,
|
.reserve_pub = reserve_pub,
|
||||||
.uuids = uuid,
|
.uuids = uuid,
|
||||||
.total_in = total_in,
|
.total_in = total_in,
|
||||||
|
@ -38,10 +38,6 @@
|
|||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_CsRMeltHandle
|
struct TALER_EXCHANGE_CsRMeltHandle
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* The connection to exchange this request handle will use
|
|
||||||
*/
|
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function to call with the result.
|
* Function to call with the result.
|
||||||
@ -220,7 +216,9 @@ handle_csr_finished (void *cls,
|
|||||||
|
|
||||||
|
|
||||||
struct TALER_EXCHANGE_CsRMeltHandle *
|
struct TALER_EXCHANGE_CsRMeltHandle *
|
||||||
TALER_EXCHANGE_csr_melt (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_csr_melt (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
const struct TALER_RefreshMasterSecretP *rms,
|
const struct TALER_RefreshMasterSecretP *rms,
|
||||||
unsigned int nks_len,
|
unsigned int nks_len,
|
||||||
struct TALER_EXCHANGE_NonceKey *nks,
|
struct TALER_EXCHANGE_NonceKey *nks,
|
||||||
@ -242,7 +240,6 @@ TALER_EXCHANGE_csr_melt (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
csrh = GNUNET_new (struct TALER_EXCHANGE_CsRMeltHandle);
|
csrh = GNUNET_new (struct TALER_EXCHANGE_CsRMeltHandle);
|
||||||
csrh->exchange = exchange;
|
|
||||||
csrh->cb = res_cb;
|
csrh->cb = res_cb;
|
||||||
csrh->cb_cls = res_cb_cls;
|
csrh->cb_cls = res_cb_cls;
|
||||||
csr_arr = json_array ();
|
csr_arr = json_array ();
|
||||||
@ -262,8 +259,9 @@ TALER_EXCHANGE_csr_melt (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
json_array_append_new (csr_arr,
|
json_array_append_new (csr_arr,
|
||||||
csr_obj));
|
csr_obj));
|
||||||
}
|
}
|
||||||
csrh->url = TEAH_path_to_url (exchange,
|
csrh->url = TALER_url_join (url,
|
||||||
"/csr-melt");
|
"csr-melt",
|
||||||
|
NULL);
|
||||||
if (NULL == csrh->url)
|
if (NULL == csrh->url)
|
||||||
{
|
{
|
||||||
json_decref (csr_arr);
|
json_decref (csr_arr);
|
||||||
@ -272,7 +270,6 @@ TALER_EXCHANGE_csr_melt (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
json_t *req;
|
json_t *req;
|
||||||
|
|
||||||
req = GNUNET_JSON_PACK (
|
req = GNUNET_JSON_PACK (
|
||||||
@ -280,7 +277,6 @@ TALER_EXCHANGE_csr_melt (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
rms),
|
rms),
|
||||||
GNUNET_JSON_pack_array_steal ("nks",
|
GNUNET_JSON_pack_array_steal ("nks",
|
||||||
csr_arr));
|
csr_arr));
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
|
||||||
eh = TALER_EXCHANGE_curl_easy_get_ (csrh->url);
|
eh = TALER_EXCHANGE_curl_easy_get_ (csrh->url);
|
||||||
if ( (NULL == eh) ||
|
if ( (NULL == eh) ||
|
||||||
(GNUNET_OK !=
|
(GNUNET_OK !=
|
||||||
|
@ -39,9 +39,9 @@ struct TALER_EXCHANGE_DepositGetHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -131,7 +131,7 @@ handle_deposit_wtid_finished (void *cls,
|
|||||||
};
|
};
|
||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
const struct TALER_EXCHANGE_Keys *key_state;
|
||||||
|
|
||||||
key_state = TALER_EXCHANGE_get_keys (dwh->exchange);
|
key_state = dwh->keys;
|
||||||
GNUNET_assert (NULL != key_state);
|
GNUNET_assert (NULL != key_state);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_JSON_parse (j,
|
GNUNET_JSON_parse (j,
|
||||||
@ -255,7 +255,9 @@ handle_deposit_wtid_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_DepositGetHandle *
|
struct TALER_EXCHANGE_DepositGetHandle *
|
||||||
TALER_EXCHANGE_deposits_get (
|
TALER_EXCHANGE_deposits_get (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
const struct TALER_MerchantPrivateKeyP *merchant_priv,
|
||||||
const struct TALER_MerchantWireHashP *h_wire,
|
const struct TALER_MerchantWireHashP *h_wire,
|
||||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
@ -267,7 +269,6 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
struct TALER_MerchantPublicKeyP merchant;
|
struct TALER_MerchantPublicKeyP merchant;
|
||||||
struct TALER_MerchantSignatureP merchant_sig;
|
struct TALER_MerchantSignatureP merchant_sig;
|
||||||
struct TALER_EXCHANGE_DepositGetHandle *dwh;
|
struct TALER_EXCHANGE_DepositGetHandle *dwh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[(sizeof (struct TALER_CoinSpendPublicKeyP)
|
char arg_str[(sizeof (struct TALER_CoinSpendPublicKeyP)
|
||||||
+ sizeof (struct TALER_MerchantWireHashP)
|
+ sizeof (struct TALER_MerchantWireHashP)
|
||||||
@ -275,12 +276,6 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
+ sizeof (struct TALER_PrivateContractHashP)
|
+ sizeof (struct TALER_PrivateContractHashP)
|
||||||
+ sizeof (struct TALER_MerchantSignatureP)) * 2 + 48];
|
+ sizeof (struct TALER_MerchantSignatureP)) * 2 + 48];
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv,
|
||||||
&merchant.eddsa_pub);
|
&merchant.eddsa_pub);
|
||||||
TALER_merchant_deposit_sign (h_contract_terms,
|
TALER_merchant_deposit_sign (h_contract_terms,
|
||||||
@ -339,7 +334,7 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
|
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/deposits/%s/%s/%s/%s?merchant_sig=%s%s%s",
|
"deposits/%s/%s/%s/%s?merchant_sig=%s%s%s",
|
||||||
whash_str,
|
whash_str,
|
||||||
mpub_str,
|
mpub_str,
|
||||||
chash_str,
|
chash_str,
|
||||||
@ -352,11 +347,11 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
}
|
}
|
||||||
|
|
||||||
dwh = GNUNET_new (struct TALER_EXCHANGE_DepositGetHandle);
|
dwh = GNUNET_new (struct TALER_EXCHANGE_DepositGetHandle);
|
||||||
dwh->exchange = exchange;
|
|
||||||
dwh->cb = cb;
|
dwh->cb = cb;
|
||||||
dwh->cb_cls = cb_cls;
|
dwh->cb_cls = cb_cls;
|
||||||
dwh->url = TEAH_path_to_url (exchange,
|
dwh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == dwh->url)
|
if (NULL == dwh->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (dwh);
|
GNUNET_free (dwh);
|
||||||
@ -365,7 +360,6 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
dwh->h_wire = *h_wire;
|
dwh->h_wire = *h_wire;
|
||||||
dwh->h_contract_terms = *h_contract_terms;
|
dwh->h_contract_terms = *h_contract_terms;
|
||||||
dwh->coin_pub = *coin_pub;
|
dwh->coin_pub = *coin_pub;
|
||||||
|
|
||||||
eh = TALER_EXCHANGE_curl_easy_get_ (dwh->url);
|
eh = TALER_EXCHANGE_curl_easy_get_ (dwh->url);
|
||||||
if (NULL == eh)
|
if (NULL == eh)
|
||||||
{
|
{
|
||||||
@ -374,11 +368,11 @@ TALER_EXCHANGE_deposits_get (
|
|||||||
GNUNET_free (dwh);
|
GNUNET_free (dwh);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
|
||||||
dwh->job = GNUNET_CURL_job_add (ctx,
|
dwh->job = GNUNET_CURL_job_add (ctx,
|
||||||
eh,
|
eh,
|
||||||
&handle_deposit_wtid_finished,
|
&handle_deposit_wtid_finished,
|
||||||
dwh);
|
dwh);
|
||||||
|
dwh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
return dwh;
|
return dwh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,6 +387,7 @@ TALER_EXCHANGE_deposits_get_cancel (struct TALER_EXCHANGE_DepositGetHandle *dwh)
|
|||||||
}
|
}
|
||||||
GNUNET_free (dwh->url);
|
GNUNET_free (dwh->url);
|
||||||
TALER_curl_easy_post_finished (&dwh->ctx);
|
TALER_curl_easy_post_finished (&dwh->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (dwh->keys);
|
||||||
GNUNET_free (dwh);
|
GNUNET_free (dwh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2239,6 +2239,20 @@ TALER_EXCHANGE_get_keys_raw (struct TALER_EXCHANGE_Handle *exchange)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain the keys from the exchange in the raw JSON format.
|
||||||
|
*
|
||||||
|
* @param keys the keys structure
|
||||||
|
* @return the keys in raw JSON
|
||||||
|
*/
|
||||||
|
json_t *
|
||||||
|
TALER_EXCHANGE_keys_to_json (struct TALER_EXCHANGE_Keys *keys)
|
||||||
|
{
|
||||||
|
// FIXME!
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct TALER_EXCHANGE_Keys *
|
struct TALER_EXCHANGE_Keys *
|
||||||
TALER_EXCHANGE_keys_incref (struct TALER_EXCHANGE_Keys *keys)
|
TALER_EXCHANGE_keys_incref (struct TALER_EXCHANGE_Keys *keys)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2015-2022 Taler Systems SA
|
Copyright (C) 2015-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -41,15 +41,25 @@ struct TALER_EXCHANGE_MeltHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
*/
|
*/
|
||||||
char *url;
|
char *url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The exchange base url.
|
||||||
|
*/
|
||||||
|
char *exchange_url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Curl context.
|
||||||
|
*/
|
||||||
|
struct GNUNET_CURL_Context *cctx;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context for #TEH_curl_easy_post(). Keeps the data that must
|
* Context for #TEH_curl_easy_post(). Keeps the data that must
|
||||||
* persist for Curl to make the upload.
|
* persist for Curl to make the upload.
|
||||||
@ -159,7 +169,7 @@ verify_melt_signature_ok (struct TALER_EXCHANGE_MeltHandle *mh,
|
|||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
/* check that exchange signing key is permitted */
|
/* check that exchange signing key is permitted */
|
||||||
key_state = TALER_EXCHANGE_get_keys (mh->exchange);
|
key_state = mh->keys;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (key_state,
|
||||||
exchange_pub))
|
exchange_pub))
|
||||||
@ -211,7 +221,7 @@ handle_melt_finished (void *cls,
|
|||||||
const struct TALER_EXCHANGE_Keys *keys;
|
const struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
mh->job = NULL;
|
mh->job = NULL;
|
||||||
keys = TALER_EXCHANGE_get_keys (mh->exchange);
|
keys = mh->keys;
|
||||||
switch (response_code)
|
switch (response_code)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -309,7 +319,6 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
|
|||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
const struct TALER_EXCHANGE_Keys *key_state;
|
||||||
json_t *melt_obj;
|
json_t *melt_obj;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
||||||
struct TALER_DenominationHashP h_denom_pub;
|
struct TALER_DenominationHashP h_denom_pub;
|
||||||
struct TALER_ExchangeWithdrawValues alg_values[mh->rd->fresh_pks_len];
|
struct TALER_ExchangeWithdrawValues alg_values[mh->rd->fresh_pks_len];
|
||||||
@ -371,19 +380,19 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/coins/%s/melt",
|
"coins/%s/melt",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx = TEAH_handle_to_context (mh->exchange);
|
key_state = mh->keys;
|
||||||
key_state = TALER_EXCHANGE_get_keys (mh->exchange);
|
|
||||||
mh->dki = TALER_EXCHANGE_get_denomination_key (key_state,
|
mh->dki = TALER_EXCHANGE_get_denomination_key (key_state,
|
||||||
&mh->md.melted_coin.pub_key);
|
&mh->md.melted_coin.pub_key);
|
||||||
|
|
||||||
/* and now we can at last begin the actual request handling */
|
/* and now we can at last begin the actual request handling */
|
||||||
|
|
||||||
mh->url = TEAH_path_to_url (mh->exchange,
|
mh->url = TALER_url_join (mh->exchange_url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == mh->url)
|
if (NULL == mh->url)
|
||||||
{
|
{
|
||||||
json_decref (melt_obj);
|
json_decref (melt_obj);
|
||||||
@ -403,7 +412,7 @@ start_melt (struct TALER_EXCHANGE_MeltHandle *mh)
|
|||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
json_decref (melt_obj);
|
json_decref (melt_obj);
|
||||||
mh->job = GNUNET_CURL_job_add2 (ctx,
|
mh->job = GNUNET_CURL_job_add2 (mh->cctx,
|
||||||
eh,
|
eh,
|
||||||
mh->ctx.headers,
|
mh->ctx.headers,
|
||||||
&handle_melt_finished,
|
&handle_melt_finished,
|
||||||
@ -496,7 +505,10 @@ csr_cb (void *cls,
|
|||||||
|
|
||||||
|
|
||||||
struct TALER_EXCHANGE_MeltHandle *
|
struct TALER_EXCHANGE_MeltHandle *
|
||||||
TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_melt (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_RefreshMasterSecretP *rms,
|
const struct TALER_RefreshMasterSecretP *rms,
|
||||||
const struct TALER_EXCHANGE_RefreshData *rd,
|
const struct TALER_EXCHANGE_RefreshData *rd,
|
||||||
TALER_EXCHANGE_MeltCallback melt_cb,
|
TALER_EXCHANGE_MeltCallback melt_cb,
|
||||||
@ -511,11 +523,10 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
mh = GNUNET_new (struct TALER_EXCHANGE_MeltHandle);
|
mh = GNUNET_new (struct TALER_EXCHANGE_MeltHandle);
|
||||||
mh->noreveal_index = TALER_CNC_KAPPA; /* invalid value */
|
mh->noreveal_index = TALER_CNC_KAPPA; /* invalid value */
|
||||||
mh->exchange = exchange;
|
mh->cctx = ctx;
|
||||||
|
mh->exchange_url = GNUNET_strdup (url);
|
||||||
mh->rd = rd;
|
mh->rd = rd;
|
||||||
mh->rms = *rms;
|
mh->rms = *rms;
|
||||||
mh->melt_cb = melt_cb;
|
mh->melt_cb = melt_cb;
|
||||||
@ -545,9 +556,11 @@ TALER_EXCHANGE_melt (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
if (0 != nks_off)
|
if (0 != nks_off)
|
||||||
{
|
{
|
||||||
mh->csr = TALER_EXCHANGE_csr_melt (exchange,
|
mh->csr = TALER_EXCHANGE_csr_melt (ctx,
|
||||||
|
url,
|
||||||
rms,
|
rms,
|
||||||
nks_off,
|
nks_off,
|
||||||
nks,
|
nks,
|
||||||
@ -588,7 +601,9 @@ TALER_EXCHANGE_melt_cancel (struct TALER_EXCHANGE_MeltHandle *mh)
|
|||||||
TALER_EXCHANGE_free_melt_data_ (&mh->md); /* does not free 'md' itself */
|
TALER_EXCHANGE_free_melt_data_ (&mh->md); /* does not free 'md' itself */
|
||||||
GNUNET_free (mh->mbds);
|
GNUNET_free (mh->mbds);
|
||||||
GNUNET_free (mh->url);
|
GNUNET_free (mh->url);
|
||||||
|
GNUNET_free (mh->exchange_url);
|
||||||
TALER_curl_easy_post_finished (&mh->ctx);
|
TALER_curl_easy_post_finished (&mh->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (mh->keys);
|
||||||
GNUNET_free (mh);
|
GNUNET_free (mh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2022 Taler Systems SA
|
Copyright (C) 2022-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -73,15 +73,20 @@ struct TALER_EXCHANGE_PurseCreateDepositHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
*/
|
*/
|
||||||
char *url;
|
char *url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The base URL of the exchange.
|
||||||
|
*/
|
||||||
|
char *exchange_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context for #TEH_curl_easy_post(). Keeps the data that must
|
* Context for #TEH_curl_easy_post(). Keeps the data that must
|
||||||
* persist for Curl to make the upload.
|
* persist for Curl to make the upload.
|
||||||
@ -170,10 +175,9 @@ handle_purse_create_deposit_finished (void *cls,
|
|||||||
.hr.reply = j,
|
.hr.reply = j,
|
||||||
.hr.http_status = (unsigned int) response_code
|
.hr.http_status = (unsigned int) response_code
|
||||||
};
|
};
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
const struct TALER_EXCHANGE_Keys *keys = pch->keys;
|
||||||
|
|
||||||
pch->job = NULL;
|
pch->job = NULL;
|
||||||
keys = TALER_EXCHANGE_get_keys (pch->exchange);
|
|
||||||
switch (response_code)
|
switch (response_code)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -181,7 +185,6 @@ handle_purse_create_deposit_finished (void *cls,
|
|||||||
break;
|
break;
|
||||||
case MHD_HTTP_OK:
|
case MHD_HTTP_OK:
|
||||||
{
|
{
|
||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
|
||||||
struct GNUNET_TIME_Timestamp etime;
|
struct GNUNET_TIME_Timestamp etime;
|
||||||
struct TALER_Amount total_deposited;
|
struct TALER_Amount total_deposited;
|
||||||
struct TALER_ExchangeSignatureP exchange_sig;
|
struct TALER_ExchangeSignatureP exchange_sig;
|
||||||
@ -209,9 +212,8 @@ handle_purse_create_deposit_finished (void *cls,
|
|||||||
dr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
dr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
key_state = TALER_EXCHANGE_get_keys (pch->exchange);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (keys,
|
||||||
&exchange_pub))
|
&exchange_pub))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -387,7 +389,7 @@ handle_purse_create_deposit_finished (void *cls,
|
|||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_check_purse_coin_conflict_ (
|
TALER_EXCHANGE_check_purse_coin_conflict_ (
|
||||||
&pch->purse_pub,
|
&pch->purse_pub,
|
||||||
pch->exchange->url,
|
pch->exchange_url,
|
||||||
j,
|
j,
|
||||||
&h_denom_pub,
|
&h_denom_pub,
|
||||||
&phac,
|
&phac,
|
||||||
@ -496,7 +498,9 @@ handle_purse_create_deposit_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_PurseCreateDepositHandle *
|
struct TALER_EXCHANGE_PurseCreateDepositHandle *
|
||||||
TALER_EXCHANGE_purse_create_with_deposit (
|
TALER_EXCHANGE_purse_create_with_deposit (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
||||||
const struct TALER_ContractDiffiePrivateP *contract_priv,
|
const struct TALER_ContractDiffiePrivateP *contract_priv,
|
||||||
@ -508,16 +512,13 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_PurseCreateDepositHandle *pch;
|
struct TALER_EXCHANGE_PurseCreateDepositHandle *pch;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
json_t *create_obj;
|
json_t *create_obj;
|
||||||
json_t *deposit_arr;
|
json_t *deposit_arr;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (pch->purse_pub) * 2 + 32];
|
char arg_str[sizeof (pch->purse_pub) * 2 + 32];
|
||||||
char *url;
|
|
||||||
uint32_t min_age = 0;
|
uint32_t min_age = 0;
|
||||||
|
|
||||||
pch = GNUNET_new (struct TALER_EXCHANGE_PurseCreateDepositHandle);
|
pch = GNUNET_new (struct TALER_EXCHANGE_PurseCreateDepositHandle);
|
||||||
pch->exchange = exchange;
|
|
||||||
pch->cb = cb;
|
pch->cb = cb;
|
||||||
pch->cb_cls = cb_cls;
|
pch->cb_cls = cb_cls;
|
||||||
{
|
{
|
||||||
@ -542,8 +543,6 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_JSON_contract_hash (contract_terms,
|
TALER_JSON_contract_hash (contract_terms,
|
||||||
&pch->h_contract_terms))
|
&pch->h_contract_terms))
|
||||||
@ -565,13 +564,14 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/purses/%s/create",
|
"purses/%s/create",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&merge_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&merge_priv->eddsa_priv,
|
||||||
&pch->merge_pub.eddsa_pub);
|
&pch->merge_pub.eddsa_pub);
|
||||||
pch->url = TEAH_path_to_url (exchange,
|
pch->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == pch->url)
|
if (NULL == pch->url)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -583,8 +583,6 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
struct Deposit);
|
struct Deposit);
|
||||||
deposit_arr = json_array ();
|
deposit_arr = json_array ();
|
||||||
GNUNET_assert (NULL != deposit_arr);
|
GNUNET_assert (NULL != deposit_arr);
|
||||||
url = TEAH_path_to_url (exchange,
|
|
||||||
"/");
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Signing with URL `%s'\n",
|
"Signing with URL `%s'\n",
|
||||||
url);
|
url);
|
||||||
@ -610,7 +608,6 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
json_decref (deposit_arr);
|
json_decref (deposit_arr);
|
||||||
GNUNET_free (url);
|
|
||||||
GNUNET_free (pch);
|
GNUNET_free (pch);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -648,7 +645,6 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
json_array_append_new (deposit_arr,
|
json_array_append_new (deposit_arr,
|
||||||
jdeposit));
|
jdeposit));
|
||||||
}
|
}
|
||||||
GNUNET_free (url);
|
|
||||||
TALER_wallet_purse_create_sign (pch->purse_expiration,
|
TALER_wallet_purse_create_sign (pch->purse_expiration,
|
||||||
&pch->h_contract_terms,
|
&pch->h_contract_terms,
|
||||||
&pch->merge_pub,
|
&pch->merge_pub,
|
||||||
@ -714,7 +710,8 @@ TALER_EXCHANGE_purse_create_with_deposit (
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for purse create with deposit: `%s'\n",
|
"URL for purse create with deposit: `%s'\n",
|
||||||
pch->url);
|
pch->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
pch->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
|
pch->exchange_url = GNUNET_strdup (url);
|
||||||
pch->job = GNUNET_CURL_job_add2 (ctx,
|
pch->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
pch->ctx.headers,
|
pch->ctx.headers,
|
||||||
@ -734,8 +731,10 @@ TALER_EXCHANGE_purse_create_with_deposit_cancel (
|
|||||||
pch->job = NULL;
|
pch->job = NULL;
|
||||||
}
|
}
|
||||||
GNUNET_free (pch->econtract.econtract);
|
GNUNET_free (pch->econtract.econtract);
|
||||||
|
GNUNET_free (pch->exchange_url);
|
||||||
GNUNET_free (pch->url);
|
GNUNET_free (pch->url);
|
||||||
GNUNET_free (pch->deposits);
|
GNUNET_free (pch->deposits);
|
||||||
|
TALER_EXCHANGE_keys_decref (pch->keys);
|
||||||
TALER_curl_easy_post_finished (&pch->ctx);
|
TALER_curl_easy_post_finished (&pch->ctx);
|
||||||
GNUNET_free (pch);
|
GNUNET_free (pch);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2022 Taler Systems SA
|
Copyright (C) 2022-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -41,15 +41,20 @@ struct TALER_EXCHANGE_PurseCreateMergeHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
*/
|
*/
|
||||||
char *url;
|
char *url;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The exchange base URL.
|
||||||
|
*/
|
||||||
|
char *exchange_url;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context for #TEH_curl_easy_post(). Keeps the data that must
|
* Context for #TEH_curl_easy_post(). Keeps the data that must
|
||||||
* persist for Curl to make the upload.
|
* persist for Curl to make the upload.
|
||||||
@ -157,7 +162,6 @@ handle_purse_create_with_merge_finished (void *cls,
|
|||||||
break;
|
break;
|
||||||
case MHD_HTTP_OK:
|
case MHD_HTTP_OK:
|
||||||
{
|
{
|
||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
|
||||||
struct GNUNET_TIME_Timestamp etime;
|
struct GNUNET_TIME_Timestamp etime;
|
||||||
struct TALER_Amount total_deposited;
|
struct TALER_Amount total_deposited;
|
||||||
struct TALER_ExchangeSignatureP exchange_sig;
|
struct TALER_ExchangeSignatureP exchange_sig;
|
||||||
@ -184,9 +188,8 @@ handle_purse_create_with_merge_finished (void *cls,
|
|||||||
dr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
dr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
key_state = TALER_EXCHANGE_get_keys (pcm->exchange);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (pcm->keys,
|
||||||
&exchange_pub))
|
&exchange_pub))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -253,7 +256,7 @@ handle_purse_create_with_merge_finished (void *cls,
|
|||||||
&pcm->merge_sig,
|
&pcm->merge_sig,
|
||||||
&pcm->merge_pub,
|
&pcm->merge_pub,
|
||||||
&pcm->purse_pub,
|
&pcm->purse_pub,
|
||||||
pcm->exchange->url,
|
pcm->exchange_url,
|
||||||
j))
|
j))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -340,7 +343,9 @@ handle_purse_create_with_merge_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_PurseCreateMergeHandle *
|
struct TALER_EXCHANGE_PurseCreateMergeHandle *
|
||||||
TALER_EXCHANGE_purse_create_with_merge (
|
TALER_EXCHANGE_purse_create_with_merge (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
const struct TALER_PurseContractPrivateKeyP *purse_priv,
|
||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
const struct TALER_PurseMergePrivateKeyP *merge_priv,
|
||||||
@ -353,7 +358,6 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_PurseCreateMergeHandle *pcm;
|
struct TALER_EXCHANGE_PurseCreateMergeHandle *pcm;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
json_t *create_with_merge_obj;
|
json_t *create_with_merge_obj;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (pcm->reserve_pub) * 2 + 32];
|
char arg_str[sizeof (pcm->reserve_pub) * 2 + 32];
|
||||||
@ -362,7 +366,6 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
enum TALER_WalletAccountMergeFlags flags;
|
enum TALER_WalletAccountMergeFlags flags;
|
||||||
|
|
||||||
pcm = GNUNET_new (struct TALER_EXCHANGE_PurseCreateMergeHandle);
|
pcm = GNUNET_new (struct TALER_EXCHANGE_PurseCreateMergeHandle);
|
||||||
pcm->exchange = exchange;
|
|
||||||
pcm->cb = cb;
|
pcm->cb = cb;
|
||||||
pcm->cb_cls = cb_cls;
|
pcm->cb_cls = cb_cls;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
@ -409,7 +412,7 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
const struct TALER_EXCHANGE_GlobalFee *gf;
|
const struct TALER_EXCHANGE_GlobalFee *gf;
|
||||||
|
|
||||||
gf = TALER_EXCHANGE_get_global_fee (
|
gf = TALER_EXCHANGE_get_global_fee (
|
||||||
TALER_EXCHANGE_get_keys (exchange),
|
keys,
|
||||||
GNUNET_TIME_timestamp_get ());
|
GNUNET_TIME_timestamp_get ());
|
||||||
purse_fee = gf->fees.purse;
|
purse_fee = gf->fees.purse;
|
||||||
flags = TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE;
|
flags = TALER_WAMF_MODE_CREATE_WITH_PURSE_FEE;
|
||||||
@ -422,8 +425,6 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
flags = TALER_WAMF_MODE_CREATE_FROM_PURSE_QUOTA;
|
flags = TALER_WAMF_MODE_CREATE_FROM_PURSE_QUOTA;
|
||||||
}
|
}
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
{
|
{
|
||||||
char pub_str[sizeof (pcm->reserve_pub) * 2];
|
char pub_str[sizeof (pcm->reserve_pub) * 2];
|
||||||
char *end;
|
char *end;
|
||||||
@ -436,11 +437,12 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/reserves/%s/purse",
|
"reserves/%s/purse",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
pcm->url = TEAH_path_to_url (exchange,
|
pcm->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == pcm->url)
|
if (NULL == pcm->url)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -457,7 +459,7 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
{
|
{
|
||||||
char *payto_uri;
|
char *payto_uri;
|
||||||
|
|
||||||
payto_uri = TALER_reserve_make_payto (exchange->url,
|
payto_uri = TALER_reserve_make_payto (url,
|
||||||
&pcm->reserve_pub);
|
&pcm->reserve_pub);
|
||||||
TALER_wallet_purse_merge_sign (payto_uri,
|
TALER_wallet_purse_merge_sign (payto_uri,
|
||||||
merge_timestamp,
|
merge_timestamp,
|
||||||
@ -546,7 +548,8 @@ TALER_EXCHANGE_purse_create_with_merge (
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for purse create_with_merge: `%s'\n",
|
"URL for purse create_with_merge: `%s'\n",
|
||||||
pcm->url);
|
pcm->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
pcm->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
|
pcm->exchange_url = GNUNET_strdup (url);
|
||||||
pcm->job = GNUNET_CURL_job_add2 (ctx,
|
pcm->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
pcm->ctx.headers,
|
pcm->ctx.headers,
|
||||||
@ -566,7 +569,9 @@ TALER_EXCHANGE_purse_create_with_merge_cancel (
|
|||||||
pcm->job = NULL;
|
pcm->job = NULL;
|
||||||
}
|
}
|
||||||
GNUNET_free (pcm->url);
|
GNUNET_free (pcm->url);
|
||||||
|
GNUNET_free (pcm->exchange_url);
|
||||||
TALER_curl_easy_post_finished (&pcm->ctx);
|
TALER_curl_easy_post_finished (&pcm->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (pcm->keys);
|
||||||
GNUNET_free (pcm->econtract.econtract);
|
GNUNET_free (pcm->econtract.econtract);
|
||||||
GNUNET_free (pcm);
|
GNUNET_free (pcm);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2022 Taler Systems SA
|
Copyright (C) 2022-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -73,9 +73,9 @@ struct TALER_EXCHANGE_PurseDepositHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -144,10 +144,9 @@ handle_purse_deposit_finished (void *cls,
|
|||||||
.hr.reply = j,
|
.hr.reply = j,
|
||||||
.hr.http_status = (unsigned int) response_code
|
.hr.http_status = (unsigned int) response_code
|
||||||
};
|
};
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
const struct TALER_EXCHANGE_Keys *keys = pch->keys;
|
||||||
|
|
||||||
pch->job = NULL;
|
pch->job = NULL;
|
||||||
keys = TALER_EXCHANGE_get_keys (pch->exchange);
|
|
||||||
switch (response_code)
|
switch (response_code)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -447,7 +446,9 @@ handle_purse_deposit_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_PurseDepositHandle *
|
struct TALER_EXCHANGE_PurseDepositHandle *
|
||||||
TALER_EXCHANGE_purse_deposit (
|
TALER_EXCHANGE_purse_deposit (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const char *purse_exchange_url,
|
const char *purse_exchange_url,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
uint8_t min_age,
|
uint8_t min_age,
|
||||||
@ -457,7 +458,6 @@ TALER_EXCHANGE_purse_deposit (
|
|||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_PurseDepositHandle *pch;
|
struct TALER_EXCHANGE_PurseDepositHandle *pch;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
json_t *create_obj;
|
json_t *create_obj;
|
||||||
json_t *deposit_arr;
|
json_t *deposit_arr;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
@ -470,11 +470,8 @@ TALER_EXCHANGE_purse_deposit (
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
pch = GNUNET_new (struct TALER_EXCHANGE_PurseDepositHandle);
|
pch = GNUNET_new (struct TALER_EXCHANGE_PurseDepositHandle);
|
||||||
pch->purse_pub = *purse_pub;
|
pch->purse_pub = *purse_pub;
|
||||||
pch->exchange = exchange;
|
|
||||||
pch->cb = cb;
|
pch->cb = cb;
|
||||||
pch->cb_cls = cb_cls;
|
pch->cb_cls = cb_cls;
|
||||||
{
|
{
|
||||||
@ -489,11 +486,12 @@ TALER_EXCHANGE_purse_deposit (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/purses/%s/deposit",
|
"purses/%s/deposit",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
pch->url = TEAH_path_to_url (exchange,
|
pch->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == pch->url)
|
if (NULL == pch->url)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -502,8 +500,7 @@ TALER_EXCHANGE_purse_deposit (
|
|||||||
}
|
}
|
||||||
deposit_arr = json_array ();
|
deposit_arr = json_array ();
|
||||||
GNUNET_assert (NULL != deposit_arr);
|
GNUNET_assert (NULL != deposit_arr);
|
||||||
pch->base_url = TEAH_path_to_url (exchange,
|
pch->base_url = GNUNET_strdup (url);
|
||||||
"/");
|
|
||||||
pch->num_deposits = num_deposits;
|
pch->num_deposits = num_deposits;
|
||||||
pch->coins = GNUNET_new_array (num_deposits,
|
pch->coins = GNUNET_new_array (num_deposits,
|
||||||
struct Coin);
|
struct Coin);
|
||||||
@ -594,7 +591,7 @@ TALER_EXCHANGE_purse_deposit (
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for purse deposit: `%s'\n",
|
"URL for purse deposit: `%s'\n",
|
||||||
pch->url);
|
pch->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
pch->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
pch->job = GNUNET_CURL_job_add2 (ctx,
|
pch->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
pch->ctx.headers,
|
pch->ctx.headers,
|
||||||
@ -616,6 +613,7 @@ TALER_EXCHANGE_purse_deposit_cancel (
|
|||||||
GNUNET_free (pch->base_url);
|
GNUNET_free (pch->base_url);
|
||||||
GNUNET_free (pch->url);
|
GNUNET_free (pch->url);
|
||||||
GNUNET_free (pch->coins);
|
GNUNET_free (pch->coins);
|
||||||
|
TALER_EXCHANGE_keys_decref (pch->keys);
|
||||||
TALER_curl_easy_post_finished (&pch->ctx);
|
TALER_curl_easy_post_finished (&pch->ctx);
|
||||||
GNUNET_free (pch);
|
GNUNET_free (pch);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2022 Taler Systems SA
|
Copyright (C) 2022-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -41,9 +41,9 @@ struct TALER_EXCHANGE_AccountMergeHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -148,7 +148,6 @@ handle_purse_merge_finished (void *cls,
|
|||||||
break;
|
break;
|
||||||
case MHD_HTTP_OK:
|
case MHD_HTTP_OK:
|
||||||
{
|
{
|
||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
|
||||||
struct TALER_Amount total_deposited;
|
struct TALER_Amount total_deposited;
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
struct GNUNET_JSON_Specification spec[] = {
|
||||||
GNUNET_JSON_spec_fixed_auto ("exchange_sig",
|
GNUNET_JSON_spec_fixed_auto ("exchange_sig",
|
||||||
@ -173,9 +172,8 @@ handle_purse_merge_finished (void *cls,
|
|||||||
dr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
dr.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
key_state = TALER_EXCHANGE_get_keys (pch->exchange);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (pch->keys,
|
||||||
&dr.details.ok.exchange_pub))
|
&dr.details.ok.exchange_pub))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -302,7 +300,9 @@ handle_purse_merge_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_AccountMergeHandle *
|
struct TALER_EXCHANGE_AccountMergeHandle *
|
||||||
TALER_EXCHANGE_account_merge (
|
TALER_EXCHANGE_account_merge (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const char *reserve_exchange_url,
|
const char *reserve_exchange_url,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
@ -316,14 +316,12 @@ TALER_EXCHANGE_account_merge (
|
|||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_AccountMergeHandle *pch;
|
struct TALER_EXCHANGE_AccountMergeHandle *pch;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
json_t *merge_obj;
|
json_t *merge_obj;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (pch->purse_pub) * 2 + 32];
|
char arg_str[sizeof (pch->purse_pub) * 2 + 32];
|
||||||
char *reserve_url;
|
char *reserve_url;
|
||||||
|
|
||||||
pch = GNUNET_new (struct TALER_EXCHANGE_AccountMergeHandle);
|
pch = GNUNET_new (struct TALER_EXCHANGE_AccountMergeHandle);
|
||||||
pch->exchange = exchange;
|
|
||||||
pch->merge_priv = *merge_priv;
|
pch->merge_priv = *merge_priv;
|
||||||
pch->cb = cb;
|
pch->cb = cb;
|
||||||
pch->cb_cls = cb_cls;
|
pch->cb_cls = cb_cls;
|
||||||
@ -332,14 +330,12 @@ TALER_EXCHANGE_account_merge (
|
|||||||
pch->purse_expiration = purse_expiration;
|
pch->purse_expiration = purse_expiration;
|
||||||
pch->purse_value_after_fees = *purse_value_after_fees;
|
pch->purse_value_after_fees = *purse_value_after_fees;
|
||||||
if (NULL == reserve_exchange_url)
|
if (NULL == reserve_exchange_url)
|
||||||
pch->provider_url = GNUNET_strdup (exchange->url);
|
pch->provider_url = GNUNET_strdup (url);
|
||||||
else
|
else
|
||||||
pch->provider_url = GNUNET_strdup (reserve_exchange_url);
|
pch->provider_url = GNUNET_strdup (reserve_exchange_url);
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv,
|
||||||
&pch->reserve_pub.eddsa_pub);
|
&pch->reserve_pub.eddsa_pub);
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
{
|
{
|
||||||
char pub_str[sizeof (*purse_pub) * 2];
|
char pub_str[sizeof (*purse_pub) * 2];
|
||||||
char *end;
|
char *end;
|
||||||
@ -352,7 +348,7 @@ TALER_EXCHANGE_account_merge (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/purses/%s/merge",
|
"purses/%s/merge",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
reserve_url = TALER_reserve_make_payto (pch->provider_url,
|
reserve_url = TALER_reserve_make_payto (pch->provider_url,
|
||||||
@ -364,8 +360,9 @@ TALER_EXCHANGE_account_merge (
|
|||||||
GNUNET_free (pch);
|
GNUNET_free (pch);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
pch->url = TEAH_path_to_url (exchange,
|
pch->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == pch->url)
|
if (NULL == pch->url)
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -426,7 +423,7 @@ TALER_EXCHANGE_account_merge (
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for purse merge: `%s'\n",
|
"URL for purse merge: `%s'\n",
|
||||||
pch->url);
|
pch->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
pch->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
pch->job = GNUNET_CURL_job_add2 (ctx,
|
pch->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
pch->ctx.headers,
|
pch->ctx.headers,
|
||||||
@ -448,6 +445,7 @@ TALER_EXCHANGE_account_merge_cancel (
|
|||||||
GNUNET_free (pch->url);
|
GNUNET_free (pch->url);
|
||||||
GNUNET_free (pch->provider_url);
|
GNUNET_free (pch->provider_url);
|
||||||
TALER_curl_easy_post_finished (&pch->ctx);
|
TALER_curl_easy_post_finished (&pch->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (pch->keys);
|
||||||
GNUNET_free (pch);
|
GNUNET_free (pch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2022 Taler Systems SA
|
Copyright (C) 2022-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -39,9 +39,9 @@ struct TALER_EXCHANGE_PurseGetHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -117,7 +117,6 @@ handle_purse_get_finished (void *cls,
|
|||||||
&exchange_sig),
|
&exchange_sig),
|
||||||
GNUNET_JSON_spec_end ()
|
GNUNET_JSON_spec_end ()
|
||||||
};
|
};
|
||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
|
||||||
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_JSON_parse (j,
|
GNUNET_JSON_parse (j,
|
||||||
@ -130,9 +129,8 @@ handle_purse_get_finished (void *cls,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
key_state = TALER_EXCHANGE_get_keys (pgh->exchange);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (pgh->keys,
|
||||||
&exchange_pub))
|
&exchange_pub))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -207,7 +205,9 @@ handle_purse_get_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_PurseGetHandle *
|
struct TALER_EXCHANGE_PurseGetHandle *
|
||||||
TALER_EXCHANGE_purse_get (
|
TALER_EXCHANGE_purse_get (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
const struct TALER_PurseContractPublicKeyP *purse_pub,
|
||||||
struct GNUNET_TIME_Relative timeout,
|
struct GNUNET_TIME_Relative timeout,
|
||||||
bool wait_for_merge,
|
bool wait_for_merge,
|
||||||
@ -218,14 +218,7 @@ TALER_EXCHANGE_purse_get (
|
|||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (*purse_pub) * 2 + 64];
|
char arg_str[sizeof (*purse_pub) * 2 + 64];
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
pgh = GNUNET_new (struct TALER_EXCHANGE_PurseGetHandle);
|
pgh = GNUNET_new (struct TALER_EXCHANGE_PurseGetHandle);
|
||||||
pgh->exchange = exchange;
|
|
||||||
pgh->cb = cb;
|
pgh->cb = cb;
|
||||||
pgh->cb_cls = cb_cls;
|
pgh->cb_cls = cb_cls;
|
||||||
{
|
{
|
||||||
@ -247,19 +240,20 @@ TALER_EXCHANGE_purse_get (
|
|||||||
if (GNUNET_TIME_relative_is_zero (timeout))
|
if (GNUNET_TIME_relative_is_zero (timeout))
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/purses/%s/%s",
|
"purses/%s/%s",
|
||||||
cpub_str,
|
cpub_str,
|
||||||
wait_for_merge ? "merge" : "deposit");
|
wait_for_merge ? "merge" : "deposit");
|
||||||
else
|
else
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/purses/%s/%s?timeout_ms=%s",
|
"purses/%s/%s?timeout_ms=%s",
|
||||||
cpub_str,
|
cpub_str,
|
||||||
wait_for_merge ? "merge" : "deposit",
|
wait_for_merge ? "merge" : "deposit",
|
||||||
timeout_str);
|
timeout_str);
|
||||||
}
|
}
|
||||||
pgh->url = TEAH_path_to_url (exchange,
|
pgh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == pgh->url)
|
if (NULL == pgh->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (pgh);
|
GNUNET_free (pgh);
|
||||||
@ -273,10 +267,11 @@ TALER_EXCHANGE_purse_get (
|
|||||||
GNUNET_free (pgh);
|
GNUNET_free (pgh);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
pgh->job = GNUNET_CURL_job_add (TEAH_handle_to_context (exchange),
|
pgh->job = GNUNET_CURL_job_add (ctx,
|
||||||
eh,
|
eh,
|
||||||
&handle_purse_get_finished,
|
&handle_purse_get_finished,
|
||||||
pgh);
|
pgh);
|
||||||
|
pgh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
return pgh;
|
return pgh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,6 +286,7 @@ TALER_EXCHANGE_purse_get_cancel (
|
|||||||
pgh->job = NULL;
|
pgh->job = NULL;
|
||||||
}
|
}
|
||||||
GNUNET_free (pgh->url);
|
GNUNET_free (pgh->url);
|
||||||
|
TALER_EXCHANGE_keys_decref (pgh->keys);
|
||||||
GNUNET_free (pgh);
|
GNUNET_free (pgh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,9 +40,9 @@ struct TALER_EXCHANGE_RecoupHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -143,10 +143,8 @@ handle_recoup_finished (void *cls,
|
|||||||
.hr.reply = j,
|
.hr.reply = j,
|
||||||
.hr.http_status = (unsigned int) response_code
|
.hr.http_status = (unsigned int) response_code
|
||||||
};
|
};
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
|
||||||
|
|
||||||
ph->job = NULL;
|
ph->job = NULL;
|
||||||
keys = TALER_EXCHANGE_get_keys (ph->exchange);
|
|
||||||
switch (response_code)
|
switch (response_code)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -177,7 +175,7 @@ handle_recoup_finished (void *cls,
|
|||||||
rr.hr.ec = TALER_JSON_get_error_code (j);
|
rr.hr.ec = TALER_JSON_get_error_code (j);
|
||||||
rr.hr.hint = TALER_JSON_get_error_hint (j);
|
rr.hr.hint = TALER_JSON_get_error_hint (j);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_get_min_denomination_ (keys,
|
TALER_EXCHANGE_get_min_denomination_ (ph->keys,
|
||||||
&min_key))
|
&min_key))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -187,7 +185,7 @@ handle_recoup_finished (void *cls,
|
|||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_check_coin_conflict_ (
|
TALER_EXCHANGE_check_coin_conflict_ (
|
||||||
keys,
|
ph->keys,
|
||||||
j,
|
j,
|
||||||
&ph->pk,
|
&ph->pk,
|
||||||
&ph->coin_pub,
|
&ph->coin_pub,
|
||||||
@ -244,7 +242,10 @@ handle_recoup_finished (void *cls,
|
|||||||
|
|
||||||
|
|
||||||
struct TALER_EXCHANGE_RecoupHandle *
|
struct TALER_EXCHANGE_RecoupHandle *
|
||||||
TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
TALER_EXCHANGE_recoup (
|
||||||
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
||||||
const struct TALER_DenominationSignature *denom_sig,
|
const struct TALER_DenominationSignature *denom_sig,
|
||||||
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
||||||
@ -253,7 +254,6 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
void *recoup_cb_cls)
|
void *recoup_cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_RecoupHandle *ph;
|
struct TALER_EXCHANGE_RecoupHandle *ph;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
struct TALER_DenominationHashP h_denom_pub;
|
struct TALER_DenominationHashP h_denom_pub;
|
||||||
json_t *recoup_obj;
|
json_t *recoup_obj;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
@ -261,8 +261,6 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
struct TALER_CoinSpendPrivateKeyP coin_priv;
|
||||||
union TALER_DenominationBlindingKeyP bks;
|
union TALER_DenominationBlindingKeyP bks;
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
ph = GNUNET_new (struct TALER_EXCHANGE_RecoupHandle);
|
ph = GNUNET_new (struct TALER_EXCHANGE_RecoupHandle);
|
||||||
TALER_planchet_setup_coin_priv (ps,
|
TALER_planchet_setup_coin_priv (ps,
|
||||||
exchange_vals,
|
exchange_vals,
|
||||||
@ -319,19 +317,19 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/coins/%s/recoup",
|
"coins/%s/recoup",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
ph->exchange = exchange;
|
|
||||||
ph->pk = *pk;
|
ph->pk = *pk;
|
||||||
memset (&ph->pk.key,
|
memset (&ph->pk.key,
|
||||||
0,
|
0,
|
||||||
sizeof (ph->pk.key)); /* zero out, as lifetime cannot be warranted */
|
sizeof (ph->pk.key)); /* zero out, as lifetime cannot be warranted */
|
||||||
ph->cb = recoup_cb;
|
ph->cb = recoup_cb;
|
||||||
ph->cb_cls = recoup_cb_cls;
|
ph->cb_cls = recoup_cb_cls;
|
||||||
ph->url = TEAH_path_to_url (exchange,
|
ph->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == ph->url)
|
if (NULL == ph->url)
|
||||||
{
|
{
|
||||||
json_decref (recoup_obj);
|
json_decref (recoup_obj);
|
||||||
@ -357,7 +355,7 @@ TALER_EXCHANGE_recoup (struct TALER_EXCHANGE_Handle *exchange,
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for recoup: `%s'\n",
|
"URL for recoup: `%s'\n",
|
||||||
ph->url);
|
ph->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
ph->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
ph->job = GNUNET_CURL_job_add2 (ctx,
|
ph->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
ph->ctx.headers,
|
ph->ctx.headers,
|
||||||
@ -377,6 +375,7 @@ TALER_EXCHANGE_recoup_cancel (struct TALER_EXCHANGE_RecoupHandle *ph)
|
|||||||
}
|
}
|
||||||
GNUNET_free (ph->url);
|
GNUNET_free (ph->url);
|
||||||
TALER_curl_easy_post_finished (&ph->ctx);
|
TALER_curl_easy_post_finished (&ph->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (ph->keys);
|
||||||
GNUNET_free (ph);
|
GNUNET_free (ph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2017-2022 Taler Systems SA
|
Copyright (C) 2017-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -40,9 +40,9 @@ struct TALER_EXCHANGE_RecoupRefreshHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -144,10 +144,8 @@ handle_recoup_refresh_finished (void *cls,
|
|||||||
.hr.reply = j,
|
.hr.reply = j,
|
||||||
.hr.http_status = (unsigned int) response_code
|
.hr.http_status = (unsigned int) response_code
|
||||||
};
|
};
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
|
||||||
|
|
||||||
ph->job = NULL;
|
ph->job = NULL;
|
||||||
keys = TALER_EXCHANGE_get_keys (ph->exchange);
|
|
||||||
switch (response_code)
|
switch (response_code)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@ -191,7 +189,7 @@ handle_recoup_refresh_finished (void *cls,
|
|||||||
rrr.hr.ec = TALER_JSON_get_error_code (j);
|
rrr.hr.ec = TALER_JSON_get_error_code (j);
|
||||||
rrr.hr.hint = TALER_JSON_get_error_hint (j);
|
rrr.hr.hint = TALER_JSON_get_error_hint (j);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_get_min_denomination_ (keys,
|
TALER_EXCHANGE_get_min_denomination_ (ph->keys,
|
||||||
&min_key))
|
&min_key))
|
||||||
{
|
{
|
||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
@ -201,7 +199,7 @@ handle_recoup_refresh_finished (void *cls,
|
|||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_check_coin_conflict_ (
|
TALER_EXCHANGE_check_coin_conflict_ (
|
||||||
keys,
|
ph->keys,
|
||||||
j,
|
j,
|
||||||
&ph->pk,
|
&ph->pk,
|
||||||
&ph->coin_pub,
|
&ph->coin_pub,
|
||||||
@ -246,7 +244,9 @@ handle_recoup_refresh_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_RecoupRefreshHandle *
|
struct TALER_EXCHANGE_RecoupRefreshHandle *
|
||||||
TALER_EXCHANGE_recoup_refresh (
|
TALER_EXCHANGE_recoup_refresh (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
const struct TALER_EXCHANGE_DenomPublicKey *pk,
|
||||||
const struct TALER_DenominationSignature *denom_sig,
|
const struct TALER_DenominationSignature *denom_sig,
|
||||||
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
const struct TALER_ExchangeWithdrawValues *exchange_vals,
|
||||||
@ -257,7 +257,6 @@ TALER_EXCHANGE_recoup_refresh (
|
|||||||
void *recoup_cb_cls)
|
void *recoup_cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_RecoupRefreshHandle *ph;
|
struct TALER_EXCHANGE_RecoupRefreshHandle *ph;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
struct TALER_DenominationHashP h_denom_pub;
|
struct TALER_DenominationHashP h_denom_pub;
|
||||||
json_t *recoup_obj;
|
json_t *recoup_obj;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
@ -266,10 +265,7 @@ TALER_EXCHANGE_recoup_refresh (
|
|||||||
union TALER_DenominationBlindingKeyP bks;
|
union TALER_DenominationBlindingKeyP bks;
|
||||||
|
|
||||||
GNUNET_assert (NULL != recoup_cb);
|
GNUNET_assert (NULL != recoup_cb);
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
ph = GNUNET_new (struct TALER_EXCHANGE_RecoupRefreshHandle);
|
ph = GNUNET_new (struct TALER_EXCHANGE_RecoupRefreshHandle);
|
||||||
ph->exchange = exchange;
|
|
||||||
ph->pk = *pk;
|
ph->pk = *pk;
|
||||||
memset (&ph->pk.key,
|
memset (&ph->pk.key,
|
||||||
0,
|
0,
|
||||||
@ -333,12 +329,13 @@ TALER_EXCHANGE_recoup_refresh (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/coins/%s/recoup-refresh",
|
"coins/%s/recoup-refresh",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
ph->url = TEAH_path_to_url (exchange,
|
ph->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == ph->url)
|
if (NULL == ph->url)
|
||||||
{
|
{
|
||||||
json_decref (recoup_obj);
|
json_decref (recoup_obj);
|
||||||
@ -364,7 +361,7 @@ TALER_EXCHANGE_recoup_refresh (
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for recoup-refresh: `%s'\n",
|
"URL for recoup-refresh: `%s'\n",
|
||||||
ph->url);
|
ph->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
ph->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
ph->job = GNUNET_CURL_job_add2 (ctx,
|
ph->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
ph->ctx.headers,
|
ph->ctx.headers,
|
||||||
@ -385,6 +382,7 @@ TALER_EXCHANGE_recoup_refresh_cancel (
|
|||||||
}
|
}
|
||||||
GNUNET_free (ph->url);
|
GNUNET_free (ph->url);
|
||||||
TALER_curl_easy_post_finished (&ph->ctx);
|
TALER_curl_easy_post_finished (&ph->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (ph->keys);
|
||||||
GNUNET_free (ph);
|
GNUNET_free (ph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2015-2022 Taler Systems SA
|
Copyright (C) 2015-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -39,11 +39,6 @@
|
|||||||
struct TALER_EXCHANGE_RefreshesRevealHandle
|
struct TALER_EXCHANGE_RefreshesRevealHandle
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* The connection to exchange this request handle will use
|
|
||||||
*/
|
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
*/
|
*/
|
||||||
@ -310,7 +305,8 @@ handle_refresh_reveal_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_RefreshesRevealHandle *
|
struct TALER_EXCHANGE_RefreshesRevealHandle *
|
||||||
TALER_EXCHANGE_refreshes_reveal (
|
TALER_EXCHANGE_refreshes_reveal (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
const struct TALER_RefreshMasterSecretP *rms,
|
const struct TALER_RefreshMasterSecretP *rms,
|
||||||
const struct TALER_EXCHANGE_RefreshData *rd,
|
const struct TALER_EXCHANGE_RefreshData *rd,
|
||||||
unsigned int num_coins,
|
unsigned int num_coins,
|
||||||
@ -327,7 +323,6 @@ TALER_EXCHANGE_refreshes_reveal (
|
|||||||
json_t *link_sigs;
|
json_t *link_sigs;
|
||||||
json_t *old_age_commitment = NULL;
|
json_t *old_age_commitment = NULL;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
struct MeltData md;
|
struct MeltData md;
|
||||||
char arg_str[sizeof (struct TALER_RefreshCommitmentP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_RefreshCommitmentP) * 2 + 32];
|
||||||
bool send_rms = false;
|
bool send_rms = false;
|
||||||
@ -342,12 +337,6 @@ TALER_EXCHANGE_refreshes_reveal (
|
|||||||
GNUNET_break (0);
|
GNUNET_break (0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_get_melt_data_ (rms,
|
TALER_EXCHANGE_get_melt_data_ (rms,
|
||||||
rd,
|
rd,
|
||||||
@ -467,22 +456,22 @@ TALER_EXCHANGE_refreshes_reveal (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/refreshes/%s/reveal",
|
"refreshes/%s/reveal",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
/* finally, we can actually issue the request */
|
/* finally, we can actually issue the request */
|
||||||
rrh = GNUNET_new (struct TALER_EXCHANGE_RefreshesRevealHandle);
|
rrh = GNUNET_new (struct TALER_EXCHANGE_RefreshesRevealHandle);
|
||||||
rrh->exchange = exchange;
|
|
||||||
rrh->noreveal_index = noreveal_index;
|
rrh->noreveal_index = noreveal_index;
|
||||||
rrh->reveal_cb = reveal_cb;
|
rrh->reveal_cb = reveal_cb;
|
||||||
rrh->reveal_cb_cls = reveal_cb_cls;
|
rrh->reveal_cb_cls = reveal_cb_cls;
|
||||||
rrh->md = md;
|
rrh->md = md;
|
||||||
rrh->alg_values = GNUNET_memdup (alg_values,
|
rrh->alg_values
|
||||||
|
= GNUNET_memdup (alg_values,
|
||||||
md.num_fresh_coins
|
md.num_fresh_coins
|
||||||
* sizeof (struct
|
* sizeof (struct TALER_ExchangeWithdrawValues));
|
||||||
TALER_ExchangeWithdrawValues));
|
rrh->url = TALER_url_join (url,
|
||||||
rrh->url = TEAH_path_to_url (rrh->exchange,
|
arg_str,
|
||||||
arg_str);
|
NULL);
|
||||||
if (NULL == rrh->url)
|
if (NULL == rrh->url)
|
||||||
{
|
{
|
||||||
json_decref (reveal_obj);
|
json_decref (reveal_obj);
|
||||||
@ -510,7 +499,6 @@ TALER_EXCHANGE_refreshes_reveal (
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
json_decref (reveal_obj);
|
json_decref (reveal_obj);
|
||||||
ctx = TEAH_handle_to_context (rrh->exchange);
|
|
||||||
rrh->job = GNUNET_CURL_job_add2 (ctx,
|
rrh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
rrh->ctx.headers,
|
rrh->ctx.headers,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2022 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -39,9 +39,9 @@ struct TALER_EXCHANGE_RefundHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -117,7 +117,6 @@ verify_refund_signature_ok (struct TALER_EXCHANGE_RefundHandle *rh,
|
|||||||
struct TALER_ExchangePublicKeyP *exchange_pub,
|
struct TALER_ExchangePublicKeyP *exchange_pub,
|
||||||
struct TALER_ExchangeSignatureP *exchange_sig)
|
struct TALER_ExchangeSignatureP *exchange_sig)
|
||||||
{
|
{
|
||||||
const struct TALER_EXCHANGE_Keys *key_state;
|
|
||||||
struct GNUNET_JSON_Specification spec[] = {
|
struct GNUNET_JSON_Specification spec[] = {
|
||||||
GNUNET_JSON_spec_fixed_auto ("exchange_sig",
|
GNUNET_JSON_spec_fixed_auto ("exchange_sig",
|
||||||
exchange_sig),
|
exchange_sig),
|
||||||
@ -134,9 +133,8 @@ verify_refund_signature_ok (struct TALER_EXCHANGE_RefundHandle *rh,
|
|||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
key_state = TALER_EXCHANGE_get_keys (rh->exchange);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (key_state,
|
TALER_EXCHANGE_test_signing_key (rh->keys,
|
||||||
exchange_pub))
|
exchange_pub))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -672,7 +670,9 @@ handle_refund_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_RefundHandle *
|
struct TALER_EXCHANGE_RefundHandle *
|
||||||
TALER_EXCHANGE_refund (
|
TALER_EXCHANGE_refund (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_Amount *amount,
|
const struct TALER_Amount *amount,
|
||||||
const struct TALER_PrivateContractHashP *h_contract_terms,
|
const struct TALER_PrivateContractHashP *h_contract_terms,
|
||||||
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
const struct TALER_CoinSpendPublicKeyP *coin_pub,
|
||||||
@ -684,13 +684,10 @@ TALER_EXCHANGE_refund (
|
|||||||
struct TALER_MerchantPublicKeyP merchant_pub;
|
struct TALER_MerchantPublicKeyP merchant_pub;
|
||||||
struct TALER_MerchantSignatureP merchant_sig;
|
struct TALER_MerchantSignatureP merchant_sig;
|
||||||
struct TALER_EXCHANGE_RefundHandle *rh;
|
struct TALER_EXCHANGE_RefundHandle *rh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
json_t *refund_obj;
|
json_t *refund_obj;
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_CoinSpendPublicKeyP) * 2 + 32];
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_YES ==
|
|
||||||
TEAH_handle_is_ready (exchange));
|
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&merchant_priv->eddsa_priv,
|
||||||
&merchant_pub.eddsa_pub);
|
&merchant_pub.eddsa_pub);
|
||||||
TALER_merchant_refund_sign (coin_pub,
|
TALER_merchant_refund_sign (coin_pub,
|
||||||
@ -711,7 +708,7 @@ TALER_EXCHANGE_refund (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/coins/%s/refund",
|
"coins/%s/refund",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
refund_obj = GNUNET_JSON_PACK (
|
refund_obj = GNUNET_JSON_PACK (
|
||||||
@ -726,11 +723,11 @@ TALER_EXCHANGE_refund (
|
|||||||
GNUNET_JSON_pack_data_auto ("merchant_sig",
|
GNUNET_JSON_pack_data_auto ("merchant_sig",
|
||||||
&merchant_sig));
|
&merchant_sig));
|
||||||
rh = GNUNET_new (struct TALER_EXCHANGE_RefundHandle);
|
rh = GNUNET_new (struct TALER_EXCHANGE_RefundHandle);
|
||||||
rh->exchange = exchange;
|
|
||||||
rh->cb = cb;
|
rh->cb = cb;
|
||||||
rh->cb_cls = cb_cls;
|
rh->cb_cls = cb_cls;
|
||||||
rh->url = TEAH_path_to_url (exchange,
|
rh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == rh->url)
|
if (NULL == rh->url)
|
||||||
{
|
{
|
||||||
json_decref (refund_obj);
|
json_decref (refund_obj);
|
||||||
@ -761,7 +758,7 @@ TALER_EXCHANGE_refund (
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
|
||||||
"URL for refund: `%s'\n",
|
"URL for refund: `%s'\n",
|
||||||
rh->url);
|
rh->url);
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
rh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
rh->job = GNUNET_CURL_job_add2 (ctx,
|
rh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
rh->ctx.headers,
|
rh->ctx.headers,
|
||||||
@ -781,6 +778,7 @@ TALER_EXCHANGE_refund_cancel (struct TALER_EXCHANGE_RefundHandle *refund)
|
|||||||
}
|
}
|
||||||
GNUNET_free (refund->url);
|
GNUNET_free (refund->url);
|
||||||
TALER_curl_easy_post_finished (&refund->ctx);
|
TALER_curl_easy_post_finished (&refund->ctx);
|
||||||
|
TALER_EXCHANGE_keys_decref (refund->keys);
|
||||||
GNUNET_free (refund);
|
GNUNET_free (refund);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2022 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -38,11 +38,6 @@
|
|||||||
struct TALER_EXCHANGE_ReservesCloseHandle
|
struct TALER_EXCHANGE_ReservesCloseHandle
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* The connection to exchange this request handle will use
|
|
||||||
*/
|
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
*/
|
*/
|
||||||
@ -269,26 +264,19 @@ handle_reserves_close_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_ReservesCloseHandle *
|
struct TALER_EXCHANGE_ReservesCloseHandle *
|
||||||
TALER_EXCHANGE_reserves_close (
|
TALER_EXCHANGE_reserves_close (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const char *target_payto_uri,
|
const char *target_payto_uri,
|
||||||
TALER_EXCHANGE_ReservesCloseCallback cb,
|
TALER_EXCHANGE_ReservesCloseCallback cb,
|
||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_ReservesCloseHandle *rch;
|
struct TALER_EXCHANGE_ReservesCloseHandle *rch;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
||||||
struct TALER_PaytoHashP h_payto;
|
struct TALER_PaytoHashP h_payto;
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
rch = GNUNET_new (struct TALER_EXCHANGE_ReservesCloseHandle);
|
rch = GNUNET_new (struct TALER_EXCHANGE_ReservesCloseHandle);
|
||||||
rch->exchange = exchange;
|
|
||||||
rch->cb = cb;
|
rch->cb = cb;
|
||||||
rch->cb_cls = cb_cls;
|
rch->cb_cls = cb_cls;
|
||||||
rch->ts = GNUNET_TIME_timestamp_get ();
|
rch->ts = GNUNET_TIME_timestamp_get ();
|
||||||
@ -306,11 +294,12 @@ TALER_EXCHANGE_reserves_close (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/reserves/%s/close",
|
"reserves/%s/close",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
rch->url = TEAH_path_to_url (exchange,
|
rch->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == rch->url)
|
if (NULL == rch->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (rch);
|
GNUNET_free (rch);
|
||||||
@ -357,7 +346,6 @@ TALER_EXCHANGE_reserves_close (
|
|||||||
}
|
}
|
||||||
json_decref (close_obj);
|
json_decref (close_obj);
|
||||||
}
|
}
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
|
||||||
rch->job = GNUNET_CURL_job_add2 (ctx,
|
rch->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
rch->post_ctx.headers,
|
rch->post_ctx.headers,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2022 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -39,9 +39,9 @@ struct TALER_EXCHANGE_ReservesHistoryHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -131,7 +131,7 @@ handle_reserves_history_ok (struct TALER_EXCHANGE_ReservesHistoryHandle *rsh,
|
|||||||
rhistory = GNUNET_new_array (len,
|
rhistory = GNUNET_new_array (len,
|
||||||
struct TALER_EXCHANGE_ReserveHistoryEntry);
|
struct TALER_EXCHANGE_ReserveHistoryEntry);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_parse_reserve_history (rsh->exchange,
|
TALER_EXCHANGE_parse_reserve_history (rsh->keys,
|
||||||
history,
|
history,
|
||||||
&rsh->reserve_pub,
|
&rsh->reserve_pub,
|
||||||
rs.details.ok.balance.currency,
|
rs.details.ok.balance.currency,
|
||||||
@ -250,26 +250,19 @@ handle_reserves_history_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_ReservesHistoryHandle *
|
struct TALER_EXCHANGE_ReservesHistoryHandle *
|
||||||
TALER_EXCHANGE_reserves_history (
|
TALER_EXCHANGE_reserves_history (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
TALER_EXCHANGE_ReservesHistoryCallback cb,
|
TALER_EXCHANGE_ReservesHistoryCallback cb,
|
||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_ReservesHistoryHandle *rsh;
|
struct TALER_EXCHANGE_ReservesHistoryHandle *rsh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
|
||||||
const struct TALER_EXCHANGE_GlobalFee *gf;
|
const struct TALER_EXCHANGE_GlobalFee *gf;
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
rsh = GNUNET_new (struct TALER_EXCHANGE_ReservesHistoryHandle);
|
rsh = GNUNET_new (struct TALER_EXCHANGE_ReservesHistoryHandle);
|
||||||
rsh->exchange = exchange;
|
|
||||||
rsh->cb = cb;
|
rsh->cb = cb;
|
||||||
rsh->cb_cls = cb_cls;
|
rsh->cb_cls = cb_cls;
|
||||||
rsh->ts = GNUNET_TIME_timestamp_get ();
|
rsh->ts = GNUNET_TIME_timestamp_get ();
|
||||||
@ -287,11 +280,12 @@ TALER_EXCHANGE_reserves_history (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/reserves/%s/history",
|
"reserves/%s/history",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
rsh->url = TEAH_path_to_url (exchange,
|
rsh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == rsh->url)
|
if (NULL == rsh->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (rsh);
|
GNUNET_free (rsh);
|
||||||
@ -305,15 +299,6 @@ TALER_EXCHANGE_reserves_history (
|
|||||||
GNUNET_free (rsh);
|
GNUNET_free (rsh);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
keys = TALER_EXCHANGE_get_keys (exchange);
|
|
||||||
if (NULL == keys)
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
curl_easy_cleanup (eh);
|
|
||||||
GNUNET_free (rsh->url);
|
|
||||||
GNUNET_free (rsh);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
gf = TALER_EXCHANGE_get_global_fee (keys,
|
gf = TALER_EXCHANGE_get_global_fee (keys,
|
||||||
rsh->ts);
|
rsh->ts);
|
||||||
if (NULL == gf)
|
if (NULL == gf)
|
||||||
@ -349,7 +334,7 @@ TALER_EXCHANGE_reserves_history (
|
|||||||
}
|
}
|
||||||
json_decref (history_obj);
|
json_decref (history_obj);
|
||||||
}
|
}
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
rsh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
rsh->job = GNUNET_CURL_job_add2 (ctx,
|
rsh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
rsh->post_ctx.headers,
|
rsh->post_ctx.headers,
|
||||||
@ -370,6 +355,7 @@ TALER_EXCHANGE_reserves_history_cancel (
|
|||||||
}
|
}
|
||||||
TALER_curl_easy_post_finished (&rsh->post_ctx);
|
TALER_curl_easy_post_finished (&rsh->post_ctx);
|
||||||
GNUNET_free (rsh->url);
|
GNUNET_free (rsh->url);
|
||||||
|
TALER_EXCHANGE_keys_decref (rsh->keys);
|
||||||
GNUNET_free (rsh);
|
GNUNET_free (rsh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2022 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -67,9 +67,9 @@ struct TALER_EXCHANGE_ReservesOpenHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -321,7 +321,6 @@ handle_reserves_open_finished (void *cls,
|
|||||||
break;
|
break;
|
||||||
case MHD_HTTP_CONFLICT:
|
case MHD_HTTP_CONFLICT:
|
||||||
{
|
{
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
|
||||||
const struct CoinData *cd = NULL;
|
const struct CoinData *cd = NULL;
|
||||||
struct TALER_CoinSpendPublicKeyP coin_pub;
|
struct TALER_CoinSpendPublicKeyP coin_pub;
|
||||||
const struct TALER_EXCHANGE_DenomPublicKey *dk;
|
const struct TALER_EXCHANGE_DenomPublicKey *dk;
|
||||||
@ -331,8 +330,6 @@ handle_reserves_open_finished (void *cls,
|
|||||||
GNUNET_JSON_spec_end ()
|
GNUNET_JSON_spec_end ()
|
||||||
};
|
};
|
||||||
|
|
||||||
keys = TALER_EXCHANGE_get_keys (roh->exchange);
|
|
||||||
GNUNET_assert (NULL != keys);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_JSON_parse (j,
|
GNUNET_JSON_parse (j,
|
||||||
spec,
|
spec,
|
||||||
@ -362,7 +359,7 @@ handle_reserves_open_finished (void *cls,
|
|||||||
rs.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
rs.hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dk = TALER_EXCHANGE_get_denomination_key_by_hash (keys,
|
dk = TALER_EXCHANGE_get_denomination_key_by_hash (roh->keys,
|
||||||
&cd->h_denom_pub);
|
&cd->h_denom_pub);
|
||||||
if (NULL == dk)
|
if (NULL == dk)
|
||||||
{
|
{
|
||||||
@ -372,7 +369,7 @@ handle_reserves_open_finished (void *cls,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_check_coin_conflict_ (keys,
|
TALER_EXCHANGE_check_coin_conflict_ (roh->keys,
|
||||||
j,
|
j,
|
||||||
dk,
|
dk,
|
||||||
&coin_pub,
|
&coin_pub,
|
||||||
@ -427,7 +424,9 @@ handle_reserves_open_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_ReservesOpenHandle *
|
struct TALER_EXCHANGE_ReservesOpenHandle *
|
||||||
TALER_EXCHANGE_reserves_open (
|
TALER_EXCHANGE_reserves_open (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
const struct TALER_Amount *reserve_contribution,
|
const struct TALER_Amount *reserve_contribution,
|
||||||
unsigned int coin_payments_length,
|
unsigned int coin_payments_length,
|
||||||
@ -438,20 +437,11 @@ TALER_EXCHANGE_reserves_open (
|
|||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_ReservesOpenHandle *roh;
|
struct TALER_EXCHANGE_ReservesOpenHandle *roh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
||||||
const struct TALER_EXCHANGE_Keys *keys;
|
|
||||||
json_t *cpa;
|
json_t *cpa;
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
roh = GNUNET_new (struct TALER_EXCHANGE_ReservesOpenHandle);
|
roh = GNUNET_new (struct TALER_EXCHANGE_ReservesOpenHandle);
|
||||||
roh->exchange = exchange;
|
|
||||||
roh->cb = cb;
|
roh->cb = cb;
|
||||||
roh->cb_cls = cb_cls;
|
roh->cb_cls = cb_cls;
|
||||||
roh->ts = GNUNET_TIME_timestamp_get ();
|
roh->ts = GNUNET_TIME_timestamp_get ();
|
||||||
@ -469,11 +459,12 @@ TALER_EXCHANGE_reserves_open (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/reserves/%s/open",
|
"reserves/%s/open",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
roh->url = TEAH_path_to_url (exchange,
|
roh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == roh->url)
|
if (NULL == roh->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (roh);
|
GNUNET_free (roh);
|
||||||
@ -487,15 +478,6 @@ TALER_EXCHANGE_reserves_open (
|
|||||||
GNUNET_free (roh);
|
GNUNET_free (roh);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
keys = TALER_EXCHANGE_get_keys (exchange);
|
|
||||||
if (NULL == keys)
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
curl_easy_cleanup (eh);
|
|
||||||
GNUNET_free (roh->url);
|
|
||||||
GNUNET_free (roh);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
TALER_wallet_reserve_open_sign (reserve_contribution,
|
TALER_wallet_reserve_open_sign (reserve_contribution,
|
||||||
roh->ts,
|
roh->ts,
|
||||||
expiration_time,
|
expiration_time,
|
||||||
@ -578,7 +560,7 @@ TALER_EXCHANGE_reserves_open (
|
|||||||
}
|
}
|
||||||
json_decref (open_obj);
|
json_decref (open_obj);
|
||||||
}
|
}
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
roh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
roh->job = GNUNET_CURL_job_add2 (ctx,
|
roh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
roh->post_ctx.headers,
|
roh->post_ctx.headers,
|
||||||
@ -600,6 +582,7 @@ TALER_EXCHANGE_reserves_open_cancel (
|
|||||||
TALER_curl_easy_post_finished (&roh->post_ctx);
|
TALER_curl_easy_post_finished (&roh->post_ctx);
|
||||||
GNUNET_free (roh->coins);
|
GNUNET_free (roh->coins);
|
||||||
GNUNET_free (roh->url);
|
GNUNET_free (roh->url);
|
||||||
|
TALER_EXCHANGE_keys_decref (roh->keys);
|
||||||
GNUNET_free (roh);
|
GNUNET_free (roh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2022 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -39,9 +39,9 @@ struct TALER_EXCHANGE_ReservesStatusHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -119,7 +119,7 @@ handle_reserves_status_ok (struct TALER_EXCHANGE_ReservesStatusHandle *rsh,
|
|||||||
rhistory = GNUNET_new_array (len,
|
rhistory = GNUNET_new_array (len,
|
||||||
struct TALER_EXCHANGE_ReserveHistoryEntry);
|
struct TALER_EXCHANGE_ReserveHistoryEntry);
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_parse_reserve_history (rsh->exchange,
|
TALER_EXCHANGE_parse_reserve_history (rsh->keys,
|
||||||
history,
|
history,
|
||||||
&rsh->reserve_pub,
|
&rsh->reserve_pub,
|
||||||
rs.details.ok.balance.currency,
|
rs.details.ok.balance.currency,
|
||||||
@ -233,27 +233,21 @@ handle_reserves_status_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_ReservesStatusHandle *
|
struct TALER_EXCHANGE_ReservesStatusHandle *
|
||||||
TALER_EXCHANGE_reserves_status (
|
TALER_EXCHANGE_reserves_status (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
const struct TALER_ReservePrivateKeyP *reserve_priv,
|
||||||
TALER_EXCHANGE_ReservesStatusCallback cb,
|
TALER_EXCHANGE_ReservesStatusCallback cb,
|
||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_ReservesStatusHandle *rsh;
|
struct TALER_EXCHANGE_ReservesStatusHandle *rsh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_ReservePublicKeyP) * 2 + 32];
|
||||||
struct TALER_ReserveSignatureP reserve_sig;
|
struct TALER_ReserveSignatureP reserve_sig;
|
||||||
struct GNUNET_TIME_Timestamp ts
|
struct GNUNET_TIME_Timestamp ts
|
||||||
= GNUNET_TIME_timestamp_get ();
|
= GNUNET_TIME_timestamp_get ();
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
rsh = GNUNET_new (struct TALER_EXCHANGE_ReservesStatusHandle);
|
rsh = GNUNET_new (struct TALER_EXCHANGE_ReservesStatusHandle);
|
||||||
rsh->exchange = exchange;
|
|
||||||
rsh->cb = cb;
|
rsh->cb = cb;
|
||||||
rsh->cb_cls = cb_cls;
|
rsh->cb_cls = cb_cls;
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&reserve_priv->eddsa_priv,
|
||||||
@ -270,11 +264,12 @@ TALER_EXCHANGE_reserves_status (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/reserves/%s/status",
|
"reserves/%s/status",
|
||||||
pub_str);
|
pub_str);
|
||||||
}
|
}
|
||||||
rsh->url = TEAH_path_to_url (exchange,
|
rsh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == rsh->url)
|
if (NULL == rsh->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (rsh);
|
GNUNET_free (rsh);
|
||||||
@ -312,7 +307,7 @@ TALER_EXCHANGE_reserves_status (
|
|||||||
}
|
}
|
||||||
json_decref (status_obj);
|
json_decref (status_obj);
|
||||||
}
|
}
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
rsh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
rsh->job = GNUNET_CURL_job_add2 (ctx,
|
rsh->job = GNUNET_CURL_job_add2 (ctx,
|
||||||
eh,
|
eh,
|
||||||
rsh->post_ctx.headers,
|
rsh->post_ctx.headers,
|
||||||
@ -333,6 +328,7 @@ TALER_EXCHANGE_reserves_status_cancel (
|
|||||||
}
|
}
|
||||||
TALER_curl_easy_post_finished (&rsh->post_ctx);
|
TALER_curl_easy_post_finished (&rsh->post_ctx);
|
||||||
GNUNET_free (rsh->url);
|
GNUNET_free (rsh->url);
|
||||||
|
TALER_EXCHANGE_keys_decref (rsh->keys);
|
||||||
GNUNET_free (rsh);
|
GNUNET_free (rsh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
This file is part of TALER
|
This file is part of TALER
|
||||||
Copyright (C) 2014-2021 Taler Systems SA
|
Copyright (C) 2014-2023 Taler Systems SA
|
||||||
|
|
||||||
TALER is free software; you can redistribute it and/or modify it under the
|
TALER is free software; you can redistribute it and/or modify it under the
|
||||||
terms of the GNU General Public License as published by the Free Software
|
terms of the GNU General Public License as published by the Free Software
|
||||||
@ -38,9 +38,9 @@ struct TALER_EXCHANGE_TransfersGetHandle
|
|||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The connection to exchange this request handle will use
|
* The keys of the exchange this request handle will use
|
||||||
*/
|
*/
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
struct TALER_EXCHANGE_Keys *keys;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The url for this request.
|
* The url for this request.
|
||||||
@ -130,7 +130,7 @@ check_transfers_get_response_ok (
|
|||||||
}
|
}
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_test_signing_key (
|
TALER_EXCHANGE_test_signing_key (
|
||||||
TALER_EXCHANGE_get_keys (wdh->exchange),
|
wdh->keys,
|
||||||
&td->exchange_pub))
|
&td->exchange_pub))
|
||||||
{
|
{
|
||||||
GNUNET_break_op (0);
|
GNUNET_break_op (0);
|
||||||
@ -320,25 +320,18 @@ handle_transfers_get_finished (void *cls,
|
|||||||
|
|
||||||
struct TALER_EXCHANGE_TransfersGetHandle *
|
struct TALER_EXCHANGE_TransfersGetHandle *
|
||||||
TALER_EXCHANGE_transfers_get (
|
TALER_EXCHANGE_transfers_get (
|
||||||
struct TALER_EXCHANGE_Handle *exchange,
|
struct GNUNET_CURL_Context *ctx,
|
||||||
|
const char *url,
|
||||||
|
struct TALER_EXCHANGE_Keys *keys,
|
||||||
const struct TALER_WireTransferIdentifierRawP *wtid,
|
const struct TALER_WireTransferIdentifierRawP *wtid,
|
||||||
TALER_EXCHANGE_TransfersGetCallback cb,
|
TALER_EXCHANGE_TransfersGetCallback cb,
|
||||||
void *cb_cls)
|
void *cb_cls)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGE_TransfersGetHandle *wdh;
|
struct TALER_EXCHANGE_TransfersGetHandle *wdh;
|
||||||
struct GNUNET_CURL_Context *ctx;
|
|
||||||
CURL *eh;
|
CURL *eh;
|
||||||
char arg_str[sizeof (struct TALER_WireTransferIdentifierRawP) * 2 + 32];
|
char arg_str[sizeof (struct TALER_WireTransferIdentifierRawP) * 2 + 32];
|
||||||
|
|
||||||
if (GNUNET_YES !=
|
|
||||||
TEAH_handle_is_ready (exchange))
|
|
||||||
{
|
|
||||||
GNUNET_break (0);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wdh = GNUNET_new (struct TALER_EXCHANGE_TransfersGetHandle);
|
wdh = GNUNET_new (struct TALER_EXCHANGE_TransfersGetHandle);
|
||||||
wdh->exchange = exchange;
|
|
||||||
wdh->cb = cb;
|
wdh->cb = cb;
|
||||||
wdh->cb_cls = cb_cls;
|
wdh->cb_cls = cb_cls;
|
||||||
|
|
||||||
@ -354,11 +347,12 @@ TALER_EXCHANGE_transfers_get (
|
|||||||
*end = '\0';
|
*end = '\0';
|
||||||
GNUNET_snprintf (arg_str,
|
GNUNET_snprintf (arg_str,
|
||||||
sizeof (arg_str),
|
sizeof (arg_str),
|
||||||
"/transfers/%s",
|
"transfers/%s",
|
||||||
wtid_str);
|
wtid_str);
|
||||||
}
|
}
|
||||||
wdh->url = TEAH_path_to_url (wdh->exchange,
|
wdh->url = TALER_url_join (url,
|
||||||
arg_str);
|
arg_str,
|
||||||
|
NULL);
|
||||||
if (NULL == wdh->url)
|
if (NULL == wdh->url)
|
||||||
{
|
{
|
||||||
GNUNET_free (wdh);
|
GNUNET_free (wdh);
|
||||||
@ -372,7 +366,7 @@ TALER_EXCHANGE_transfers_get (
|
|||||||
GNUNET_free (wdh);
|
GNUNET_free (wdh);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ctx = TEAH_handle_to_context (exchange);
|
wdh->keys = TALER_EXCHANGE_keys_incref (keys);
|
||||||
wdh->job = GNUNET_CURL_job_add_with_ct_json (ctx,
|
wdh->job = GNUNET_CURL_job_add_with_ct_json (ctx,
|
||||||
eh,
|
eh,
|
||||||
&handle_transfers_get_finished,
|
&handle_transfers_get_finished,
|
||||||
@ -397,6 +391,7 @@ TALER_EXCHANGE_transfers_get_cancel (
|
|||||||
wdh->job = NULL;
|
wdh->job = NULL;
|
||||||
}
|
}
|
||||||
GNUNET_free (wdh->url);
|
GNUNET_free (wdh->url);
|
||||||
|
TALER_EXCHANGE_keys_decref (wdh->keys);
|
||||||
GNUNET_free (wdh);
|
GNUNET_free (wdh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +192,8 @@ reserve_withdraw_payment_required (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_EXCHANGE_parse_reserve_history (wh->exchange,
|
TALER_EXCHANGE_parse_reserve_history (TALER_EXCHANGE_get_keys (
|
||||||
|
wh->exchange),
|
||||||
history,
|
history,
|
||||||
&wh->reserve_pub,
|
&wh->reserve_pub,
|
||||||
balance.currency,
|
balance.currency,
|
||||||
|
@ -198,12 +198,8 @@ track_transaction_run (void *cls,
|
|||||||
struct TALER_MerchantWireHashP h_wire_details;
|
struct TALER_MerchantWireHashP h_wire_details;
|
||||||
struct TALER_PrivateContractHashP h_contract_terms;
|
struct TALER_PrivateContractHashP h_contract_terms;
|
||||||
const struct TALER_MerchantPrivateKeyP *merchant_priv;
|
const struct TALER_MerchantPrivateKeyP *merchant_priv;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
tts->cmd = cmd;
|
tts->cmd = cmd;
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
tts->is = is;
|
tts->is = is;
|
||||||
transaction_cmd
|
transaction_cmd
|
||||||
= TALER_TESTING_interpreter_lookup_command (tts->is,
|
= TALER_TESTING_interpreter_lookup_command (tts->is,
|
||||||
@ -275,7 +271,10 @@ track_transaction_run (void *cls,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tts->tth = TALER_EXCHANGE_deposits_get (exchange,
|
tts->tth = TALER_EXCHANGE_deposits_get (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
merchant_priv,
|
merchant_priv,
|
||||||
&h_wire_details,
|
&h_wire_details,
|
||||||
&h_contract_terms,
|
&h_contract_terms,
|
||||||
|
@ -189,12 +189,8 @@ deposit_run (void *cls,
|
|||||||
{
|
{
|
||||||
struct PurseCreateDepositState *ds = cls;
|
struct PurseCreateDepositState *ds = cls;
|
||||||
struct TALER_EXCHANGE_PurseDeposit deposits[ds->num_coin_references];
|
struct TALER_EXCHANGE_PurseDeposit deposits[ds->num_coin_references];
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
(void) cmd;
|
(void) cmd;
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
ds->is = is;
|
ds->is = is;
|
||||||
for (unsigned int i = 0; i<ds->num_coin_references; i++)
|
for (unsigned int i = 0; i<ds->num_coin_references; i++)
|
||||||
{
|
{
|
||||||
@ -259,7 +255,9 @@ deposit_run (void *cls,
|
|||||||
"pay_deadline",
|
"pay_deadline",
|
||||||
GNUNET_JSON_from_timestamp (ds->purse_expiration)));
|
GNUNET_JSON_from_timestamp (ds->purse_expiration)));
|
||||||
ds->dh = TALER_EXCHANGE_purse_create_with_deposit (
|
ds->dh = TALER_EXCHANGE_purse_create_with_deposit (
|
||||||
exchange,
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
&ds->purse_priv,
|
&ds->purse_priv,
|
||||||
&ds->merge_priv,
|
&ds->merge_priv,
|
||||||
&ds->contract_priv,
|
&ds->contract_priv,
|
||||||
|
@ -259,11 +259,7 @@ deposit_run (void *cls,
|
|||||||
struct TALER_EXCHANGE_PurseDeposit deposits[ds->num_coin_references];
|
struct TALER_EXCHANGE_PurseDeposit deposits[ds->num_coin_references];
|
||||||
const struct TALER_PurseContractPublicKeyP *purse_pub;
|
const struct TALER_PurseContractPublicKeyP *purse_pub;
|
||||||
const struct TALER_TESTING_Command *purse_cmd;
|
const struct TALER_TESTING_Command *purse_cmd;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
(void) cmd;
|
(void) cmd;
|
||||||
ds->is = is;
|
ds->is = is;
|
||||||
purse_cmd = TALER_TESTING_interpreter_lookup_command (is,
|
purse_cmd = TALER_TESTING_interpreter_lookup_command (is,
|
||||||
@ -321,7 +317,9 @@ deposit_run (void *cls,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ds->dh = TALER_EXCHANGE_purse_deposit (
|
ds->dh = TALER_EXCHANGE_purse_deposit (
|
||||||
exchange,
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
NULL, /* FIXME #7271: WADs support: purse exchange URL */
|
NULL, /* FIXME #7271: WADs support: purse exchange URL */
|
||||||
&ds->purse_pub,
|
&ds->purse_pub,
|
||||||
ds->min_age,
|
ds->min_age,
|
||||||
|
@ -183,11 +183,7 @@ status_run (void *cls,
|
|||||||
{
|
{
|
||||||
struct StatusState *ss = cls;
|
struct StatusState *ss = cls;
|
||||||
const struct TALER_TESTING_Command *create_purse;
|
const struct TALER_TESTING_Command *create_purse;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
ss->is = is;
|
ss->is = is;
|
||||||
create_purse
|
create_purse
|
||||||
= TALER_TESTING_interpreter_lookup_command (is,
|
= TALER_TESTING_interpreter_lookup_command (is,
|
||||||
@ -202,7 +198,10 @@ status_run (void *cls,
|
|||||||
TALER_TESTING_interpreter_fail (is);
|
TALER_TESTING_interpreter_fail (is);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ss->pgh = TALER_EXCHANGE_purse_get (exchange,
|
ss->pgh = TALER_EXCHANGE_purse_get (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
ss->purse_pub,
|
ss->purse_pub,
|
||||||
ss->timeout,
|
ss->timeout,
|
||||||
ss->wait_for_merge,
|
ss->wait_for_merge,
|
||||||
|
@ -201,12 +201,8 @@ merge_run (void *cls,
|
|||||||
const struct TALER_PurseMergePrivateKeyP *merge_priv;
|
const struct TALER_PurseMergePrivateKeyP *merge_priv;
|
||||||
const json_t *ct;
|
const json_t *ct;
|
||||||
const struct TALER_TESTING_Command *ref;
|
const struct TALER_TESTING_Command *ref;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
(void) cmd;
|
(void) cmd;
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
ds->is = is;
|
ds->is = is;
|
||||||
ref = TALER_TESTING_interpreter_lookup_command (ds->is,
|
ref = TALER_TESTING_interpreter_lookup_command (ds->is,
|
||||||
ds->merge_ref);
|
ds->merge_ref);
|
||||||
@ -322,7 +318,9 @@ merge_run (void *cls,
|
|||||||
&ds->merge_pub.eddsa_pub);
|
&ds->merge_pub.eddsa_pub);
|
||||||
ds->merge_timestamp = GNUNET_TIME_timestamp_get ();
|
ds->merge_timestamp = GNUNET_TIME_timestamp_get ();
|
||||||
ds->dh = TALER_EXCHANGE_account_merge (
|
ds->dh = TALER_EXCHANGE_account_merge (
|
||||||
exchange,
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
NULL, /* no wad */
|
NULL, /* no wad */
|
||||||
&ds->reserve_priv,
|
&ds->reserve_priv,
|
||||||
&ds->purse_pub,
|
&ds->purse_pub,
|
||||||
|
@ -182,11 +182,7 @@ recoup_run (void *cls,
|
|||||||
char *cref;
|
char *cref;
|
||||||
unsigned int idx;
|
unsigned int idx;
|
||||||
const struct TALER_ExchangeWithdrawValues *ewv;
|
const struct TALER_ExchangeWithdrawValues *ewv;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
ps->is = is;
|
ps->is = is;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_TESTING_parse_coin_reference (
|
TALER_TESTING_parse_coin_reference (
|
||||||
@ -259,7 +255,10 @@ recoup_run (void *cls,
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Trying to recoup denomination '%s'\n",
|
"Trying to recoup denomination '%s'\n",
|
||||||
TALER_B2S (&denom_pub->h_key));
|
TALER_B2S (&denom_pub->h_key));
|
||||||
ps->ph = TALER_EXCHANGE_recoup (exchange,
|
ps->ph = TALER_EXCHANGE_recoup (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
denom_pub,
|
denom_pub,
|
||||||
coin_sig,
|
coin_sig,
|
||||||
ewv,
|
ewv,
|
||||||
|
@ -184,11 +184,7 @@ recoup_refresh_run (void *cls,
|
|||||||
const struct TALER_ExchangeWithdrawValues *ewv;
|
const struct TALER_ExchangeWithdrawValues *ewv;
|
||||||
char *cref;
|
char *cref;
|
||||||
unsigned int idx;
|
unsigned int idx;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
rrs->is = is;
|
rrs->is = is;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_TESTING_parse_coin_reference (
|
TALER_TESTING_parse_coin_reference (
|
||||||
@ -273,7 +269,10 @@ recoup_refresh_run (void *cls,
|
|||||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||||
"Trying to recoup_refresh denomination '%s'\n",
|
"Trying to recoup_refresh denomination '%s'\n",
|
||||||
TALER_B2S (&denom_pub->h_key));
|
TALER_B2S (&denom_pub->h_key));
|
||||||
rrs->ph = TALER_EXCHANGE_recoup_refresh (exchange,
|
rrs->ph = TALER_EXCHANGE_recoup_refresh (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
denom_pub,
|
denom_pub,
|
||||||
coin_sig,
|
coin_sig,
|
||||||
ewv,
|
ewv,
|
||||||
|
@ -496,12 +496,8 @@ refresh_reveal_run (void *cls,
|
|||||||
struct RefreshRevealState *rrs = cls;
|
struct RefreshRevealState *rrs = cls;
|
||||||
struct RefreshMeltState *rms;
|
struct RefreshMeltState *rms;
|
||||||
const struct TALER_TESTING_Command *melt_cmd;
|
const struct TALER_TESTING_Command *melt_cmd;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
rrs->cmd = cmd;
|
rrs->cmd = cmd;
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
rrs->is = is;
|
rrs->is = is;
|
||||||
melt_cmd = TALER_TESTING_interpreter_lookup_command (is,
|
melt_cmd = TALER_TESTING_interpreter_lookup_command (is,
|
||||||
rrs->melt_reference);
|
rrs->melt_reference);
|
||||||
@ -518,7 +514,9 @@ refresh_reveal_run (void *cls,
|
|||||||
|
|
||||||
for (unsigned int i = 0; i<rms->num_fresh_coins; i++)
|
for (unsigned int i = 0; i<rms->num_fresh_coins; i++)
|
||||||
alg_values[i] = rms->mbds[i].alg_value;
|
alg_values[i] = rms->mbds[i].alg_value;
|
||||||
rrs->rrh = TALER_EXCHANGE_refreshes_reveal (exchange,
|
rrs->rrh = TALER_EXCHANGE_refreshes_reveal (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
&rms->rms,
|
&rms->rms,
|
||||||
&rms->refresh_data,
|
&rms->refresh_data,
|
||||||
rms->num_fresh_coins,
|
rms->num_fresh_coins,
|
||||||
@ -913,12 +911,8 @@ melt_cb (void *cls,
|
|||||||
{
|
{
|
||||||
struct RefreshMeltState *rms = cls;
|
struct RefreshMeltState *rms = cls;
|
||||||
const struct TALER_EXCHANGE_HttpResponse *hr = &mr->hr;
|
const struct TALER_EXCHANGE_HttpResponse *hr = &mr->hr;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (rms->is);
|
|
||||||
|
|
||||||
rms->rmh = NULL;
|
rms->rmh = NULL;
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
if (rms->expected_response_code != hr->http_status)
|
if (rms->expected_response_code != hr->http_status)
|
||||||
{
|
{
|
||||||
if (0 != rms->do_retry)
|
if (0 != rms->do_retry)
|
||||||
@ -978,7 +972,10 @@ melt_cb (void *cls,
|
|||||||
{
|
{
|
||||||
TALER_LOG_DEBUG ("Doubling the melt (%s)\n",
|
TALER_LOG_DEBUG ("Doubling the melt (%s)\n",
|
||||||
rms->cmd->label);
|
rms->cmd->label);
|
||||||
rms->rmh = TALER_EXCHANGE_melt (exchange,
|
rms->rmh = TALER_EXCHANGE_melt (
|
||||||
|
TALER_TESTING_interpreter_get_context (rms->is),
|
||||||
|
TALER_TESTING_get_exchange_url (rms->is),
|
||||||
|
TALER_TESTING_get_keys (rms->is),
|
||||||
&rms->rms,
|
&rms->rms,
|
||||||
&rms->refresh_data,
|
&rms->refresh_data,
|
||||||
&melt_cb,
|
&melt_cb,
|
||||||
@ -1154,7 +1151,10 @@ melt_run (void *cls,
|
|||||||
GNUNET_assert (age_restricted ==
|
GNUNET_assert (age_restricted ==
|
||||||
(NULL != age_commitment_proof));
|
(NULL != age_commitment_proof));
|
||||||
|
|
||||||
rms->rmh = TALER_EXCHANGE_melt (exchange,
|
rms->rmh = TALER_EXCHANGE_melt (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
&rms->rms,
|
&rms->rms,
|
||||||
&rms->refresh_data,
|
&rms->refresh_data,
|
||||||
&melt_cb,
|
&melt_cb,
|
||||||
|
@ -53,11 +53,6 @@ struct RefundState
|
|||||||
*/
|
*/
|
||||||
uint64_t refund_transaction_id;
|
uint64_t refund_transaction_id;
|
||||||
|
|
||||||
/**
|
|
||||||
* Connection to the exchange.
|
|
||||||
*/
|
|
||||||
struct TALER_EXCHANGE_Handle *exchange;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle to the refund operation.
|
* Handle to the refund operation.
|
||||||
*/
|
*/
|
||||||
@ -116,9 +111,6 @@ refund_run (void *cls,
|
|||||||
const struct TALER_MerchantPrivateKeyP *merchant_priv;
|
const struct TALER_MerchantPrivateKeyP *merchant_priv;
|
||||||
const struct TALER_TESTING_Command *coin_cmd;
|
const struct TALER_TESTING_Command *coin_cmd;
|
||||||
|
|
||||||
rs->exchange = TALER_TESTING_get_exchange (is);
|
|
||||||
if (NULL == rs->exchange)
|
|
||||||
return;
|
|
||||||
rs->is = is;
|
rs->is = is;
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
TALER_string_to_amount (rs->refund_amount,
|
TALER_string_to_amount (rs->refund_amount,
|
||||||
@ -172,7 +164,10 @@ refund_run (void *cls,
|
|||||||
TALER_TESTING_interpreter_fail (is);
|
TALER_TESTING_interpreter_fail (is);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rs->rh = TALER_EXCHANGE_refund (rs->exchange,
|
rs->rh = TALER_EXCHANGE_refund (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
&refund_amount,
|
&refund_amount,
|
||||||
&h_contract_terms,
|
&h_contract_terms,
|
||||||
&coin,
|
&coin,
|
||||||
|
@ -142,11 +142,7 @@ close_run (void *cls,
|
|||||||
{
|
{
|
||||||
struct CloseState *ss = cls;
|
struct CloseState *ss = cls;
|
||||||
const struct TALER_TESTING_Command *create_reserve;
|
const struct TALER_TESTING_Command *create_reserve;
|
||||||
struct TALER_EXCHANGE_Handle *exchange
|
|
||||||
= TALER_TESTING_get_exchange (is);
|
|
||||||
|
|
||||||
if (NULL == exchange)
|
|
||||||
return;
|
|
||||||
ss->is = is;
|
ss->is = is;
|
||||||
create_reserve
|
create_reserve
|
||||||
= TALER_TESTING_interpreter_lookup_command (is,
|
= TALER_TESTING_interpreter_lookup_command (is,
|
||||||
@ -169,7 +165,9 @@ close_run (void *cls,
|
|||||||
}
|
}
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv,
|
||||||
&ss->reserve_pub.eddsa_pub);
|
&ss->reserve_pub.eddsa_pub);
|
||||||
ss->rsh = TALER_EXCHANGE_reserves_close (exchange,
|
ss->rsh = TALER_EXCHANGE_reserves_close (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
ss->reserve_priv,
|
ss->reserve_priv,
|
||||||
ss->target_account,
|
ss->target_account,
|
||||||
&reserve_close_cb,
|
&reserve_close_cb,
|
||||||
|
@ -369,7 +369,10 @@ history_run (void *cls,
|
|||||||
}
|
}
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv,
|
||||||
&ss->reserve_pub.eddsa_pub);
|
&ss->reserve_pub.eddsa_pub);
|
||||||
ss->rsh = TALER_EXCHANGE_reserves_history (exchange,
|
ss->rsh = TALER_EXCHANGE_reserves_history (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
ss->reserve_priv,
|
ss->reserve_priv,
|
||||||
&reserve_history_cb,
|
&reserve_history_cb,
|
||||||
ss);
|
ss);
|
||||||
|
@ -256,7 +256,9 @@ open_run (void *cls,
|
|||||||
cpi->h_denom_pub = denom_pub->h_key;
|
cpi->h_denom_pub = denom_pub->h_key;
|
||||||
}
|
}
|
||||||
ss->rsh = TALER_EXCHANGE_reserves_open (
|
ss->rsh = TALER_EXCHANGE_reserves_open (
|
||||||
exchange,
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
ss->reserve_priv,
|
ss->reserve_priv,
|
||||||
&ss->reserve_pay,
|
&ss->reserve_pay,
|
||||||
ss->cpl,
|
ss->cpl,
|
||||||
|
@ -245,7 +245,9 @@ purse_run (void *cls,
|
|||||||
GNUNET_JSON_from_timestamp (ds->purse_expiration)));
|
GNUNET_JSON_from_timestamp (ds->purse_expiration)));
|
||||||
ds->merge_timestamp = GNUNET_TIME_timestamp_get ();
|
ds->merge_timestamp = GNUNET_TIME_timestamp_get ();
|
||||||
ds->dh = TALER_EXCHANGE_purse_create_with_merge (
|
ds->dh = TALER_EXCHANGE_purse_create_with_merge (
|
||||||
exchange,
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
&ds->reserve_priv,
|
&ds->reserve_priv,
|
||||||
&ds->purse_priv,
|
&ds->purse_priv,
|
||||||
&ds->merge_priv,
|
&ds->merge_priv,
|
||||||
|
@ -341,7 +341,10 @@ status_run (void *cls,
|
|||||||
}
|
}
|
||||||
GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv,
|
GNUNET_CRYPTO_eddsa_key_get_public (&ss->reserve_priv->eddsa_priv,
|
||||||
&ss->reserve_pub.eddsa_pub);
|
&ss->reserve_pub.eddsa_pub);
|
||||||
ss->rsh = TALER_EXCHANGE_reserves_status (exchange,
|
ss->rsh = TALER_EXCHANGE_reserves_status (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
ss->reserve_priv,
|
ss->reserve_priv,
|
||||||
&reserve_status_cb,
|
&reserve_status_cb,
|
||||||
ss);
|
ss);
|
||||||
|
@ -345,7 +345,10 @@ track_transfer_run (void *cls,
|
|||||||
}
|
}
|
||||||
GNUNET_assert (NULL != wtid_ptr);
|
GNUNET_assert (NULL != wtid_ptr);
|
||||||
}
|
}
|
||||||
tts->tth = TALER_EXCHANGE_transfers_get (exchange,
|
tts->tth = TALER_EXCHANGE_transfers_get (
|
||||||
|
TALER_TESTING_interpreter_get_context (is),
|
||||||
|
TALER_TESTING_get_exchange_url (is),
|
||||||
|
TALER_TESTING_get_keys (is),
|
||||||
wtid_ptr,
|
wtid_ptr,
|
||||||
&track_transfer_cb,
|
&track_transfer_cb,
|
||||||
tts);
|
tts);
|
||||||
|
Loading…
Reference in New Issue
Block a user