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 }