From 4c2b2a74c5e1dbb490768e7897ae62378a4572b0 Mon Sep 17 00:00:00 2001 From: Mazet Laurent Date: Thu, 27 Mar 2025 15:28:19 +0100 Subject: [PATCH] some fixes --- morep.c | 20 +++++++++++++------- morep_server.c | 10 +++++----- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/morep.c b/morep.c index b80c221..bf17726 100644 --- a/morep.c +++ b/morep.c @@ -60,7 +60,6 @@ typedef struct { uint8_t tx_buffer[MAX_ETHER_SIZE + 14]; uint8_t rx_buffer[MAX_ETHER_SIZE + 14]; MOREP_fragment_t fragment_list[MAX_FRAGMENTS]; - uint16_t rxlen; } MOREP_descriptor_t ; /** @@ -370,7 +369,7 @@ int MOREP_Receive (int index, uint8_t *msgtype, uint8_t *buffer, int *len) int rxlen = 0; int flag = 0; do { - int rxlen = recvfrom (morep->sock, morep->rx_buffer, sizeof (morep->rx_buffer), 0, NULL, 0); + rxlen = recvfrom (morep->sock, morep->rx_buffer, sizeof (morep->rx_buffer), 0, NULL, 0); VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); int i; for (i = 0; i < 18; i++) printf ("%02x:", morep->rx_buffer[i]); printf ("\n")); /* sequence number */ @@ -390,41 +389,48 @@ int MOREP_Receive (int index, uint8_t *msgtype, uint8_t *buffer, int *len) /* flag, fragment number and payload length */ uint16_t pkgflagfraglen = 0; memcpy ((void *) &pkgflagfraglen, morep->rx_buffer + 16, 2); - pkgflagfraglen = ntohs (pkgflagfraglen); + pkgflagfraglen = ntohs (pkgflagfraglen); flag = (pkgflagfraglen >> 15) & 0x0001; int pkgfrag = (pkgflagfraglen >> 11) & 0x000f; int pkglen = (pkgflagfraglen >> 0) & 0x07ff; + VERBOSE (morep, DEBUG, PRINTF ("flag/frag/length: %d/%d/%d\n", flag, pkgfrag, pkglen)); /* check padding */ if (pkglen < 64 - 18) { - VERBOSE (morep, DEBUG, PRINTF ("padding of %d bytes\n", 64 - 18 - morep->rxlen)); - VERBOSE (morep, DEBUG, int i; for (i = morep->rxlen + 18; i < 64; i++) if (morep->rx_buffer[i] != 0) { VERBOSE (morep, WARNING, PRINTF ("incorrect padding\n")); break; }); - } else if (pkglen != rxlen - 18) { + VERBOSE (morep, DEBUG, PRINTF ("padding of %d bytes\n", 64 - 18 - pkglen)); + VERBOSE (morep, DEBUG, int i; for (i = pkglen + 18; i < 64; i++) if (morep->rx_buffer[i] != 0) { VERBOSE (morep, WARNING, PRINTF ("incorrect padding (%d)\n", i)); break; }); + } + if (((rxlen == 64) && (pkglen > 64 - 18)) || ((rxlen > 64) && (pkglen != rxlen - 18))) { VERBOSE (morep, WARNING, PRINTF ("incorrect size (%d/%d)\n", pkglen, rxlen - 18)); + pkglen = rxlen - 18; } /* store fragment */ if (flag) { + VERBOSE (morep, DEBUG, PRINTF ("storing fragment %d (%d bytes)\n", pkgfrag, pkglen)); MOREP_fragment_t *frag = morep->fragment_list + pkgfrag; memcpy (frag->buffer, morep->rx_buffer + 18, pkglen); frag->len = pkglen; //frag->status = 1; } else { int i; + rxlen = 0; for (i = 0; (i < MAX_FRAGMENTS) && ((morep->fragment_list + i)->len != 0); i++) { MOREP_fragment_t *frag = morep->fragment_list + i; memcpy (buffer + rxlen, frag->buffer, frag->len); rxlen += frag->len; + VERBOSE (morep, DEBUG, PRINTF ("gluing fragment %d (%d/%d bytes)\n", i, frag->len, rxlen)); } memcpy (buffer + rxlen, morep->rx_buffer + 18, pkglen); rxlen += pkglen; + VERBOSE (morep, DEBUG, PRINTF ("last fragment (%d/%d bytes)\n", pkglen, rxlen)); } } while (flag); if (msgtype) { *msgtype = rxmsgtype; } - if (*len) { + if (len) { *len = rxlen; } diff --git a/morep_server.c b/morep_server.c index 2b093a3..6161815 100644 --- a/morep_server.c +++ b/morep_server.c @@ -69,17 +69,17 @@ int server (char *url) int rxmsglen = 0; uint8_t rxbuffer[1500] = {0}; int rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen); - VERBOSE (morep, INFO, PRINTF ("rx %d bytes (%d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum)); + VERBOSE (morep, INFO, PRINTF ("rx %d bytes (msgid %d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum)); VERBOSE (morep, DEBUG, PRINTF ("rx msg: '"); fwrite ((char *)rxbuffer, 1, rxmsglen, stdout); printf ("'\n")); uint8_t txmsgtype = 0x01; int txmsglen = strlen (words[i]); int txseqnum = MOREP_Send (morep, txmsgtype, (uint8_t *)words[i], txmsglen); - VERBOSE (morep, INFO, PRINTF ("tx %d bytes (%d) [%d]\n", txmsglen, txmsgtype, txseqnum)); + VERBOSE (morep, INFO, PRINTF ("tx %d bytes (msgid %d) [%d]\n", txmsglen, txmsgtype, txseqnum)); + VERBOSE (morep, DEBUG, PRINTF ("tx msg: '%s'\n", words[i])); if (words[++i] == NULL) { i = 0; } - VERBOSE (morep, DEBUG, PRINTF ("tx msg: '%s'\n", words[i])); } MOREP_Close (morep); @@ -128,14 +128,14 @@ int client (char *url, uint8_t txmsgtype, char *filename) } int txseqnum = MOREP_Send (morep, txmsgtype, txbuffer, txmsglen); - VERBOSE (morep, INFO, PRINTF ("tx %d bytes(%d) [%d]\n", txmsglen, txmsgtype, txseqnum)); + VERBOSE (morep, INFO, PRINTF ("tx %d bytes (msgid %d) [%d]\n", txmsglen, txmsgtype, txseqnum)); VERBOSE (morep, DEBUG, PRINTF ("tx msg: '%s'\n", txbuffer)); uint8_t rxmsgtype = 0; int rxmsglen = 0; uint8_t rxbuffer[1500] = {0}; int rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen); - VERBOSE (morep, INFO, PRINTF ("rx %d bytes (%d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum)); + VERBOSE (morep, INFO, PRINTF ("rx %d bytes (msgid %d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum)); VERBOSE (morep, DEBUG, PRINTF ("rx msg: '"); fwrite ((char *)rxbuffer, 1, rxmsglen, stdout); printf ("'\n")); } -- 2.30.2