move responsibility of converting to wire subject to reserve_pub into wire plugin
This commit is contained in:
parent
5e36e520a5
commit
2dcaffe451
@ -210,18 +210,17 @@ history_cb (void *cls,
|
|||||||
enum TALER_BANK_Direction dir,
|
enum TALER_BANK_Direction dir,
|
||||||
const void *row_off,
|
const void *row_off,
|
||||||
size_t row_off_size,
|
size_t row_off_size,
|
||||||
const struct TALER_BANK_TransferDetails *details)
|
const struct TALER_WIRE_TransferDetails *details)
|
||||||
{
|
{
|
||||||
struct TALER_EXCHANGEDB_Session *session = cls;
|
struct TALER_EXCHANGEDB_Session *session = cls;
|
||||||
int ret;
|
int ret;
|
||||||
struct TALER_ReservePublicKeyP reserve_pub;
|
|
||||||
|
|
||||||
if (TALER_BANK_DIRECTION_NONE == dir)
|
if (TALER_BANK_DIRECTION_NONE == dir)
|
||||||
{
|
{
|
||||||
hh = NULL;
|
hh = NULL;
|
||||||
|
|
||||||
/* FIXME: commit last_off to DB! */
|
/* FIXME: commit last_off to DB!?
|
||||||
|
(or just select via 'reserves_in' by SERIAL ID!?) */
|
||||||
ret = db_plugin->commit (db_plugin->cls,
|
ret = db_plugin->commit (db_plugin->cls,
|
||||||
session);
|
session);
|
||||||
if (GNUNET_OK == ret)
|
if (GNUNET_OK == ret)
|
||||||
@ -239,22 +238,10 @@ history_cb (void *cls,
|
|||||||
NULL);
|
NULL);
|
||||||
return GNUNET_OK; /* will be ignored anyway */
|
return GNUNET_OK; /* will be ignored anyway */
|
||||||
}
|
}
|
||||||
/* TODO: We should expect a checksum! */
|
|
||||||
if (GNUNET_OK !=
|
|
||||||
GNUNET_STRINGS_string_to_data (details->wire_transfer_subject,
|
|
||||||
strlen (details->wire_transfer_subject),
|
|
||||||
&reserve_pub,
|
|
||||||
sizeof (reserve_pub)))
|
|
||||||
{
|
|
||||||
/* FIXME: need way to wire money back immediately... */
|
|
||||||
GNUNET_break (0); // not implemented
|
|
||||||
|
|
||||||
return GNUNET_OK;
|
|
||||||
}
|
|
||||||
// FIXME: create json!
|
// FIXME: create json!
|
||||||
ret = db_plugin->reserves_in_insert (db_plugin->cls,
|
ret = db_plugin->reserves_in_insert (db_plugin->cls,
|
||||||
session,
|
session,
|
||||||
&reserve_pub,
|
&details->reserve_pub,
|
||||||
&details->amount,
|
&details->amount,
|
||||||
details->execution_date,
|
details->execution_date,
|
||||||
details->account_details,
|
details->account_details,
|
||||||
|
@ -41,6 +41,35 @@ typedef void
|
|||||||
size_t buf_size);
|
size_t buf_size);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Details about a valid wire transfer to the exchange.
|
||||||
|
* It is the plugin's responsibility to filter and undo
|
||||||
|
* invalid transfers.
|
||||||
|
*/
|
||||||
|
struct TALER_WIRE_TransferDetails
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Amount that was transferred
|
||||||
|
*/
|
||||||
|
struct TALER_Amount amount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time of the the transfer
|
||||||
|
*/
|
||||||
|
struct GNUNET_TIME_Absolute execution_date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reserve public key that was encoded in the wire transfer subject
|
||||||
|
*/
|
||||||
|
struct TALER_ReservePublicKeyP reserve_pub;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The other account that was involved
|
||||||
|
*/
|
||||||
|
json_t *account_details;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callbacks of this type are used to serve the result of asking
|
* Callbacks of this type are used to serve the result of asking
|
||||||
* the bank for the transaction history.
|
* the bank for the transaction history.
|
||||||
@ -57,7 +86,7 @@ typedef int
|
|||||||
enum TALER_BANK_Direction dir,
|
enum TALER_BANK_Direction dir,
|
||||||
const void *row_off,
|
const void *row_off,
|
||||||
size_t row_off_size,
|
size_t row_off_size,
|
||||||
const struct TALER_BANK_TransferDetails *details);
|
const struct TALER_WIRE_TransferDetails *details);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -818,16 +818,36 @@ bhist_cb (void *cls,
|
|||||||
{
|
{
|
||||||
struct TALER_WIRE_HistoryHandle *whh = cls;
|
struct TALER_WIRE_HistoryHandle *whh = cls;
|
||||||
uint64_t bserial_id = GNUNET_htonll (serial_id);
|
uint64_t bserial_id = GNUNET_htonll (serial_id);
|
||||||
|
struct TALER_WIRE_TransferDetails wd;
|
||||||
|
|
||||||
if (MHD_HTTP_OK == http_status)
|
if (MHD_HTTP_OK == http_status)
|
||||||
{
|
{
|
||||||
|
wd.amount = details->amount;
|
||||||
|
wd.execution_date = details->execution_date;
|
||||||
|
/* NOTE: For a real bank, the subject should include a checksum! */
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
GNUNET_STRINGS_string_to_data (details->wire_transfer_subject,
|
||||||
|
strlen (details->wire_transfer_subject),
|
||||||
|
&wd.reserve_pub,
|
||||||
|
sizeof (wd.reserve_pub)))
|
||||||
|
{
|
||||||
|
GNUNET_break (0);
|
||||||
|
/* NOTE: for a "real" bank, we would want to trigger logic to undo the
|
||||||
|
wire transfer. However, for the "demo" bank, it should currently
|
||||||
|
be "impossible" to do wire transfers with invalid subjects, and
|
||||||
|
equally we thus don't need to undo them (and there is no API to do
|
||||||
|
that nicely either right now). So we don't handle this case for now. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
wd.account_details = details->account_details;
|
||||||
|
|
||||||
if ( (NULL != whh->hres_cb) &&
|
if ( (NULL != whh->hres_cb) &&
|
||||||
(GNUNET_OK !=
|
(GNUNET_OK !=
|
||||||
whh->hres_cb (whh->hres_cb_cls,
|
whh->hres_cb (whh->hres_cb_cls,
|
||||||
dir,
|
dir,
|
||||||
&bserial_id,
|
&bserial_id,
|
||||||
sizeof (bserial_id),
|
sizeof (bserial_id),
|
||||||
details)) )
|
&wd)) )
|
||||||
whh->hres_cb = NULL;
|
whh->hres_cb = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user