smbcomecho.c 819 B

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