Lines Matching refs:rqp

55 static int  smb_rq_reply(struct smb_rq *rqp);
56 static int smb_rq_enqueue(struct smb_rq *rqp);
59 static int smb_rq_new(struct smb_rq *rqp, u_char cmd);
66 struct smb_rq *rqp;
69 rqp = malloc(sizeof(*rqp), M_SMBRQ, M_WAITOK);
70 if (rqp == NULL)
72 error = smb_rq_init(rqp, layer, cmd, scred);
73 rqp->sr_flags |= SMBR_ALLOCED;
75 smb_rq_done(rqp);
78 *rqpp = rqp;
85 smb_rq_init(struct smb_rq *rqp, struct smb_connobj *layer, u_char cmd,
90 bzero(rqp, sizeof(*rqp));
91 smb_sl_init(&rqp->sr_slock, "srslock");
92 error = smb_rq_getenv(layer, &rqp->sr_vc, &rqp->sr_share);
95 error = smb_vc_access(rqp->sr_vc, scred, SMBM_EXEC);
98 if (rqp->sr_share) {
99 error = smb_share_access(rqp->sr_share, scred, SMBM_EXEC);
103 rqp->sr_cred = scred;
104 rqp->sr_mid = smb_vc_nextmid(rqp->sr_vc);
105 return smb_rq_new(rqp, cmd);
109 smb_rq_new(struct smb_rq *rqp, u_char cmd)
111 struct smb_vc *vcp = rqp->sr_vc;
112 struct mbchain *mbp = &rqp->sr_rq;
116 rqp->sr_sendcnt = 0;
118 md_done(&rqp->sr_rp);
134 rqp->sr_rqsig = NULL;
137 rqp->sr_rqsig = (u_int8_t *)mb_reserve(mbp, 8);
140 rqp->sr_rqtid = mb_reserve(mbp, sizeof(u_int16_t));
142 rqp->sr_rquid = mb_reserve(mbp, sizeof(u_int16_t));
143 mb_put_uint16le(mbp, rqp->sr_mid);
148 smb_rq_done(struct smb_rq *rqp)
150 mb_done(&rqp->sr_rq);
151 md_done(&rqp->sr_rp);
152 smb_sl_destroy(&rqp->sr_slock);
153 if (rqp->sr_flags & SMBR_ALLOCED)
154 free(rqp, M_SMBRQ);
161 smb_rq_simple(struct smb_rq *rqp)
163 struct smb_vc *vcp = rqp->sr_vc;
167 rqp->sr_flags &= ~SMBR_RESTART;
168 rqp->sr_timo = vcp->vc_timo;
169 rqp->sr_state = SMBRQ_NOTSENT;
170 error = smb_rq_enqueue(rqp);
173 error = smb_rq_reply(rqp);
176 if ((rqp->sr_flags & (SMBR_RESTART | SMBR_NORESTART)) != SMBR_RESTART)
183 smb_rq_enqueue(struct smb_rq *rqp)
185 struct smb_share *ssp = rqp->sr_share;
188 if (ssp == NULL || rqp->sr_cred == &rqp->sr_vc->vc_iod->iod_scred) {
189 return smb_iod_addrq(rqp);
196 if (smb_td_intr(rqp->sr_cred->scr_td))
204 error = smb_iod_request(rqp->sr_vc->vc_iod,
209 error = smb_iod_addrq(rqp);
217 smb_rq_wstart(struct smb_rq *rqp)
219 rqp->sr_wcount = mb_reserve(&rqp->sr_rq, sizeof(u_int8_t));
220 rqp->sr_rq.mb_count = 0;
224 smb_rq_wend(struct smb_rq *rqp)
226 if (rqp->sr_wcount == NULL) {
230 if (rqp->sr_rq.mb_count & 1)
232 *rqp->sr_wcount = rqp->sr_rq.mb_count / 2;
236 smb_rq_bstart(struct smb_rq *rqp)
238 rqp->sr_bcount = mb_reserve(&rqp->sr_rq, sizeof(u_short));
239 rqp->sr_rq.mb_count = 0;
243 smb_rq_bend(struct smb_rq *rqp)
247 if (rqp->sr_bcount == NULL) {
251 bcnt = rqp->sr_rq.mb_count;
254 le16enc(rqp->sr_bcount, bcnt);
258 smb_rq_intr(struct smb_rq *rqp)
260 if (rqp->sr_flags & SMBR_INTR)
262 return smb_td_intr(rqp->sr_cred->scr_td);
266 smb_rq_getrequest(struct smb_rq *rqp, struct mbchain **mbpp)
268 *mbpp = &rqp->sr_rq;
273 smb_rq_getreply(struct smb_rq *rqp, struct mdchain **mbpp)
275 *mbpp = &rqp->sr_rp;
324 smb_rq_reply(struct smb_rq *rqp)
326 struct mdchain *mdp = &rqp->sr_rp;
331 error = smb_iod_waitrq(rqp);
338 if (rqp->sr_vc->vc_hflags2 & SMB_FLAGS2_ERR_STATUS) {
339 error = md_get_uint32le(mdp, &rqp->sr_error);
341 error = md_get_uint8(mdp, &rqp->sr_errclass);
343 error = md_get_uint16le(mdp, &rqp->sr_serror);
345 rperror = smb_maperror(rqp->sr_errclass, rqp->sr_serror);
347 error = md_get_uint8(mdp, &rqp->sr_rpflags);
348 error = md_get_uint16le(mdp, &rqp->sr_rpflags2);
354 error = md_get_uint16le(mdp, &rqp->sr_rptid);
355 error = md_get_uint16le(mdp, &rqp->sr_rppid);
356 error = md_get_uint16le(mdp, &rqp->sr_rpuid);
357 error = md_get_uint16le(mdp, &rqp->sr_rpmid);
360 (rqp->sr_vc->vc_hflags2 & SMB_FLAGS2_SECURITY_SIGNATURE))
361 error = smb_rq_verify(rqp);
364 rqp->sr_rpmid, rqp->sr_rppid, rqp->sr_rpuid, rqp->sr_rptid,
365 rqp->sr_errclass, rqp->sr_serror);
446 struct smb_rq *rqp = t2p->t2_rq;
452 error = smb_rq_reply(rqp);
459 SMBRQ_SLOCK(rqp);
460 md_next_record(&rqp->sr_rp);
461 SMBRQ_SUNLOCK(rqp);
471 mdp = &rqp->sr_rp;
537 SMBRQ_SLOCK(rqp);
538 md_next_record(&rqp->sr_rp);
539 SMBRQ_SUNLOCK(rqp);
540 error = smb_rq_reply(rqp);
558 struct smb_rq *rqp;
582 SMB_COM_TRANSACTION : SMB_COM_TRANSACTION2, scred, &rqp);
585 rqp->sr_flags |= SMBR_MULTIPACKET;
586 t2p->t2_rq = rqp;
587 rqp->sr_t2 = t2p;
588 mbp = &rqp->sr_rq;
589 smb_rq_wstart(rqp);
629 smb_rq_wend(rqp);
630 smb_rq_bstart(rqp);
652 smb_rq_bend(rqp); /* incredible, but thats it... */
653 error = smb_rq_enqueue(rqp);
663 error = smb_rq_new(rqp, t2p->t_name ?
667 mbp = &rqp->sr_rq;
668 smb_rq_wstart(rqp);
702 smb_rq_wend(rqp);
703 smb_rq_bstart(rqp);
721 smb_rq_bend(rqp);
722 rqp->sr_state = SMBRQ_NOTSENT;
739 smb_iod_removerq(rqp);
742 if (rqp->sr_flags & SMBR_RESTART)
747 smb_rq_done(rqp);