Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : SMB client oplock functions 4 : Copyright (C) Andrew Tridgell 2001 5 : 6 : This program is free software; you can redistribute it and/or modify 7 : it under the terms of the GNU General Public License as published by 8 : the Free Software Foundation; either version 3 of the License, or 9 : (at your option) any later version. 10 : 11 : This program is distributed in the hope that it will be useful, 12 : but WITHOUT ANY WARRANTY; without even the implied warranty of 13 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 : GNU General Public License for more details. 15 : 16 : You should have received a copy of the GNU General Public License 17 : along with this program. If not, see <http://www.gnu.org/licenses/>. 18 : */ 19 : 20 : #include "includes.h" 21 : #include "libcli/raw/libcliraw.h" 22 : #include "libcli/raw/raw_proto.h" 23 : 24 : /**************************************************************************** 25 : send an ack for an oplock break request 26 : ****************************************************************************/ 27 135 : _PUBLIC_ bool smbcli_oplock_ack(struct smbcli_tree *tree, uint16_t fnum, uint16_t ack_level) 28 : { 29 0 : bool ret; 30 0 : struct smbcli_request *req; 31 : 32 135 : req = smbcli_request_setup(tree, SMBlockingX, 8, 0); 33 135 : if (req == NULL) { 34 0 : return false; 35 : } 36 : 37 135 : SSVAL(req->out.vwv,VWV(0),0xFF); 38 135 : SSVAL(req->out.vwv,VWV(1),0); 39 135 : SSVAL(req->out.vwv,VWV(2),fnum); 40 135 : SCVAL(req->out.vwv,VWV(3),LOCKING_ANDX_OPLOCK_RELEASE); 41 135 : SCVAL(req->out.vwv,VWV(3)+1,ack_level); 42 135 : SIVAL(req->out.vwv,VWV(4),0); 43 135 : SSVAL(req->out.vwv,VWV(6),0); 44 135 : SSVAL(req->out.vwv,VWV(7),0); 45 : 46 : /* 47 : * The low level code knows it is a 48 : * one way request by looking at SMBlockingX, 49 : * wct == 8 and LOCKING_ANDX_OPLOCK_RELEASE 50 : */ 51 135 : ret = smbcli_request_send(req); 52 : 53 135 : return ret; 54 : } 55 : 56 : 57 : /**************************************************************************** 58 : set the oplock handler for a connection 59 : ****************************************************************************/ 60 404 : _PUBLIC_ void smbcli_oplock_handler(struct smbcli_transport *transport, 61 : bool (*handler)(struct smbcli_transport *, uint16_t, uint16_t, uint8_t, void *), 62 : void *private_data) 63 : { 64 404 : transport->oplock.handler = handler; 65 404 : transport->oplock.private_data = private_data; 66 404 : }