[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taler-mdb] branch master updated: add -t flag to disable tty
From: |
gnunet |
Subject: |
[taler-taler-mdb] branch master updated: add -t flag to disable tty |
Date: |
Fri, 06 Dec 2019 19:11:00 +0100 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository taler-mdb.
The following commit(s) were added to refs/heads/master by this push:
new 69c67e8 add -t flag to disable tty
69c67e8 is described below
commit 69c67e844b79461db05e184edc4d96310e75cd93
Author: Christian Grothoff <address@hidden>
AuthorDate: Fri Dec 6 19:10:58 2019 +0100
add -t flag to disable tty
---
src/main.c | 128 ++++++++++++++++++++++++++++++++++++-------------------------
1 file changed, 76 insertions(+), 52 deletions(-)
diff --git a/src/main.c b/src/main.c
index ddd103f..0d7c35a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -556,6 +556,11 @@ static char *uart_device_filename;
*/
static int disable_mdb;
+/**
+ * Global option '-t' to disable stdin / terminal.
+ */
+static int disable_tty;
+
/**
* Taler wallet application identifier
*/
@@ -752,6 +757,7 @@ cleanup_payment (struct PaymentActivity *pa)
GNUNET_free (pa);
}
+
/**
* @brief Shutdown the mdb communication tasks
*/
@@ -1135,7 +1141,7 @@ check_payment_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Backend request to /check-payment failed: %u\n",
http_status);
- mdb.cmd = &denyVend;
+ mdb.cmd = &denyVend;
run_mdb_event_loop ();
cleanup_payment (pa);
GNUNET_assert (payment_activity == pa);
@@ -1148,7 +1154,7 @@ check_payment_cb (void *cls,
mdb.cmd = &approveVend;
payment_activity->paid = GNUNET_YES;
run_mdb_event_loop ();
- if (disable_mdb)
+ if ((disable_mdb) && (! disable_tty))
{
GNUNET_SCHEDULER_cancel (keyboard_task);
keyboard_task = NULL;
@@ -1166,8 +1172,8 @@ check_payment_cb (void *cls,
(NULL == pa->delay_pay_task) )
{
pa->delay_pay_task = GNUNET_SCHEDULER_add_delayed (MAX_HTTP_RETRY_FREQ,
- &check_payment_again,
- pa);
+ &check_payment_again,
+ pa);
}
}
if (NULL == pa->taler_pay_uri)
@@ -1292,7 +1298,7 @@ launch_payment (const struct Product *product)
"amount", TALER_JSON_from_amount (&product->price),
"fulfillment_url", fulflmntUrl
// ,"auto_refund", GNUNET_JSON_from_time_rel
(MAX_REFUND_DELAY)
- );
+ );
GNUNET_free (fulflmntUrl);
if (NULL == orderReq)
{
@@ -1540,6 +1546,7 @@ start_read_keyboard ()
NULL);
}
+
/**
* @brief Send data to the vmc via the uart bus
*
@@ -1563,7 +1570,7 @@ write_mdb_command (void *cls)
run_mdb_event_loop ();
return;
}
- /* if command was sent completely send the rest */
+ /* if command was sent completely send the rest */
if (mdb.tx_off < mdb.tx_len)
{
ssize_t ret = write (mdb.uartfd,
@@ -1577,14 +1584,14 @@ write_mdb_command (void *cls)
"write",
uart_device_filename);
if (in_shutdown)
- mdb_shutdown ();
+ mdb_shutdown ();
else
- GNUNET_SCHEDULER_shutdown ();
+ GNUNET_SCHEDULER_shutdown ();
return;
}
mdb.tx_off += ret;
- /* if command was sent sucessfully start the timer for ACK timeout */
- if ( (ret > 0) &&
+ /* if command was sent sucessfully start the timer for ACK timeout */
+ if ( (ret > 0) &&
(mdb.tx_off == mdb.tx_len) )
mdb.ack_timeout = GNUNET_TIME_relative_to_absolute (MAX_ACK_LATENCY);
}
@@ -1682,7 +1689,7 @@ handle_command (const char *hex,
{
unsigned int cmd;
- /* if the received command is 0 or not a multiple of 2 we cannot parse
it */
+ /* if the received command is 0 or not a multiple of 2 we cannot parse it */
if (0 == hex_len)
return;
if (0 != (hex_len % 2))
@@ -1694,7 +1701,7 @@ handle_command (const char *hex,
GNUNET_break_op (0);
return;
}
- /* convert the received 2 bytes from ASCII to hex */
+ /* convert the received 2 bytes from ASCII to hex */
if (1 != sscanf (hex,
"%2X",
&cmd))
@@ -1706,7 +1713,7 @@ handle_command (const char *hex,
GNUNET_break_op (0);
return;
}
- /* parse the first byte (cmd) and the second byte (subcmd) */
+ /* parse the first byte (cmd) and the second byte (subcmd) */
switch (cmd)
{
case VMC_VEND:
@@ -1832,9 +1839,9 @@ handle_command (const char *hex,
mdb.session_running = GNUNET_NO;
break;
case VMC_READER_CANCEL:
- mdb.cmd = &readerCancelled;
- mdb.session_running = GNUNET_NO;
- break;
+ mdb.cmd = &readerCancelled;
+ mdb.session_running = GNUNET_NO;
+ break;
default:
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Unknown MDB sub-command %X of command %X\n",
@@ -1881,10 +1888,11 @@ handle_command (const char *hex,
}
}
+
/**
* @brief Read in the sent commands of the VMC controller
*
- * @param cls closure
+ * @param cls closure
*/
static void
read_mdb_command (void *cls)
@@ -1894,7 +1902,7 @@ read_mdb_command (void *cls)
size_t cmdEndIdx;
(void) cls;
- /* don't read if the mdb bus is disabled (only for testing) */
+ /* don't read if the mdb bus is disabled (only for testing) */
GNUNET_assert (! disable_mdb);
mdb.rtask = NULL;
ret = read (mdb.uartfd,
@@ -1936,14 +1944,14 @@ read_mdb_command (void *cls)
GNUNET_SCHEDULER_shutdown ();
return;
}
- /* move cmd in buffer to the beginning of the buffer */
+ /* move cmd in buffer to the beginning of the buffer */
memmove (mdb.rxBuffer,
&mdb.rxBuffer[cmdStartIdx],
mdb.rx_off - cmdStartIdx);
mdb.rx_off -= cmdStartIdx;
break;
}
- /* if the full command was received parse it */
+ /* if the full command was received parse it */
handle_command ((const char *) &mdb.rxBuffer[cmdStartIdx + 1],
cmdEndIdx - cmdStartIdx - 1);
/* move the data after the processed command to the left */
@@ -1960,6 +1968,7 @@ read_mdb_command (void *cls)
run_mdb_event_loop ();
}
+
/**
* @brief Mdb event loop to start read and write tasks
*/
@@ -1968,19 +1977,19 @@ run_mdb_event_loop ()
{
struct GNUNET_DISK_FileHandle fh = { mdb.uartfd };
- /* begin session if no cmd waits for sending and no cmd is received
from the VMC */
+ /* begin session if no cmd waits for sending and no cmd is received from the
VMC */
if ( (GNUNET_NO == mdb.session_running) &&
(NULL == mdb.cmd) &&
(NULL == mdb.last_cmd) )
{
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Begining MDB session\n");
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Begining MDB session\n");
mdb.cmd = &beginSession;
}
- /* start write task if he doesn't exist and if there is a cmd waiting
to get sent */
+ /* start write task if he doesn't exist and if there is a cmd waiting to get
sent */
if ( (NULL == mdb.wtask) &&
( (NULL != mdb.cmd) ||
- (in_shutdown) ||
+ (in_shutdown) ||
(mdb.tx_len > mdb.tx_off) ) )
{
if (disable_mdb)
@@ -2000,7 +2009,7 @@ run_mdb_event_loop ()
mdb.last_cmd->name);
handle_ack ();
}
- /* start read task if he doesn't exist and the mdb communication is not
disabled (only for testing) */
+ /* start read task if he doesn't exist and the mdb communication is not
disabled (only for testing) */
if ( (NULL == mdb.rtask) &&
(! disable_mdb) )
mdb.rtask = GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL,
@@ -2091,6 +2100,7 @@ read_products (void *cls,
tmpProduct);
}
+
/**
* @brief Initialise the uart device to send mdb commands
*/
@@ -2102,7 +2112,7 @@ mdb_init ()
if (disable_mdb)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
- "Running with MDB disabled!\n");
+ "Running with MDB disabled!\n");
run_mdb_event_loop ();
return GNUNET_OK;
}
@@ -2397,9 +2407,11 @@ run (void *cls,
framebuffer_device_filename);
}
#endif
- start_read_keyboard ();
+ if (! disable_tty)
+ start_read_keyboard ();
}
+
/**
* @brief Convert the ASCII cmd in @hex to hex and store it in the mdb data
struct @blk
*
@@ -2430,13 +2442,14 @@ parse_block (struct MdbBlock *blk,
}
}
+
/**
* @brief Create a new mdb command
*
- * @param *name pointer to the string containing the command name
+ * @param *name pointer to the string containing the command name
* @param *cmd pointer to the string containing the command
* @param *data pointer to the string containing the command data
- * @return structure of type MdbCommand holding the given information by the
parameters
+ * @return structure of type MdbCommand holding the given information by the
parameters
*/
static struct MdbCommand
setup_mdb_cmd (const char *name,
@@ -2466,27 +2479,36 @@ main (int argc,
"disable-mdb",
"disable all interactions with the MDB (for
testing without machine)",
&disable_mdb),
+ GNUNET_GETOPT_option_flag ('t',
+ "disable-tty",
+ "disable all keyboard interactions (for running
from systemd)",
+ &disable_tty),
GNUNET_GETOPT_OPTION_END
};
int have_tty;
- have_tty = isatty (STDIN_FILENO);
- if (have_tty)
+ if (! disable_tty)
{
- if (0 != tcgetattr (STDIN_FILENO, &tty_opts_backup))
- fprintf (stderr,
- "Failed to get terminal discipline\n");
- tty_opts_raw = tty_opts_backup;
- tty_opts_raw.c_lflag &= ~(ECHO | ECHONL | ICANON);
- if (0 != tcsetattr (STDIN_FILENO, TCSANOW, &tty_opts_raw))
- fprintf (stderr,
- "Failed to set terminal discipline\n");
+ have_tty = isatty (STDIN_FILENO);
+ if (have_tty)
+ {
+ if (0 != tcgetattr (STDIN_FILENO, &tty_opts_backup))
+ fprintf (stderr,
+ "Failed to get terminal discipline\n");
+ tty_opts_raw = tty_opts_backup;
+ tty_opts_raw.c_lflag &= ~(ECHO | ECHONL | ICANON);
+ if (0 != tcsetattr (STDIN_FILENO, TCSANOW, &tty_opts_raw))
+ fprintf (stderr,
+ "Failed to set terminal discipline\n");
+ }
}
-
/* make the needed commands for the communication with the vending machine
controller */
readerConfigData = setup_mdb_cmd ("Reader Config",
READER_CONFIG,
- READER_FEATURE_LEVEL READER_COUNTRYCODE
READER_SCALE_FACTOR READER_DECIMAL_PLACES READER_MAX_RESPONSE_TIME
READER_MISC_OPTIONS);
+ READER_FEATURE_LEVEL READER_COUNTRYCODE
+ READER_SCALE_FACTOR READER_DECIMAL_PLACES
+ READER_MAX_RESPONSE_TIME
+ READER_MISC_OPTIONS);
beginSession = setup_mdb_cmd ("Begin Session",
READER_BEGIN_SESSION,
READER_FUNDS_AVAILABLE);
@@ -2494,8 +2516,8 @@ main (int argc,
READER_VEND_APPROVE,
READER_VEND_AMOUNT);
readerCancelled = setup_mdb_cmd ("Confirm cancellation",
- READER_CANCELLED,
- NULL);
+ READER_CANCELLED,
+ NULL);
denyVend = setup_mdb_cmd ("Deny Vend",
READER_VEND_DENIED,
NULL);
@@ -2510,16 +2532,18 @@ main (int argc,
options,
&run,
NULL);
- if (have_tty)
+ if (! disable_tty)
{
- /* Restore previous TTY settings */
- if (0 != tcsetattr (STDIN_FILENO,
- TCSANOW,
- &tty_opts_backup))
- fprintf (stderr,
- "Failed to restore terminal discipline\n");
+ if (have_tty)
+ {
+ /* Restore previous TTY settings */
+ if (0 != tcsetattr (STDIN_FILENO,
+ TCSANOW,
+ &tty_opts_backup))
+ fprintf (stderr,
+ "Failed to restore terminal discipline\n");
+ }
}
-
if (GNUNET_OK != ret)
return 1;
return global_ret;
--
To stop receiving notification emails like this one, please contact
address@hidden.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-taler-mdb] branch master updated: add -t flag to disable tty,
gnunet <=