avoid alien packets
authorMazet Laurent <laurent.mazet@thalesgroup.com>
Thu, 15 May 2025 11:47:29 +0000 (13:47 +0200)
committerMazet Laurent <laurent.mazet@thalesgroup.com>
Thu, 15 May 2025 11:47:29 +0000 (13:47 +0200)
morep.c

diff --git a/morep.c b/morep.c
index e0997aae06745d12b990b826ce97716bea581bce..fac082363725b68d53c3f5e303639fef8d9cf52a 100644 (file)
--- a/morep.c
+++ b/morep.c
@@ -421,18 +421,21 @@ int MOREP_Receive (int index, uint8_t *msgtype, uint8_t *buffer, int *len)
     int rxlen = 0;
     int flag = 0;
     do {
-        rxlen = recvfrom (morep->sock, morep->rx_buffer, ETHER_PREAMBLE + MAX_ETHER_SIZE, 0, NULL, 0);
-        VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); int i; for (i = 0; i < ETHER_PREAMBLE + MOREP_PREAMBLE; i++) printf ("%02x%c", morep->rx_buffer[i], (i == ETHER_PREAMBLE + MOREP_PREAMBLE - 1) ? '\n' : ':'));
-
-        /* avoid alien packets */
-        uint16_t rx_n_etype;
-        memcpy ((void *)&rx_n_etype, morep->rx_buffer + 12, 2);
-        if ((morep->n_etype != rx_n_etype) ||
-            (memcmp (morep->tx_buffer, morep->rx_buffer + 6, 6) != 0) ||
-            (memcmp (morep->tx_buffer + 6, morep->rx_buffer, 6) != 0)) {
-            VERBOSE (morep, DEBUG, PRINTF ("alien packet\n"));
-            continue;
-        }
+        do {
+            rxlen = recvfrom (morep->sock, morep->rx_buffer, ETHER_PREAMBLE + MAX_ETHER_SIZE, 0, NULL, 0);
+            VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); int i; for (i = 0; i < ETHER_PREAMBLE + MOREP_PREAMBLE; i++) printf ("%02x%c", morep->rx_buffer[i], (i == ETHER_PREAMBLE + MOREP_PREAMBLE - 1) ? '\n' : ':'));
+
+            /* avoid alien packets */
+            uint16_t rx_n_etype;
+            memcpy ((void *)&rx_n_etype, morep->rx_buffer + 12, 2);
+            if ((morep->n_etype != rx_n_etype) ||
+                (memcmp (morep->tx_buffer, morep->rx_buffer + 6, 6) != 0) ||
+                (memcmp (morep->tx_buffer + 6, morep->rx_buffer, 6) != 0)) {
+                VERBOSE (morep, DEBUG, PRINTF ("alien packet\n"));
+            } else {
+                break;
+            }
+        } while (1);
 
         /* sequence number */
         int pkgseqnum = morep->rx_buffer[ETHER_PREAMBLE + 1];