From 0b28127871398de596bbca298534d783f6ef3ac8 Mon Sep 17 00:00:00 2001 From: Mazet Laurent Date: Tue, 25 Mar 2025 03:55:02 +0100 Subject: [PATCH] fix tx/rx buffers --- morep.c | 6 ++++-- morep_server.c | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/morep.c b/morep.c index 059d240..fd1f6c9 100644 --- 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)); diff --git a/morep_server.c b/morep_server.c index ae2081f..6c28409 100644 --- a/morep_server.c +++ b/morep_server.c @@ -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) { -- 2.30.2