drafting API for /withdraw/status and /withdraw/sign

This commit is contained in:
Christian Grothoff 2015-06-22 15:23:18 +02:00
parent 3954fbe8c0
commit e51b6f753a

View File

@ -420,7 +420,184 @@ void
TALER_MINT_deposit_cancel (struct TALER_MINT_DepositHandle *deposit);
/* ********************* /withdraw/xxx *********************** */
/* ********************* /withdraw/status *********************** */
/**
* @brief A /withdraw/status Handle
*/
struct TALER_MINT_WithdrawStatusHandle;
/**
* Ways how a reserve's balance may change.
*/
enum TALER_MINT_ReserveTransactionType {
/**
* Deposit into the reserve.
*/
TALER_MINT_RTT_DEPOSIT,
/**
* Withdrawal from the reserve.
*/
TALER_MINT_RTT_WITHDRAWAL
};
/**
* Entry in the reserve's transaction history.
*/
struct TALER_MINT_ReserveHistory
{
/**
* Type of the transaction.
*/
enum TALER_MINT_ReserveTransactionType type;
/**
* Amount transferred (in or out).
*/
struct TALER_Amount amount;
/**
* Details depending on @e type.
*/
union {
/**
* Transaction details for the incoming transaction.
*/
json_t *wire_in_details;
/**
* Signature authorizing the withdrawal for outgoing transaction.
*/
struct TALER_ReserveSignatureP out_authorization_sig;
};
};
/**
* Callbacks of this type are used to serve the result of submitting a
* deposit permission request to a mint.
*
* @param cls closure
* @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request
* 0 if the mint's reply is bogus (fails to follow the protocol)
* @param balance current balance in the reserve
* @param history_length number of entries in the transaction history
* @param history detailed transaction history
*/
typedef void
(*TALER_MINT_WithdrawStatusResultCallback) (void *cls,
unsigned int http_status,
const struct TALER_Amount *balance,
unsigned int history_length,
const struct TALER_MINT_ReserveHistory *history);
/**
* Submit a request to obtain the transaction history of a reserve
* from the mint. Note that while we return the full response to the
* caller for further processing, we do already verify that the
* response is well-formed (i.e. that signatures included in the
* response are all valid and add up to the balance). If the mint's
* reply is not well-formed, we return an HTTP status code of zero to
* @a cb.
*
* @param mint the mint handle; the mint must be ready to operate
* @param reserve_pub public key of the reserve to inspect
* @param cb the callback to call when a reply for this request is available
* @param cb_cls closure for the above callback
* @return a handle for this request; NULL if the inputs are invalid (i.e.
* signatures fail to verify). In this case, the callback is not called.
*/
struct TALER_MINT_WithdrawStatusHandle *
TALER_MINT_withdraw_status (struct TALER_MINT_Handle *mint,
const struct TALER_ReservePublicKeyP *reserve_pub,
TALER_MINT_WithdrawStatusResultCallback cb,
void *cb_cls);
/**
* Cancel a withdraw status request. This function cannot be used
* on a request handle if a response is already served for it.
*
* @param status the withdraw status request handle
*/
void
TALER_MINT_withdraw_status_cancel (struct TALER_MINT_WithdrawStatusHandle *status);
/* ********************* /withdraw/sign *********************** */
/**
* @brief A /withdraw/sign Handle
*/
struct TALER_MINT_WithdrawSignHandle;
/**
* Callbacks of this type are used to serve the result of submitting a
* deposit permission request to a mint.
*
* @param cls closure
* @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request
* 0 if the mint's reply is bogus (fails to follow the protocol)
* @param sig signature over the coin, NULL on error
* @param full_response full response from the mint (for logging, in case of errors)
*/
typedef void
(*TALER_MINT_WithdrawSignResultCallback) (void *cls,
unsigned int http_status,
const struct TALER_DenominationSignature *sig,
json_t *full_response);
/**
* Withdraw a coin from the mint using a /withdraw/sign request. Note
* that to ensure that no money is lost in case of hardware failures,
* the caller must have committed (most of) the arguments to disk
* before calling, and be ready to repeat the request with the same
* arguments in case of failures.
*
* @param mint the mint handle; the mint must be ready to operate
* @param pk kind of coin to create
* @param coin_priv where to store the coin's private key,
* caller must have committed this value to disk before the call (with @a pk)
* @param blinding_key where to store the coin's blinding key
* caller must have committed this value to disk before the call (with @a pk)
* @param res_cb the callback to call when the final result for this request is available
* @param res_cb_cls closure for the above callback
* @return #GNUNET_OK on success, #GNUNET_SYSERR
* if the inputs are invalid (i.e. denomination key not with this mint).
* In this case, the callback is not called.
*/
struct TALER_MINT_WithdrawSignHandle *
TALER_MINT_withdraw_sign (struct TALER_MINT_Handle *mint,
const struct TALER_MINT_DenomPublicKey *pk,
const struct TALER_ReservePrivateKeyP *reserve_priv,
const struct TALER_CoinSpendPrivateKeyP *coin_priv,
const struct TALER_DenominationBlindingKey *blinding_key,
TALER_MINT_WithdrawSignResultCallback res_cb,
void *res_cb_cls);
/**
* Cancel a withdraw status request. This function cannot be used
* on a request handle if a response is already served for it.
*
* @param sign the withdraw sign request handle
*/
void
TALER_MINT_withdraw_sign_cancel (struct TALER_MINT_WithdrawSignHandle *sign);