int rxlen = 0;
int flag = 0;
do {
- do {
- rxlen = recvfrom (sock, morep->rx_buffer, ETHER_PREAMBLE + MAX_ETHER_SIZE, 0, NULL, 0);
- VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); for (int 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);
+ rxlen = recvfrom (sock, morep->rx_buffer, ETHER_PREAMBLE + MAX_ETHER_SIZE, 0, NULL, 0);
+ VERBOSE (morep, DEBUG, PRINTF ("rec. preamble: "); for (int 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"));
+ return -2;
+ }
/* sequence number */
int pkgseqnum = morep->rx_buffer[ETHER_PREAMBLE + 1];
uint8_t rxmsgtype = 0;
int rxmsglen = 0;
uint8_t rxbuffer[MOREP_PAYLOAD * 16] = {0};
- int rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen);
+ int rxseqnum;
+ do {
+ rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen);
+ } while (rxseqnum == -2);
VERBOSE (morep, INFO, PRINTF ("rx %d bytes (msgid %d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum));
VERBOSE (morep, TRACE, PRINTF ("rx msg: '"); fwrite ((char *)rxbuffer, 1, rxmsglen, stdout); printf ("'\n"));
uint8_t rxmsgtype = 0;
int rxmsglen = 0;
uint8_t rxbuffer[MOREP_PAYLOAD] = {0};
- int rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen);
+ int rxseqnum;
+ do {
+ rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen);
+ } while (rxseqnum == -2);
VERBOSE (morep, INFO, PRINTF ("rx %d bytes (msgid %d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum));
VERBOSE (morep, TRACE, PRINTF ("rx msg: '"); fwrite ((char *)rxbuffer, 1, rxmsglen, stdout); printf ("'\n"));
}
uint8_t rxmsgtype = 0;
int rxmsglen = 0;
uint8_t rxbuffer[MOREP_PAYLOAD * 16] = {0};
- int rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen);
+ int rxseqnum;
+ do {
+ rxseqnum = MOREP_Receive (morep, &rxmsgtype, rxbuffer, &rxmsglen);
+ } while (rxseqnum == -2);
VERBOSE (morep, INFO, PRINTF ("rx %d bytes (msgid %d) [%d]\n", rxmsglen, rxmsgtype, rxseqnum));
VERBOSE (morep, TRACE, PRINTF ("rx msg: '"); fwrite ((char *)rxbuffer, 1, rxmsglen, stdout); printf ("'\n"));
}
uint8_t rxdata[MOREP_PAYLOAD] = {0};
RAW_DATA_t rxpayload = {0};
int rxlen = -1;
- int seqnum = MOREP_Receive (comm->morep, &rxmsgtype, rxdata, &rxlen);
-
+ int seqnum;
+ do {
+ seqnum = MOREP_Receive (comm->morep, &rxmsgtype, rxdata, &rxlen);
+ } while (seqnum == -2);
/* check msg type */
if (rxmsgtype != msgtype) {
VERBOSE (morep, WARNING, PRINTF ("R%s SEQ=%d MSG=%d: expected msgtype %d\n", comm->etype, seqnum, rxmsgtype, msgtype));