diff options
Diffstat (limited to 'src/include/taler_bank_service.h')
-rw-r--r-- | src/include/taler_bank_service.h | 188 |
1 files changed, 186 insertions, 2 deletions
diff --git a/src/include/taler_bank_service.h b/src/include/taler_bank_service.h index 9a0926bf4..a564bd336 100644 --- a/src/include/taler_bank_service.h +++ b/src/include/taler_bank_service.h @@ -26,6 +26,62 @@ #include <gnunet/gnunet_curl_lib.h> #include "taler_util.h" + +/** + * Authentication method types. + */ +enum TALER_BANK_AuthenticationMethod { + + /** + * No authentication. + */ + TALER_BANK_AUTH_NONE, + + /** + * Basic authentication with cleartext username and password. + */ + TALER_BANK_AUTH_BASIC +}; + + +/** + * Information used to authenticate to the bank. + */ +struct TALER_BANK_AuthenticationData +{ + + /** + * Which authentication method should we use? + */ + enum TALER_BANK_AuthenticationMethod method; + + /** + * Further details as per @e method. + */ + union + { + + /** + * Details for #TALER_BANK_AUTH_BASIC. + */ + struct + { + /** + * Username to use. + */ + char *username; + + /** + * Password to use. + */ + char *password; + } basic; + + } details; + +}; + + /* ********************* /admin/add/incoming *********************** */ @@ -57,8 +113,8 @@ typedef void * to the operators of the bank. * * @param ctx curl context for the event loop - * @param auth authentication data to send to the bank * @param bank_base_url URL of the bank (used to execute this request) + * @param auth authentication data to use * @param exchange_base_url base URL of the exchange (for tracking) * @param wtid wire transfer identifier for the transfer * @param amount amount that was deposited @@ -72,8 +128,8 @@ typedef void */ struct TALER_BANK_AdminAddIncomingHandle * TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx, - const json_t *auth, const char *bank_base_url, + const struct TALER_BANK_AuthenticationData *auth, const char *exchange_base_url, const struct TALER_WireTransferIdentifierRawP *wtid, const struct TALER_Amount *amount, @@ -92,4 +148,132 @@ TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx, void TALER_BANK_admin_add_incoming_cancel (struct TALER_BANK_AdminAddIncomingHandle *aai); + +/** + * Which types of transactions should be returned? + */ +enum TALER_BANK_Direction { + + /** + * Transactions where the bank account receives money. + */ + TALER_BANK_DIRECTION_CREDIT = 1, + + /** + * Transactions where the bank account looses money. + */ + TALER_BANK_DIRECTION_DEBIT = 2, + + /** + * Return both types of transactions. + */ + TALER_BANK_DIRECTION_BOTH = (TALER_BANK_DIRECTION_CREDIT | TALER_BANK_DIRECTION_DEBIT) + +}; + + +/** + * Handle for querying the bank's transaction history. + */ +struct TALER_BANK_HistoryHandle; + +/** + * Details about a wire transfer. + */ +struct TALER_BANK_TransferDetails +{ + /** + * amount that was transferred + */ + struct TALER_Amount amount; + + /** + * when did the transfer happen + */ + struct GNUNET_TIME_Absolute execution_date; + + /** + * monotonically increasing counter corresponding to the transaction + */ + uint64_t serial_id; + + /** + * wire transfer subject + */ + char *wire_transfer_subject; + + /** + * what was the other account that was involved + */ + json_t *account_details; +}; + + +/** + * Callbacks of this type are used to serve the result of asking + * the bank for the transaction history. + * + * @param cls closure + * @param http_status HTTP response code, #MHD_HTTP_OK (200) for successful status request + * 0 if the bank's reply is bogus (fails to follow the protocol), + * #MHD_HTTP_NO_CONTENT if there are no more results; on success the + * last callback is always of this status (even if `abs(num_results)` were + * already returned). + * @param dir direction of the transfer + * @param details details about the wire transfer + * @param json detailed response from the HTTPD, or NULL if reply was not in JSON + */ +typedef void +(*TALER_BANK_HistoryResultCallback) (void *cls, + unsigned int http_status, + enum TALER_BANK_Direction dir, + const struct TALER_BANK_TransferDetails *details, + const json_t *json); + + +/** + * Notify the bank that we have received an incoming transaction + * which fills a reserve. Note that this API is an administrative + * API and thus not accessible to typical bank clients, but only + * to the operators of the bank. + * + * @param ctx curl context for the event loop + * @param bank_base_url URL of the bank (used to execute this request) + * @param auth authentication data to use + * @param account_number which account number should we query + * @param direction what kinds of wire transfers should be returned + * @param start_row from which row on do we want to get results, use UINT64_MAX for the latest + * @param num_results how many results do we want; negative numbers to go into the past, + * positive numbers to go into the future starting at @a start_row; + * must not be zero. + * @param hres_cb the callback to call with the transaction history + * @param hres_cb_cls closure for the above callback + * @return NULL + * if the inputs are invalid (i.e. zero value for @e num_results). + * In this case, the callback is not called. + */ +struct TALER_BANK_HistoryHandle * +TALER_BANK_history (struct GNUNET_CURL_Context *ctx, + const char *bank_base_url, + const struct TALER_BANK_AuthenticationData *auth, + uint64_t account_number, + enum TALER_BANK_Direction direction, + uint64_t start_row, + int64_t num_results, + TALER_BANK_HistoryResultCallback hres_cb, + void *hres_cb_cls); + + +/** + * Cancel an history request. This function cannot be used on a request + * handle if the last response (anything with a status code other than + * 200) is already served for it. + * + * @param hh the history request handle + */ +void +TALER_BANK_history_cancel (struct TALER_BANK_HistoryHandle *hh); + + + #endif /* _TALER_BANK_SERVICE_H */ |