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/**************************************************************************** 25send an ack for an oplock break request 26****************************************************************************/ 27_PUBLIC_ bool smbcli_oplock_ack(struct smbcli_tree *tree, uint16_t fnum, uint16_t ack_level) 28{ 29 bool ret; 30 struct smbcli_request *req; 31 32 req = smbcli_request_setup(tree, SMBlockingX, 8, 0); 33 34 SSVAL(req->out.vwv,VWV(0),0xFF); 35 SSVAL(req->out.vwv,VWV(1),0); 36 SSVAL(req->out.vwv,VWV(2),fnum); 37 SCVAL(req->out.vwv,VWV(3),LOCKING_ANDX_OPLOCK_RELEASE); 38 SCVAL(req->out.vwv,VWV(3)+1,ack_level); 39 SIVAL(req->out.vwv,VWV(4),0); 40 SSVAL(req->out.vwv,VWV(6),0); 41 SSVAL(req->out.vwv,VWV(7),0); 42 43 /* this request does not expect a reply, so tell the signing 44 subsystem not to allocate an id for a reply */ 45 req->one_way_request = 1; 46 47 ret = smbcli_request_send(req); 48 49 return ret; 50} 51 52 53/**************************************************************************** 54set the oplock handler for a connection 55****************************************************************************/ 56_PUBLIC_ void smbcli_oplock_handler(struct smbcli_transport *transport, 57 bool (*handler)(struct smbcli_transport *, uint16_t, uint16_t, uint8_t, void *), 58 void *private_data) 59{ 60 transport->oplock.handler = handler; 61 transport->oplock.private_data = private_data; 62} 63