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