FreeCalypso > hg > freecalypso-tools
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/l1filter/pktsort.c Tue Nov 09 23:14:22 2021 +0000 @@ -0,0 +1,96 @@ +/* + * Here we sort out incoming packets from the target relayed via rvinterf. + */ + +#include <sys/types.h> +#include <stdio.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> +#include "pktmux.h" +#include "limits.h" +#include "localsock.h" +#include "localtypes.h" +#include "exitcodes.h" + +extern u_char rvi_msg[]; +extern int rvi_msg_len; +extern char **filter_list; + +static +is_filter_match() +{ + char **fp; + int len; + + for (fp = filter_list; *fp; fp++) { + len = strlen(*fp); + if (rvi_msg_len < len + 3) + continue; + if (strncmp(rvi_msg + 2, *fp, len)) + continue; + if (rvi_msg[len+2] != ' ') + continue; + return 1; + } + return 0; +} + +static void +print_l1_trace() +{ + u_char *dp, *endp; + int c, newline; + + dp = rvi_msg + 2; + endp = rvi_msg + rvi_msg_len; + while (dp < endp) { + c = *dp++; + if (c == '\r') + continue; + if (c == '\n') { + putchar(c); + newline = 1; + continue; + } + newline = 0; + if (c & 0x80) { + putchar('M'); + putchar('-'); + c &= 0x7F; + } + if (c == 0x7F) { + putchar('^'); + putchar('?'); + continue; + } + if (c < 0x20) { + putchar('^'); + c += '@'; + } + putchar(c); + } + if (!newline) + putchar('\n'); +} + +static void +l1_packet_rx() +{ + if (is_filter_match()) + print_l1_trace(); +} + +void +process_pkt_from_target() +{ + switch (rvi_msg[1]) { + case RVT_L1_HEADER: + l1_packet_rx(); + return; + default: + fprintf(stderr, "unexpected fwd of MUX %02X from rvinterf\n", + rvi_msg[1]); + exit(ERROR_RVINTERF); + } +}