From 37ee37edaaeaf0554a4a4b168d15942acff40d5b Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Sun, 30 Mar 2025 15:12:11 +0200 Subject: [PATCH] log file management --- morep_valid.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/morep_valid.c b/morep_valid.c index 9615426..25ae870 100644 --- a/morep_valid.c +++ b/morep_valid.c @@ -199,6 +199,19 @@ uint8_t *parse_line (char *line, uint8_t *msgtype, int *plen) return payload; } +void print_message (FILE *fd, char *etype, int mode, uint8_t msg, int seqnum, uint8_t *payload, int len) +{ + fprintf (fd ? fd : stdout, "%c%s SEG=%d MSG=%d LEN=%d", mode ? 'T' : 'R', etype, seqnum, msg, len); + if (len > 0) { + int i; + fprintf (fd ? fd : stdout, " PAYLOAD="); + for (i = 0; i < len; i++) { + fprintf (fd ? fd : stdout, "%02x", payload[i]); + } + } + fprintf (fd ? fd : stdout, "\n"); +} + typedef struct { int morep; int mode; @@ -210,6 +223,7 @@ typedef struct { int main (int argc, char **argv) { char *filename = NULL; + char *logname = NULL; char *url = NULL; int mode = -1; int nbcomms = 0; @@ -233,6 +247,15 @@ int main (int argc, char **argv) } char c = arg[1]; switch (c) { + case 'l': + arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; + if (arg == NULL) { + VERBOSE (morep, ERROR, PRINTF ("%s: log file not specified\n", progname)); + return 1; + } + logname = arg; + mode = 0; + break; case 'r': arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL; if (arg == NULL) { @@ -292,12 +315,22 @@ int main (int argc, char **argv) return -1; } - /* read file */ + /* open log file */ + FILE *log = NULL; + if (logname != NULL) { + log = fopen (logname, "r"); + if (log == NULL) { + VERBOSE (morep, ERROR, PRINTF ("can't open log file '%s' for reading\n", logname)); + return -1; + } + } + + /* open script file */ FILE *fid = stdin; if (filename != NULL) { fid = fopen (filename, "r"); if (fid == NULL) { - VERBOSE (morep, ERROR, PRINTF ("can't open file '%s' for reading\n", filename)); + VERBOSE (morep, ERROR, PRINTF ("can't open script file '%s' for reading\n", filename)); return -1; } } @@ -379,16 +412,16 @@ int main (int argc, char **argv) /* transmit */ if (mode == 1) { int seqnum = MOREP_Send (comm->morep, msgtype, payload, len); - VERBOSE (morep, INFO, PRINTF ("T%s seqnum=%d msg=%d length=%d\n", comm->etype, seqnum, msgtype, len)); + print_message (log, comm->etype, 1, msgtype, seqnum, payload, len); } else { /* receive */ uint8_t rxmsgtype = 0; uint8_t rxpayload[1496 * 16 - 1] = {0}; - int rxlen = 0; + int rxlen = -1; int seqnum = MOREP_Receive (comm->morep, &rxmsgtype, rxpayload, &rxlen); /* check msg type */ if (rxmsgtype != msgtype) { - VERBOSE (morep, WARNING, PRINTF ("R%04x seqnum=%d msg=%d: expected msgtype %04x\n", rxmsgtype, seqnum, rxmsgtype, msgtype)); + VERBOSE (morep, WARNING, PRINTF ("R%04x SEQ=%d MSG=%d: expected msgtype %04x\n", rxmsgtype, seqnum, rxmsgtype, msgtype)); } /* check payload */ else { @@ -398,11 +431,10 @@ int main (int argc, char **argv) ok = (rxpayload[i] == payload[i]); } if (!ok) { - VERBOSE (morep, WARNING, PRINTF ("R%04x seqnum=%d msg=%d: payloads differed at %d/%d\n", rxmsgtype, seqnum, rxmsgtype, i, rxlen)); - } else { - VERBOSE (morep, INFO, PRINTF ("R%04x seqnum=%d msg=%d length=%d\n", rxmsgtype, seqnum, rxmsgtype, rxlen)); + VERBOSE (morep, WARNING, PRINTF ("R%04x SEQ=%d MSG=%d: payloads differed at %d/%d\n", rxmsgtype, seqnum, rxmsgtype, i, rxlen)); } } + print_message (log, comm->etype, 0, rxmsgtype, seqnum, rxpayload, rxlen); } free (payload); } -- 2.30.2