uint8_t *inbuf;
uint32_t seqnum;
int chain_num;
+ int chain_length;
struct tevent_req **chained_requests;
};
}
state->iov_count = iov_count + 3;
- endtime = timeval_current_ofs(0, cli->timeout * 1000);
- if (!tevent_req_set_endtime(result, ev, endtime)) {
- tevent_req_nomem(NULL, result);
+ if (cli->timeout) {
+ endtime = timeval_current_ofs(0, cli->timeout * 1000);
+ if (!tevent_req_set_endtime(result, ev, endtime)) {
+ tevent_req_nomem(NULL, result);
+ }
}
return result;
}
state->inbuf = talloc_move(state, &inbuf);
talloc_set_destructor(req, NULL);
cli_smb_req_destructor(req);
+ state->chain_num = 0;
+ state->chain_length = 1;
tevent_req_done(req);
} else {
struct tevent_req **chain = talloc_move(
cli_smb_state);
state->inbuf = inbuf;
state->chain_num = i;
+ state->chain_length = num_chained;
tevent_req_done(chain[i]);
}
TALLOC_FREE(inbuf);
*pbytes = (uint8_t *)state->inbuf + bytes_offset + 2;
}
if ((mem_ctx != NULL) && (pinbuf != NULL)) {
- *pinbuf = talloc_move(mem_ctx, &state->inbuf);
+ if (state->chain_num == state->chain_length-1) {
+ *pinbuf = talloc_move(mem_ctx, &state->inbuf);
+ } else {
+ *pinbuf = state->inbuf;
+ }
}
return status;
uint16_t *vwv;
uint32_t num_bytes;
uint8_t *bytes;
+ uint8_t *inbuf;
NTSTATUS status;
- status = cli_smb_recv(subreq, NULL, NULL, 8, &wct, &vwv,
+ status = cli_smb_recv(subreq, state, &inbuf, 8, &wct, &vwv,
&num_bytes, &bytes);
+ TALLOC_FREE(subreq);
if (!NT_STATUS_IS_OK(status)) {
- TALLOC_FREE(subreq);
tevent_req_nterror(req, status);
return;
}