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