FreeCalypso > hg > freecalypso-tools
comparison rvinterf/l1filter/pktsort.c @ 855:ea458ee48691
rvinterf/l1filter: new program written, compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 09 Nov 2021 23:14:22 +0000 |
parents | rvinterf/asyncshell/pktsort.c@bbc41034f14c |
children |
comparison
equal
deleted
inserted
replaced
854:74331b35b1da | 855:ea458ee48691 |
---|---|
1 /* | |
2 * Here we sort out incoming packets from the target relayed via rvinterf. | |
3 */ | |
4 | |
5 #include <sys/types.h> | |
6 #include <stdio.h> | |
7 #include <string.h> | |
8 #include <strings.h> | |
9 #include <stdlib.h> | |
10 #include "pktmux.h" | |
11 #include "limits.h" | |
12 #include "localsock.h" | |
13 #include "localtypes.h" | |
14 #include "exitcodes.h" | |
15 | |
16 extern u_char rvi_msg[]; | |
17 extern int rvi_msg_len; | |
18 extern char **filter_list; | |
19 | |
20 static | |
21 is_filter_match() | |
22 { | |
23 char **fp; | |
24 int len; | |
25 | |
26 for (fp = filter_list; *fp; fp++) { | |
27 len = strlen(*fp); | |
28 if (rvi_msg_len < len + 3) | |
29 continue; | |
30 if (strncmp(rvi_msg + 2, *fp, len)) | |
31 continue; | |
32 if (rvi_msg[len+2] != ' ') | |
33 continue; | |
34 return 1; | |
35 } | |
36 return 0; | |
37 } | |
38 | |
39 static void | |
40 print_l1_trace() | |
41 { | |
42 u_char *dp, *endp; | |
43 int c, newline; | |
44 | |
45 dp = rvi_msg + 2; | |
46 endp = rvi_msg + rvi_msg_len; | |
47 while (dp < endp) { | |
48 c = *dp++; | |
49 if (c == '\r') | |
50 continue; | |
51 if (c == '\n') { | |
52 putchar(c); | |
53 newline = 1; | |
54 continue; | |
55 } | |
56 newline = 0; | |
57 if (c & 0x80) { | |
58 putchar('M'); | |
59 putchar('-'); | |
60 c &= 0x7F; | |
61 } | |
62 if (c == 0x7F) { | |
63 putchar('^'); | |
64 putchar('?'); | |
65 continue; | |
66 } | |
67 if (c < 0x20) { | |
68 putchar('^'); | |
69 c += '@'; | |
70 } | |
71 putchar(c); | |
72 } | |
73 if (!newline) | |
74 putchar('\n'); | |
75 } | |
76 | |
77 static void | |
78 l1_packet_rx() | |
79 { | |
80 if (is_filter_match()) | |
81 print_l1_trace(); | |
82 } | |
83 | |
84 void | |
85 process_pkt_from_target() | |
86 { | |
87 switch (rvi_msg[1]) { | |
88 case RVT_L1_HEADER: | |
89 l1_packet_rx(); | |
90 return; | |
91 default: | |
92 fprintf(stderr, "unexpected fwd of MUX %02X from rvinterf\n", | |
93 rvi_msg[1]); | |
94 exit(ERROR_RVINTERF); | |
95 } | |
96 } |