From 336769ae930963f858ef71023e090d03cf7cbc64 Mon Sep 17 00:00:00 2001 From: Mazet Laurent Date: Thu, 15 May 2025 13:47:29 +0200 Subject: [PATCH] avoid alien packets --- morep.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/morep.c b/morep.c index e0997aa..fac0823 100644 --- 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]; -- 2.30.2