123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #include "headers.h"
- void
- smbresponsereset(SmbSession *s)
- {
- smbbufferreset(s->response);
- }
- void
- smbresponseinit(SmbSession *s, ushort maxlen)
- {
- smbbufferfree(&s->response);
- s->response = smbbuffernew(maxlen);
- }
- int
- smbresponsealignl2(SmbSession *s, int l2a)
- {
- return smbbufferalignl2(s->response, l2a);
- }
- int
- smbresponseputheader(SmbSession *s, SmbHeader *h, uchar errclass, ushort error)
- {
- h->errclass = errclass;
- h->error = error;
- return smbbufferputheader(s->response, h, &s->peerinfo);
- }
- int
- smbresponseputb(SmbSession *s, uchar b)
- {
- return smbbufferputb(s->response, b);
- }
- ushort
- smbresponsespace(SmbSession *sess)
- {
- return smbbufferwritespace(sess->response);
- }
- int
- smbresponseskip(SmbSession *sess, ushort amount)
- {
- return smbbufferputbytes(sess->response, nil, amount);
- }
- int
- smbresponseoffsetputs(SmbSession *sess, ushort offset, ushort s)
- {
- return smbbufferoffsetputs(sess->response, offset, s);
- }
- int
- smbresponseputs(SmbSession *sess, ushort s)
- {
- return smbbufferputs(sess->response, s);
- }
- int
- smbresponseputl(SmbSession *s, ulong l)
- {
- return smbbufferputl(s->response, l);
- }
- int
- smbresponsecpy(SmbSession *s, uchar *data, ushort datalen)
- {
- return smbbufferputbytes(s->response, data, datalen);
- }
- int
- smbresponseputstring(SmbSession *s, int mustalign, char *string)
- {
- return smbbufferputstring(s->response, &s->peerinfo, mustalign ? 0 : SMB_STRING_UNALIGNED, string);
- }
- int
- smbresponseputstr(SmbSession *s, char *string)
- {
- return smbbufferputstring(s->response, nil, SMB_STRING_ASCII, string);
- }
- ushort
- smbresponseoffset(SmbSession *s)
- {
- return smbbufferwriteoffset(s->response);
- }
- SmbProcessResult
- smbresponsesend(SmbSession *s)
- {
- uchar cmd;
- SmbProcessResult pr;
- assert(smbbufferoffsetgetb(s->response, 4, &cmd));
- smbloglock();
- smblogprint(cmd, "sending:\n");
- smblogdata(cmd, smblogprint, smbbufferreadpointer(s->response), smbbufferreadspace(s->response), 256);
- smblogunlock();
- if (s->nbss) {
- NbScatterGather a[2];
- a[0].p = smbbufferreadpointer(s->response);
- a[0].l = smbbufferreadspace(s->response);
- a[1].p = nil;
- nbssgatherwrite(s->nbss, a);
- pr = SmbProcessResultOk;
- }
- else if (s->cifss) {
- ulong l = smbbufferreadspace(s->response);
- uchar nl[4];
- hnputl(nl, l);
- write(s->cifss->fd, nl, 4);
- write(s->cifss->fd, smbbufferreadpointer(s->response), l);
- pr = SmbProcessResultOk;
- }
- else
- pr = SmbProcessResultDie;
- smbbufferreset(s->response);
- return pr;
- }
- int
- smbresponseputandxheader(SmbSession *s, SmbHeader *h, ushort andxcommand, ulong *andxoffsetfixupp)
- {
- return smbbufferputandxheader(s->response, h, &s->peerinfo, andxcommand, andxoffsetfixupp);
- }
- int
- smbresponseputerror(SmbSession *s, SmbHeader *h, uchar errclass, ushort error)
- {
- h->wordcount = 0;
- return smbresponseputheader(s, h, errclass, error)
- && smbresponseputs(s, 0);
- }
|