2011-07-06 18:40:21 +04:00
/*
Unix SMB / CIFS implementation .
Database interface wrapper around tdb - private header
Copyright ( C ) Volker Lendecke 2005 - 2007
Copyright ( C ) Gregor Beck 2011
Copyright ( C ) Michael Adam 2011
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
the Free Software Foundation ; either version 3 of the License , or
( 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
along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# ifndef __DBWRAP_PRIVATE_H__
# define __DBWRAP_PRIVATE_H__
2017-01-10 16:48:07 +03:00
struct tevent_context ;
struct tevent_req ;
2011-08-24 16:53:42 +04:00
struct db_record {
2012-01-02 16:30:51 +04:00
struct db_context * db ;
2011-08-24 16:53:42 +04:00
TDB_DATA key , value ;
2016-09-12 18:30:55 +03:00
NTSTATUS ( * storev ) ( struct db_record * rec , const TDB_DATA * dbufs ,
int num_dbufs , int flag ) ;
2011-08-24 16:53:42 +04:00
NTSTATUS ( * delete_rec ) ( struct db_record * rec ) ;
void * private_data ;
} ;
struct db_context {
struct db_record * ( * fetch_locked ) ( struct db_context * db ,
TALLOC_CTX * mem_ctx ,
TDB_DATA key ) ;
2012-03-27 16:31:04 +04:00
struct db_record * ( * try_fetch_locked ) ( struct db_context * db ,
TALLOC_CTX * mem_ctx ,
TDB_DATA key ) ;
2011-08-24 16:53:42 +04:00
int ( * traverse ) ( struct db_context * db ,
int ( * f ) ( struct db_record * rec ,
void * private_data ) ,
void * private_data ) ;
int ( * traverse_read ) ( struct db_context * db ,
int ( * f ) ( struct db_record * rec ,
void * private_data ) ,
void * private_data ) ;
int ( * get_seqnum ) ( struct db_context * db ) ;
int ( * transaction_start ) ( struct db_context * db ) ;
2012-06-22 09:37:44 +04:00
NTSTATUS ( * transaction_start_nonblock ) ( struct db_context * db ) ;
2011-08-24 16:53:42 +04:00
int ( * transaction_commit ) ( struct db_context * db ) ;
int ( * transaction_cancel ) ( struct db_context * db ) ;
2011-12-08 18:50:33 +04:00
NTSTATUS ( * parse_record ) ( struct db_context * db , TDB_DATA key ,
void ( * parser ) ( TDB_DATA key , TDB_DATA data ,
void * private_data ) ,
void * private_data ) ;
2017-01-10 16:48:07 +03:00
struct tevent_req * ( * parse_record_send ) (
TALLOC_CTX * mem_ctx ,
struct tevent_context * ev ,
struct db_context * db ,
TDB_DATA key ,
void ( * parser ) ( TDB_DATA key , TDB_DATA data , void * private_data ) ,
void * private_data ,
enum dbwrap_req_state * req_state ) ;
NTSTATUS ( * parse_record_recv ) ( struct tevent_req * req ) ;
2016-11-09 10:45:59 +03:00
NTSTATUS ( * do_locked ) ( struct db_context * db , TDB_DATA key ,
void ( * fn ) ( struct db_record * rec ,
void * private_data ) ,
void * private_data ) ;
2011-08-24 16:53:42 +04:00
int ( * exists ) ( struct db_context * db , TDB_DATA key ) ;
int ( * wipe ) ( struct db_context * db ) ;
2012-06-22 09:37:43 +04:00
int ( * check ) ( struct db_context * db ) ;
2015-09-20 17:26:06 +03:00
size_t ( * id ) ( struct db_context * db , uint8_t * id , size_t idlen ) ;
2012-06-22 09:37:44 +04:00
const char * name ;
2011-08-24 16:53:42 +04:00
void * private_data ;
2012-01-08 22:04:39 +04:00
enum dbwrap_lock_order lock_order ;
2011-08-24 16:53:42 +04:00
bool persistent ;
} ;
2011-07-06 18:40:21 +04:00
2014-01-28 15:04:38 +04:00
# define DBWRAP_LOCK_ORDER_MIN DBWRAP_LOCK_ORDER_1
2014-01-28 14:52:36 +04:00
# define DBWRAP_LOCK_ORDER_MAX DBWRAP_LOCK_ORDER_3
2014-01-28 14:54:06 +04:00
# define DBWRAP_LOCK_ORDER_VALID(order) \
( ( ( order ) > = DBWRAP_LOCK_ORDER_MIN ) & & \
( ( order ) < = DBWRAP_LOCK_ORDER_MAX ) )
2011-07-06 18:40:21 +04:00
# endif /* __DBWRAP_PRIVATE_H__ */