xref: /plan9/sys/src/liboventi/debug.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
1*368c31abSDavid du Colombier #include <u.h>
2*368c31abSDavid du Colombier #include <libc.h>
3*368c31abSDavid du Colombier #include <oventi.h>
4*368c31abSDavid du Colombier #include "session.h"
5*368c31abSDavid du Colombier 
6*368c31abSDavid du Colombier void vtDumpSome(Packet*);
7*368c31abSDavid du Colombier 
8*368c31abSDavid du Colombier void
vtDebug(VtSession * s,char * fmt,...)9*368c31abSDavid du Colombier vtDebug(VtSession *s, char *fmt, ...)
10*368c31abSDavid du Colombier {
11*368c31abSDavid du Colombier 	va_list arg;
12*368c31abSDavid du Colombier 
13*368c31abSDavid du Colombier 	if(!s->debug)
14*368c31abSDavid du Colombier 		return;
15*368c31abSDavid du Colombier 
16*368c31abSDavid du Colombier 	va_start(arg, fmt);
17*368c31abSDavid du Colombier 	vfprint(2, fmt, arg);
18*368c31abSDavid du Colombier 	va_end(arg);
19*368c31abSDavid du Colombier }
20*368c31abSDavid du Colombier 
21*368c31abSDavid du Colombier void
vtDebugMesg(VtSession * z,Packet * p,char * s)22*368c31abSDavid du Colombier vtDebugMesg(VtSession *z, Packet *p, char *s)
23*368c31abSDavid du Colombier {
24*368c31abSDavid du Colombier 	int op;
25*368c31abSDavid du Colombier 	int tid;
26*368c31abSDavid du Colombier 	int n;
27*368c31abSDavid du Colombier 	uchar buf[100], *b;
28*368c31abSDavid du Colombier 
29*368c31abSDavid du Colombier 
30*368c31abSDavid du Colombier 	if(!z->debug)
31*368c31abSDavid du Colombier 		return;
32*368c31abSDavid du Colombier 	n = packetSize(p);
33*368c31abSDavid du Colombier 	if(n < 2) {
34*368c31abSDavid du Colombier 		fprint(2, "runt packet%s", s);
35*368c31abSDavid du Colombier 		return;
36*368c31abSDavid du Colombier 	}
37*368c31abSDavid du Colombier 	b = packetPeek(p, buf, 0, 2);
38*368c31abSDavid du Colombier 	op = b[0];
39*368c31abSDavid du Colombier 	tid = b[1];
40*368c31abSDavid du Colombier 
41*368c31abSDavid du Colombier 	fprint(2, "%c%d[%d] %d", ((op&1)==0)?'R':'Q', op, tid, n);
42*368c31abSDavid du Colombier 	vtDumpSome(p);
43*368c31abSDavid du Colombier 	fprint(2, "%s", s);
44*368c31abSDavid du Colombier }
45*368c31abSDavid du Colombier 
46*368c31abSDavid du Colombier void
vtDumpSome(Packet * pkt)47*368c31abSDavid du Colombier vtDumpSome(Packet *pkt)
48*368c31abSDavid du Colombier {
49*368c31abSDavid du Colombier 	int printable;
50*368c31abSDavid du Colombier 	int i, n;
51*368c31abSDavid du Colombier 	char buf[200], *q, *eq;
52*368c31abSDavid du Colombier 	uchar data[32], *p;
53*368c31abSDavid du Colombier 
54*368c31abSDavid du Colombier 	n = packetSize(pkt);
55*368c31abSDavid du Colombier 	printable = 1;
56*368c31abSDavid du Colombier 	q = buf;
57*368c31abSDavid du Colombier 	eq = buf + sizeof(buf);
58*368c31abSDavid du Colombier 	q = seprint(q, eq, "(%d) '", n);
59*368c31abSDavid du Colombier 
60*368c31abSDavid du Colombier 	if(n > sizeof(data))
61*368c31abSDavid du Colombier 		n = sizeof(data);
62*368c31abSDavid du Colombier 	p = packetPeek(pkt, data, 0, n);
63*368c31abSDavid du Colombier 	for(i=0; i<n && printable; i++)
64*368c31abSDavid du Colombier 		if((p[i]<32 && p[i] !='\n' && p[i] !='\t') || p[i]>127)
65*368c31abSDavid du Colombier 				printable = 0;
66*368c31abSDavid du Colombier 	if(printable) {
67*368c31abSDavid du Colombier 		for(i=0; i<n; i++)
68*368c31abSDavid du Colombier 			q = seprint(q, eq, "%c", p[i]);
69*368c31abSDavid du Colombier 	} else {
70*368c31abSDavid du Colombier 		for(i=0; i<n; i++) {
71*368c31abSDavid du Colombier 			if(i>0 && i%4==0)
72*368c31abSDavid du Colombier 				q = seprint(q, eq, " ");
73*368c31abSDavid du Colombier 			q = seprint(q, eq, "%.2X", p[i]);
74*368c31abSDavid du Colombier 		}
75*368c31abSDavid du Colombier 	}
76*368c31abSDavid du Colombier 	seprint(q, eq, "'");
77*368c31abSDavid du Colombier 	fprint(2, "%s", buf);
78*368c31abSDavid du Colombier }
79