4692. Logic to ask for transaction history.
This commit is contained in:
parent
cd0b9e8e0a
commit
066f03f95a
@ -3,17 +3,17 @@
|
||||
Copyright (C) 2014-2018 Taler Systems SA
|
||||
|
||||
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 Foundation; either version 3, or (at your
|
||||
option) any later version.
|
||||
it under the terms of the GNU General Public License as
|
||||
published by the Free Software Foundation; either version 3,
|
||||
or (at your option) any later version.
|
||||
|
||||
TALER is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with TALER; see the file COPYING. If not,
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with TALER; see the file COPYING. If not,
|
||||
see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
@ -30,14 +30,44 @@
|
||||
#include <taler/taler_wire_lib.h>
|
||||
|
||||
/**
|
||||
* Plugin name specified by the user.
|
||||
* If set to GNUNET_YES, then we'll ask the bank for a list
|
||||
* of transactions from the account mentioned in the config
|
||||
* section.
|
||||
*/
|
||||
int history;
|
||||
|
||||
/**
|
||||
* If set to GNUNET_YES, then we'll ask the bank to execute a
|
||||
* wire transfer.
|
||||
*/
|
||||
int transfer;
|
||||
|
||||
/**
|
||||
* Name of the wire plugin to use with the bank.
|
||||
*/
|
||||
char *plugin_name;
|
||||
|
||||
/**
|
||||
* Global return code.
|
||||
*/
|
||||
unsigned int global_ret;
|
||||
unsigned int global_ret = 0;
|
||||
|
||||
/**
|
||||
* Base32 encoding of a transaction ID. When asking the
|
||||
* bank for a transaction history, all the results will
|
||||
* have a transaction ID settled *after* this one.
|
||||
*/
|
||||
char *since_when;
|
||||
|
||||
/**
|
||||
* Which config section has the credentials to access the bank.
|
||||
*/
|
||||
char *account_section;
|
||||
|
||||
/**
|
||||
* Binary version of the 'since-when' CLI option.
|
||||
*/
|
||||
void *since_when_bin;
|
||||
|
||||
/**
|
||||
* Wire plugin handle.
|
||||
@ -45,6 +75,95 @@ unsigned int global_ret;
|
||||
struct TALER_WIRE_Plugin *plugin_handle;
|
||||
|
||||
|
||||
/**
|
||||
* Callback used to process ONE entry in the transaction
|
||||
* history returned by the bank.
|
||||
* @param cls closure
|
||||
* @param ec taler error code
|
||||
* @param dir direction of the transfer
|
||||
* @param row_off identification of the position at
|
||||
* which we are querying
|
||||
* @param row_off_size number of bytes in @a row_off
|
||||
* @param details details about the wire transfer
|
||||
* @return #GNUNET_OK to continue, #GNUNET_SYSERR to
|
||||
* abort iteration
|
||||
*/
|
||||
int
|
||||
cb (void *cls,
|
||||
enum TALER_ErrorCode ec,
|
||||
enum TALER_BANK_Direction dir,
|
||||
const void *row_off,
|
||||
size_t row_off_size,
|
||||
const struct TALER_WIRE_TransferDetails *details)
|
||||
{
|
||||
char *row_off_enc;
|
||||
|
||||
row_off_enc = GNUNET_STRINGS_data_to_string_alloc (row_off,
|
||||
row_off_size);
|
||||
|
||||
fprintf (stdout,
|
||||
"History of transactions:\n");
|
||||
|
||||
/* Give more details on screen (??) */
|
||||
fprintf (stdout,
|
||||
"%s\n",
|
||||
row_off_enc);
|
||||
|
||||
GNUNET_free (row_off_enc);
|
||||
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ask the bank to execute a wire transfer.
|
||||
*/
|
||||
void
|
||||
execute_wire_transfer ()
|
||||
{}
|
||||
|
||||
/**
|
||||
* Ask the bank the list of transactions for the bank account
|
||||
* mentioned in the config section given by the user.
|
||||
*/
|
||||
void
|
||||
execute_history ()
|
||||
{
|
||||
size_t bin_len = (strlen (since_when) * 5) / 8;
|
||||
|
||||
if (NULL == since_when)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Missing since-when option\n");
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
since_when_bin = GNUNET_malloc (bin_len);
|
||||
GNUNET_assert
|
||||
(GNUNET_OK == GNUNET_STRINGS_string_to_data
|
||||
(since_when,
|
||||
strlen (since_when),
|
||||
since_when_bin,
|
||||
bin_len));
|
||||
|
||||
if (NULL == plugin_handle->get_history
|
||||
(plugin_handle->cls,
|
||||
account_section,
|
||||
TALER_BANK_DIRECTION_BOTH,
|
||||
since_when_bin,
|
||||
bin_len,
|
||||
10,
|
||||
cb,
|
||||
NULL));
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Could not request the transaction history.\n");
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Main function that will be run.
|
||||
*
|
||||
@ -60,11 +179,24 @@ run (void *cls,
|
||||
const char *cfgfile,
|
||||
const struct GNUNET_CONFIGURATION_Handle *cfg)
|
||||
{
|
||||
if (NULL == plugin_name)
|
||||
if (NULL == account_section)
|
||||
{
|
||||
global_ret = 1;
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"The PLUGIN command line option is mandatory.\n");
|
||||
"The ACCOUNT-SECTION is mandatory.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string
|
||||
(cfg,
|
||||
account_section,
|
||||
"plugin",
|
||||
&plugin_name))
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Could not find the 'plugin' value under %s\n",
|
||||
account_section);
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -77,6 +209,11 @@ run (void *cls,
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (GNUNET_YES == history)
|
||||
execute_history ();
|
||||
else
|
||||
execute_wire_transfer ();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -95,11 +232,33 @@ main (int argc,
|
||||
{
|
||||
struct GNUNET_GETOPT_CommandLineOption options[] = {
|
||||
|
||||
GNUNET_GETOPT_option_string ('p',
|
||||
"plugin",
|
||||
"PLUGIN",
|
||||
"Wire plugin to use",
|
||||
&plugin_name),
|
||||
GNUNET_GETOPT_option_flag ('h',
|
||||
"history",
|
||||
"Wire plugin to use",
|
||||
&history),
|
||||
|
||||
GNUNET_GETOPT_option_flag ('t',
|
||||
"transfer",
|
||||
"Execute a wire transfer.",
|
||||
&transfer),
|
||||
|
||||
GNUNET_GETOPT_option_string ('w',
|
||||
"since-when",
|
||||
"SW",
|
||||
"When asking the bank for"
|
||||
" transactions history, this"
|
||||
" option commands that all the"
|
||||
" results should have IDs settled"
|
||||
" after SW",
|
||||
&since_when),
|
||||
|
||||
GNUNET_GETOPT_option_string ('s',
|
||||
"section",
|
||||
"ACCOUNT-SECTION",
|
||||
"Which config section has the"
|
||||
" credentials to access the"
|
||||
" bank.\n",
|
||||
&account_section),
|
||||
|
||||
GNUNET_GETOPT_OPTION_END
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user