5 #pragma varargck type "D" Dir* /* from fcall.h */
7 static void dumpsome(char*, char*, long);
13 int fid, type, tag, n;
17 f = va_arg(f1->args, Fcall9p1*);
22 case Tnop9p1: /* 50 */
23 sprint(buf, "old Tnop tag %ud", tag);
26 sprint(buf, "old Rnop tag %ud", tag);
28 case Tsession9p1: /* 52 */
29 sprint(buf, "old Tsession tag %ud", tag);
32 sprint(buf, "old Rsession tag %ud", tag);
34 case Rerror9p1: /* 55 */
35 sprint(buf, "old Rerror tag %ud error %.64s", tag, f->ename);
37 case Tflush9p1: /* 56 */
38 sprint(buf, "old Tflush tag %ud oldtag %d", tag, f->oldtag);
41 sprint(buf, "old Rflush tag %ud", tag);
43 case Tattach9p1: /* 58 */
44 sprint(buf, "old Tattach tag %ud fid %d uname %.28s aname %.28s auth %.28s",
45 tag, f->fid, f->uname, f->aname, f->auth);
48 sprint(buf, "old Rattach tag %ud fid %d qid 0x%lux|0x%lux",
49 tag, fid, f->qid.path, f->qid.version);
51 case Tclone9p1: /* 60 */
52 sprint(buf, "old Tclone tag %ud fid %d newfid %d", tag, fid, f->newfid);
55 sprint(buf, "old Rclone tag %ud fid %d", tag, fid);
57 case Twalk9p1: /* 62 */
58 sprint(buf, "old Twalk tag %ud fid %d name %.28s", tag, fid, f->name);
61 sprint(buf, "old Rwalk tag %ud fid %d qid 0x%lux|0x%lux",
62 tag, fid, f->qid.path, f->qid.version);
64 case Topen9p1: /* 64 */
65 sprint(buf, "old Topen tag %ud fid %d mode %d", tag, fid, f->mode);
68 sprint(buf, "old Ropen tag %ud fid %d qid 0x%lux|0x%lux",
69 tag, fid, f->qid.path, f->qid.version);
71 case Tcreate9p1: /* 66 */
72 sprint(buf, "old Tcreate tag %ud fid %d name %.28s perm 0x%lux mode %d",
73 tag, fid, f->name, f->perm, f->mode);
76 sprint(buf, "old Rcreate tag %ud fid %d qid 0x%lux|0x%lux",
77 tag, fid, f->qid.path, f->qid.version);
79 case Tread9p1: /* 68 */
80 sprint(buf, "old Tread tag %ud fid %d offset %ld count %ld",
81 tag, fid, f->offset, f->count);
84 n = sprint(buf, "old Rread tag %ud fid %d count %ld ", tag, fid, f->count);
85 dumpsome(buf+n, f->data, f->count);
87 case Twrite9p1: /* 70 */
88 n = sprint(buf, "old Twrite tag %ud fid %d offset %ld count %ld ",
89 tag, fid, f->offset, f->count);
90 dumpsome(buf+n, f->data, f->count);
93 sprint(buf, "old Rwrite tag %ud fid %d count %ld", tag, fid, f->count);
95 case Tclunk9p1: /* 72 */
96 sprint(buf, "old Tclunk tag %ud fid %d", tag, fid);
99 sprint(buf, "old Rclunk tag %ud fid %d", tag, fid);
101 case Tremove9p1: /* 74 */
102 sprint(buf, "old Tremove tag %ud fid %d", tag, fid);
105 sprint(buf, "old Rremove tag %ud fid %d", tag, fid);
107 case Tstat9p1: /* 76 */
108 sprint(buf, "old Tstat tag %ud fid %d", tag, fid);
111 convM2D9p1(f->stat, &d);
112 sprint(buf, "old Rstat tag %ud fid %d stat %D", tag, fid, &d);
114 case Twstat9p1: /* 78 */
115 convM2D9p1(f->stat, &d);
116 sprint(buf, "old Twstat tag %ud fid %d stat %D", tag, fid, &d);
119 sprint(buf, "old Rwstat tag %ud fid %d", tag, fid);
121 case Tclwalk9p1: /* 81 */
122 sprint(buf, "old Tclwalk tag %ud fid %d newfid %d name %.28s",
123 tag, fid, f->newfid, f->name);
126 sprint(buf, "old Rclwalk tag %ud fid %d qid 0x%lux|0x%lux",
127 tag, fid, f->qid.path, f->qid.version);
130 sprint(buf, "unknown type %d", type);
132 return fmtstrcpy(f1, buf);
136 * dump out count (or DUMPL, if count is bigger) bytes from
137 * buf to ans, as a string if they are all printable,
138 * else as a series of hex bytes
143 dumpsome(char *ans, char *buf, long count)
151 for(i=0; i<count && printable; i++)
152 if((buf[i]<32 && buf[i] !='\n' && buf[i] !='\t') || (uchar)buf[i]>127)
157 memmove(p, buf, count);
160 for(i=0; i<count; i++){
163 sprint(p, "%2.2ux", buf[i]);
171 #define CHAR(x) *p++ = f->x
172 #define SHORT(x) { ulong vvv = f->x; p[0] = vvv; p[1] = vvv>>8; p += 2; }
173 #define VLONG(q) p[0] = (q); p[1] = (q)>>8; p[2] = (q)>>16; p[3] = (q)>>24; p += 4
174 #define LONG(x) { ulong vvv = f->x; VLONG(vvv); }
175 #define BYTES(x,n) memmove(p, f->x, n); p += n
176 #define STRING(x,n) strncpy((char*)p, f->x, n); p += n
179 convS2M9p1(Fcall9p1 *f, char *ap)
191 fprint(2, "convS2M9p1: bad type: %d\n", t);
199 BYTES(chal, sizeof(f->chal));
208 STRING(uname, sizeof(f->uname));
209 STRING(aname, sizeof(f->aname));
210 BYTES(ticket, sizeof(f->ticket));
211 BYTES(auth, sizeof(f->auth));
216 STRING(uname, sizeof(f->uname));
217 STRING(aname, sizeof(f->aname));
218 BYTES(ticket, NAMEREC);
228 STRING(name, sizeof(f->name));
234 STRING(name, sizeof(f->name));
244 STRING(name, sizeof(f->name));
251 LONG(offset); VLONG(0);
257 LONG(offset); VLONG(0);
260 if((uchar*)p == (uchar*)f->data) {
264 BYTES(data, f->count);
275 BYTES(stat, sizeof(f->stat));
285 BYTES(chal, sizeof(f->chal));
286 BYTES(authid, sizeof(f->authid));
287 BYTES(authdom, sizeof(f->authdom));
291 STRING(ename, sizeof(f->ename));
314 BYTES(rauth, sizeof(f->rauth));
327 if((uchar*)p == (uchar*)f->data) {
331 BYTES(data, f->count);
341 BYTES(stat, sizeof(f->stat));
344 return p - (uchar*)ap;
348 convD2M9p1(Dir *f, char *ap)
354 STRING(name, NAMEREC);
355 STRING(uid, NAMEREC);
356 STRING(gid, NAMEREC);
358 q = f->qid.path & ~0x80000000;
359 if(f->qid.type & QTDIR)
366 LONG(length); VLONG(0);
368 return p - (uchar*)ap;
372 convA2M9p1(Authenticator *f, char *ap, char *key)
379 STRING(chal, CHALLEN);
394 #define CHAR(x) f->x = *p++
395 #define SHORT(x) f->x = (p[0] | (p[1]<<8)); p += 2
396 #define VLONG(q) q = (p[0] | (p[1]<<8) | (p[2]<<16) | (p[3]<<24)); p += 4
397 #define LONG(x) VLONG(f->x)
398 #define BYTES(x,n) memmove(f->x, p, n); p += n
399 #define STRING(x,n) memmove(f->x, p, n); p += n
402 convM2S9p1(char *ap, Fcall9p1 *f, int n)
414 fprint(2, "convM2S9p1: bad type: %d\n", f->type);
422 BYTES(chal, sizeof(f->chal));
431 BYTES(uname, sizeof(f->uname));
432 BYTES(aname, sizeof(f->aname));
433 BYTES(ticket, sizeof(f->ticket));
434 BYTES(auth, sizeof(f->auth));
439 BYTES(uname, sizeof(f->uname));
440 BYTES(aname, sizeof(f->aname));
441 BYTES(ticket, NAMEREC);
451 BYTES(name, sizeof(f->name));
457 BYTES(name, sizeof(f->name));
471 BYTES(name, sizeof(f->name));
478 LONG(offset); p += 4;
484 LONG(offset); p += 4;
487 f->data = (char*)p; p += f->count;
497 BYTES(stat, sizeof(f->stat));
507 BYTES(chal, sizeof(f->chal));
508 BYTES(authid, sizeof(f->authid));
509 BYTES(authdom, sizeof(f->authdom));
513 BYTES(ename, sizeof(f->ename));
539 BYTES(rauth, sizeof(f->rauth));
552 f->data = (char*)p; p += f->count;
562 BYTES(stat, sizeof(f->stat));
565 if((uchar*)ap+n == p)
571 convM2D9p1(char *ap, Dir *f)
585 f->qid.path &= ~0x80000000;
589 f->qid.type = f->mode >> 24;
592 LONG(length); p += 4;
594 return p - (uchar*)ap;
598 convM2A9p1(char *ap, Authenticator *f, char *key)
603 decrypt(key, ap, AUTHENTLEN);
606 STRING(chal, CHALLEN);
612 convM2T9p1(char *ap, Ticket *f, char *key)
617 decrypt(key, ap, TICKETLEN);
620 STRING(chal, CHALLEN);
621 STRING(cuid, NAMEREC);
622 f->cuid[NAMEREC-1] = 0;
623 STRING(suid, NAMEREC);
624 f->suid[NAMEREC-1] = 0;
625 STRING(key, DESKEYLEN);