2003-08-13 05:53:07 +04:00
/*
Unix SMB / CIFS implementation .
SMB client oplock functions
Copyright ( C ) Andrew Tridgell 2001
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2003-08-13 05:53:07 +04:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2003-08-13 05:53:07 +04:00
*/
# include "includes.h"
2004-11-01 04:03:22 +03:00
# include "libcli/raw/libcliraw.h"
2008-04-02 06:53:27 +04:00
# include "libcli/raw/raw_proto.h"
2003-08-13 05:53:07 +04:00
/****************************************************************************
send an ack for an oplock break request
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-10-07 02:28:14 +04:00
_PUBLIC_ bool smbcli_oplock_ack ( struct smbcli_tree * tree , uint16_t fnum , uint16_t ack_level )
2003-08-13 05:53:07 +04:00
{
2007-10-07 02:28:14 +04:00
bool ret ;
2004-08-04 17:23:35 +04:00
struct smbcli_request * req ;
2003-08-13 05:53:07 +04:00
2004-08-04 17:23:35 +04:00
req = smbcli_request_setup ( tree , SMBlockingX , 8 , 0 ) ;
2003-08-13 05:53:07 +04:00
SSVAL ( req - > out . vwv , VWV ( 0 ) , 0xFF ) ;
SSVAL ( req - > out . vwv , VWV ( 1 ) , 0 ) ;
SSVAL ( req - > out . vwv , VWV ( 2 ) , fnum ) ;
2004-03-25 05:41:19 +03:00
SCVAL ( req - > out . vwv , VWV ( 3 ) , LOCKING_ANDX_OPLOCK_RELEASE ) ;
SCVAL ( req - > out . vwv , VWV ( 3 ) + 1 , ack_level ) ;
2003-08-13 05:53:07 +04:00
SIVAL ( req - > out . vwv , VWV ( 4 ) , 0 ) ;
SSVAL ( req - > out . vwv , VWV ( 6 ) , 0 ) ;
SSVAL ( req - > out . vwv , VWV ( 7 ) , 0 ) ;
2004-08-03 10:52:06 +04:00
/* this request does not expect a reply, so tell the signing
subsystem not to allocate an id for a reply */
req - > one_way_request = 1 ;
2004-08-04 17:23:35 +04:00
ret = smbcli_request_send ( req ) ;
2003-08-13 05:53:07 +04:00
return ret ;
}
/****************************************************************************
set the oplock handler for a connection
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2006-04-30 04:00:28 +04:00
_PUBLIC_ void smbcli_oplock_handler ( struct smbcli_transport * transport ,
2007-10-07 02:28:14 +04:00
bool ( * handler ) ( struct smbcli_transport * , uint16_t , uint16_t , uint8_t , void * ) ,
2009-02-02 10:24:59 +03:00
void * private_data )
2003-08-13 05:53:07 +04:00
{
transport - > oplock . handler = handler ;
2009-02-02 12:17:00 +03:00
transport - > oplock . private_data = private_data ;
2003-08-13 05:53:07 +04:00
}