diff rvinterf/packetrx.c @ 133:56b53c289785

rvtdump: some restructuring
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 02 Nov 2013 22:24:14 +0000
parents 811b138f1bed
children
line wrap: on
line diff
--- a/rvinterf/packetrx.c	Sat Nov 02 01:48:11 2013 +0000
+++ b/rvinterf/packetrx.c	Sat Nov 02 22:24:14 2013 +0000
@@ -14,6 +14,8 @@
 u_char rxpkt[MAXPKT];
 size_t rxpkt_len;
 
+extern char pr_item[];
+
 static int in_pkt, dle_state, toobig;
 
 static void
@@ -21,19 +23,29 @@
 {
 	if (!in_pkt) {
 		if (inb != STX || dle_state) {
+			rxpkt_len++;
 			dle_state = (inb == DLE);
 			return;
 		}
+		if (rxpkt_len) {
+			sprintf(pr_item,
+				"Warning: Rx %u byte%s outside of a packet",
+				(unsigned)rxpkt_len, rxpkt_len != 1 ? "s" : "");
+			print_item();
+			rxpkt_len = 0;
+		}
 		in_pkt = 1;
-		rxpkt_len = 0;
 		toobig = 0;
 		return;
 	}
 	if (dle_state) {
 		dle_state = 0;
 		if (inb != STX && inb != DLE) {
-			printf("Rx framing error: %02X after DLE\n", inb);
+			sprintf(pr_item,
+				"Rx framing error: %02X after DLE\n", inb);
+			print_item();
 			in_pkt = 0;
+			rxpkt_len = 0;
 			return;
 		}
 		goto data;
@@ -46,11 +58,13 @@
 			return;
 		in_pkt = 0;
 		handle_rx_packet();
+		rxpkt_len = 0;
 		return;
 	}
 data:	if (rxpkt_len >= MAXPKT) {
 		if (!toobig) {
-			printf("Rx packet too big!\n");
+			sprintf(pr_item, "Error: Rx packet too big!\n");
+			print_item();
 			toobig = 1;
 		}
 		return;