more work on wirewatch

This commit is contained in:
Christian Grothoff 2017-05-05 12:17:48 +02:00
parent da75b30a25
commit 2c05a4b278
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 62 additions and 22 deletions

View File

@ -3,4 +3,5 @@ taler-exchange-keycheck
taler-exchange-keyup taler-exchange-keyup
taler-exchange-pursemod taler-exchange-pursemod
taler-exchange-reservemod taler-exchange-reservemod
taler-exchange-httpdtaler-exchange-wirewatch taler-exchange-httpd
taler-exchange-wirewatch

View File

@ -203,8 +203,9 @@ find_transfers (void *cls);
* @param row_off identification of the position at which we are querying * @param row_off identification of the position at which we are querying
* @param row_off_size number of bytes in @a row_off * @param row_off_size number of bytes in @a row_off
* @param details details about the wire transfer * @param details details about the wire transfer
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
*/ */
static void static int
history_cb (void *cls, history_cb (void *cls,
enum TALER_BANK_Direction dir, enum TALER_BANK_Direction dir,
const void *row_off, const void *row_off,
@ -212,13 +213,15 @@ history_cb (void *cls,
const struct TALER_BANK_TransferDetails *details) const struct TALER_BANK_TransferDetails *details)
{ {
struct TALER_EXCHANGEDB_Session *session = cls; struct TALER_EXCHANGEDB_Session *session = cls;
int ret;
struct TALER_ReservePublicKeyP reserve_pub;
// TODO: store to DB...
if (TALER_BANK_DIRECTION_NONE == dir) if (TALER_BANK_DIRECTION_NONE == dir)
{ {
int ret;
hh = NULL; hh = NULL;
/* FIXME: commit last_off to DB! */
ret = db_plugin->commit (db_plugin->cls, ret = db_plugin->commit (db_plugin->cls,
session); session);
if (GNUNET_OK == ret) if (GNUNET_OK == ret)
@ -234,7 +237,37 @@ history_cb (void *cls,
else else
task = GNUNET_SCHEDULER_add_now (&find_transfers, task = GNUNET_SCHEDULER_add_now (&find_transfers,
NULL); NULL);
return; 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: store row_off+row_off_size instead of json_t?
ret = db_plugin->reserves_in_insert (db_plugin->cls,
session,
&reserve_pub,
&details->amount,
details->execution_date,
details->account_details,
NULL /* FIXME */);
if (GNUNET_OK != ret)
{
GNUNET_break (0);
db_plugin->rollback (db_plugin->cls,
session);
/* try again */
task = GNUNET_SCHEDULER_add_now (&find_transfers,
NULL);
return GNUNET_SYSERR;
} }
if (last_row_off_size != row_off_size) if (last_row_off_size != row_off_size)
@ -245,6 +278,7 @@ history_cb (void *cls,
memcpy (last_row_off, memcpy (last_row_off,
row_off, row_off,
row_off_size); row_off_size);
return GNUNET_OK;
} }
@ -279,6 +313,8 @@ find_transfers (void *cls)
GNUNET_SCHEDULER_shutdown (); GNUNET_SCHEDULER_shutdown ();
return; return;
} }
/* FIXME: fetch start_off from DB! */
delay = GNUNET_YES; delay = GNUNET_YES;
hh = wire_plugin->get_history (wire_plugin->cls, hh = wire_plugin->get_history (wire_plugin->cls,
TALER_BANK_DIRECTION_CREDIT, TALER_BANK_DIRECTION_CREDIT,
@ -297,7 +333,6 @@ find_transfers (void *cls)
GNUNET_SCHEDULER_shutdown (); GNUNET_SCHEDULER_shutdown ();
return; return;
} }
/* FIXME: write last_off! */
} }

View File

@ -50,8 +50,9 @@ typedef void
* @param row_off identification of the position at which we are querying * @param row_off identification of the position at which we are querying
* @param row_off_size number of bytes in @a row_off * @param row_off_size number of bytes in @a row_off
* @param details details about the wire transfer * @param details details about the wire transfer
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
*/ */
typedef void typedef int
(*TALER_WIRE_HistoryResultCallback) (void *cls, (*TALER_WIRE_HistoryResultCallback) (void *cls,
enum TALER_BANK_Direction dir, enum TALER_BANK_Direction dir,
const void *row_off, const void *row_off,

View File

@ -816,23 +816,26 @@ 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);
if (MHD_HTTP_OK == http_status) if (MHD_HTTP_OK == http_status)
whh->hres_cb (whh->hres_cb_cls,
dir,
&bserial_id,
sizeof (bserial_id),
details);
else
whh->hres_cb (whh->hres_cb_cls,
TALER_BANK_DIRECTION_NONE,
NULL,
0,
NULL);
if (MHD_HTTP_OK != http_status)
{ {
if ( (NULL != whh->hres_cb) &&
(GNUNET_OK !=
whh->hres_cb (whh->hres_cb_cls,
dir,
&bserial_id,
sizeof (bserial_id),
details)) )
whh->hres_cb = NULL;
}
else
{
(void) whh->hres_cb (whh->hres_cb_cls,
TALER_BANK_DIRECTION_NONE,
NULL,
0,
NULL);
whh->hh = NULL; whh->hh = NULL;
GNUNET_free (whh); GNUNET_free (whh);
return;
} }
} }