log file management
authorLaurent Mazet <mazet@softndesign.org>
Sun, 30 Mar 2025 13:12:11 +0000 (15:12 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Sun, 30 Mar 2025 13:12:11 +0000 (15:12 +0200)
morep_valid.c

index 96154260329a5a75e2732d779d3f327e33ef9dd2..25ae870cd047fc634732be946867938e6d605814 100644 (file)
@@ -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);
     }