xref: /plan9/sys/src/cmd/aquarela/smbcomecho.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1 #include "headers.h"
2 
3 SmbProcessResult
smbcomecho(SmbSession * s,SmbHeader * h,uchar * pdata,SmbBuffer * b)4 smbcomecho(SmbSession *s, SmbHeader *h, uchar *pdata, SmbBuffer *b)
5 {
6 	ushort echocount, e;
7 	if (!smbcheckwordcount("comecho", h, 1))
8 		return SmbProcessResultFormat;
9 	echocount = smbnhgets(pdata);
10 	for (e = 0; e < echocount; e++) {
11 		ulong bytecountfixupoffset;
12 		SmbProcessResult pr;
13 		if (!smbbufferputheader(s->response, h, &s->peerinfo)
14 			|| !smbbufferputs(s->response, e))
15 			return SmbProcessResultMisc;
16 		bytecountfixupoffset = smbbufferwriteoffset(s->response);
17 		if (!smbbufferputbytes(s->response, smbbufferreadpointer(b), smbbufferreadspace(b))
18 			|| !smbbufferfixuprelatives(s->response, bytecountfixupoffset))
19 			return SmbProcessResultMisc;
20 		pr = smbresponsesend(s);
21 		if (pr != SmbProcessResultOk)
22 			return SmbProcessResultDie;
23 	}
24 	return SmbProcessResultOk;
25 }
26