fix tx/rx buffers
authorMazet Laurent <laurent.mazet@thalesgroup.com>
Tue, 25 Mar 2025 02:55:02 +0000 (03:55 +0100)
committerMazet Laurent <laurent.mazet@thalesgroup.com>
Tue, 25 Mar 2025 02:55:02 +0000 (03:55 +0100)
morep.c
morep_server.c

diff --git a/morep.c b/morep.c
index 059d240238d7f0e531484c3d99a407d182556d86..fd1f6c90d23c13d6e0dd3e0d80b3cbc611b37916 100644 (file)
--- a/morep.c
+++ b/morep.c
@@ -327,6 +327,7 @@ int MOREP_Send (int index, uint8_t msgtype, int len)
     int seqnum = morep->tx_buffer[15] = morep->seqnum++;
     uint16_t msglen = htons (len);
     memcpy (morep->tx_buffer + 16, (void *) &msglen, 2);
+    VERBOSE (morep, DEBUG, PRINTF ("sent preamble: "); int i; for (i = 0; i < 18; i++) printf ("%02x:", morep->tx_buffer[i]); printf ("\n"));
 
     int rc = sendto (morep->sock, morep->tx_buffer, len + 18, 0, NULL, 0);
 
@@ -346,7 +347,7 @@ uint8_t *MOREP_Get_Rx_Buffer (int index, int *size)
         *size = MOREP_list[index]->rxlen;
     }
 
-    return MOREP_list[index]->tx_buffer + 18;
+    return MOREP_list[index]->rx_buffer + 18;
 }
 
 int MOREP_Receive (int index, uint8_t *msgtype)
@@ -365,10 +366,11 @@ int MOREP_Receive (int index, uint8_t *msgtype)
     if (len < 18) {
         return -1;
     }
+    VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); int i; for (i = 0; i < 18; i++) printf ("%02x:", morep->rx_buffer[i]); printf ("\n"));
     *msgtype = morep->rx_buffer[14];
     uint8_t seqnum= morep->rx_buffer[15];
     uint16_t msglen = 0;
-    memcpy ((void *) &msglen, morep->tx_buffer + 16, 2);
+    memcpy ((void *) &msglen, morep->rx_buffer + 16, 2);
     morep->rxlen = htons (msglen);
     if (morep->rxlen != len - 18) {
         VERBOSE (morep, WARNING, PRINTF ("incorrect size (%d/%d)\n", morep->rxlen, len - 18));
index ae2081fede829680a8b42544fa3cc3fed346b585..6c28409bb358dc88a3ab6ac858e3df4089600290 100644 (file)
@@ -68,8 +68,9 @@ int server (char *url)
         uint8_t rxmsgtype = 0;
         int rxmsglen = 0;
         int rxseqnum = MOREP_Receive (morep, &rxmsgtype);
-        MOREP_Get_Rx_Buffer (morep, &rxmsglen);
+        uint8_t *rxbuffer = MOREP_Get_Rx_Buffer (morep, &rxmsglen);
         VERBOSE (morep, INFO, PRINTF ("receive %d bytes (%d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum));
+        VERBOSE (morep, INFO, PRINTF ("message: '%s'\n", (char *)rxbuffer));
 
         uint8_t *buffer = MOREP_Get_Tx_Buffer (morep, NULL);
         int txmsglen = strlen (words[i]);
@@ -115,7 +116,18 @@ int client (char *url, uint8_t txmsgtype, char *filename)
     while (!feof (fid)) {
         int txmsglen = 0;
         uint8_t *txbuffer = MOREP_Get_Tx_Buffer (morep, &txmsglen);
-        txmsglen = fread (txbuffer, 1, txmsglen, fid);
+        memset (txbuffer, 0, txmsglen);
+        int i = 0;
+        do {
+            fread (txbuffer + i, 1, 1, fid);
+            if ((txbuffer[i] == '\n') || (txbuffer[i] == '\r')) {
+                txbuffer[i] = 0;
+            }
+        } while ((txbuffer[i] != 0) && (++i < txmsglen));
+        if (i == 0) {
+            continue;
+        }
+        txmsglen = i;
         if ((txmsglen == 0) && (errno != 0)) {
             VERBOSE (morep, ERROR, PRINTF ("can't read data from file '%s'\n", filename));
             return -1;
@@ -127,8 +139,9 @@ int client (char *url, uint8_t txmsgtype, char *filename)
         uint8_t rxmsgtype = 0;
         int rxmsglen = 0;
         int rxseqnum = MOREP_Receive (morep, &rxmsgtype);
-        MOREP_Get_Rx_Buffer (morep, &rxmsglen);
+        uint8_t *rxbuffer = MOREP_Get_Rx_Buffer (morep, &rxmsglen);
         VERBOSE (morep, INFO, PRINTF ("receive %d bytes (%d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum));
+        VERBOSE (morep, INFO, PRINTF ("message: '%s'\n", (char *)rxbuffer));
     }
 
     if (fid != stdin) {