2005-02-16 10:03:18 +00:00
/*
Unix SMB / CIFS implementation .
structures for WINS replication client library
Copyright ( C ) Andrew Tridgell 2005
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 2 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 , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
2006-03-16 00:23:11 +00:00
# include "librpc/gen_ndr/nbt.h"
# include "librpc/gen_ndr/winsrepl.h"
2005-02-16 10:03:18 +00:00
/*
main context structure for the wins replication client library
*/
struct wrepl_socket {
struct socket_context * sock ;
2005-12-12 21:31:42 +00:00
struct packet_context * packet ;
2005-02-16 10:03:18 +00:00
2005-12-12 21:31:42 +00:00
struct {
struct event_context * ctx ;
struct fd_event * fde ;
} event ;
2005-02-16 10:03:18 +00:00
/* a queue of replies waiting to be received */
struct wrepl_request * recv_queue ;
2005-09-27 16:53:08 +00:00
/* the default timeout for requests, 0 means no timeout */
# define WREPL_SOCKET_REQUEST_TIMEOUT (60)
uint32_t request_timeout ;
/* counter for request timeouts, after 2 timeouts the socket is marked as dead */
uint32_t timeout_count ;
2005-09-27 10:31:57 +00:00
/* remember is the socket is dead */
BOOL dead ;
2005-12-14 21:27:29 +00:00
/* remember if we need to free the wrepl_socket at the end of wrepl_socket_dead() */
BOOL free_skipped ;
2005-02-16 10:03:18 +00:00
} ;
2005-12-12 21:31:42 +00:00
struct wrepl_send_ctrl {
BOOL send_only ;
BOOL disconnect_after_send ;
} ;
2005-02-16 10:03:18 +00:00
enum wrepl_request_state {
2005-12-12 21:31:42 +00:00
WREPL_REQUEST_INIT = 0 ,
2005-02-16 10:03:18 +00:00
WREPL_REQUEST_RECV = 1 ,
WREPL_REQUEST_DONE = 2 ,
WREPL_REQUEST_ERROR = 3
} ;
/*
a WINS replication request
*/
struct wrepl_request {
struct wrepl_request * next , * prev ;
struct wrepl_socket * wrepl_socket ;
enum wrepl_request_state state ;
2005-12-12 21:31:42 +00:00
BOOL trigger ;
2005-02-16 10:03:18 +00:00
NTSTATUS status ;
2005-09-27 16:53:08 +00:00
struct timed_event * te ;
2005-02-16 10:03:18 +00:00
struct wrepl_packet * packet ;
struct {
void ( * fn ) ( struct wrepl_request * ) ;
void * private ;
} async ;
} ;
2005-02-18 23:13:51 +00:00
/*
setup an association
*/
struct wrepl_associate {
struct {
uint32_t assoc_ctx ;
} out ;
} ;
2005-10-06 14:38:07 +00:00
/*
setup an association
*/
struct wrepl_associate_stop {
struct {
uint32_t assoc_ctx ;
uint32_t reason ;
} in ;
} ;
2005-02-18 23:13:51 +00:00
/*
pull the partner table
*/
struct wrepl_pull_table {
struct {
uint32_t assoc_ctx ;
} in ;
struct {
uint32_t num_partners ;
struct wrepl_wins_owner * partners ;
} out ;
} ;
2005-09-29 14:00:07 +00:00
# define WREPL_NAME_TYPE(flags) (flags & WREPL_FLAGS_RECORD_TYPE)
# define WREPL_NAME_STATE(flags) ((flags & WREPL_FLAGS_RECORD_STATE)>>2)
2005-09-29 22:06:24 +00:00
# define WREPL_NAME_NODE(flags) ((flags & WREPL_FLAGS_NODE_TYPE)>>5)
2005-09-29 14:00:07 +00:00
# define WREPL_NAME_IS_STATIC(flags) ((flags & WREPL_FLAGS_IS_STATIC)?True:False)
# define WREPL_NAME_FLAGS(type, state, node, is_static) \
2005-09-29 22:06:24 +00:00
( type | ( state < < 2 ) | ( node < < 5 ) | \
2005-09-29 14:00:07 +00:00
( is_static ? WREPL_FLAGS_IS_STATIC : 0 ) )
2005-02-18 23:13:51 +00:00
/*
a full pull replication
*/
struct wrepl_pull_names {
struct {
uint32_t assoc_ctx ;
struct wrepl_wins_owner partner ;
} in ;
struct {
uint32_t num_names ;
struct wrepl_name {
struct nbt_name name ;
2005-09-29 14:00:07 +00:00
enum wrepl_name_type type ;
enum wrepl_name_state state ;
2005-09-29 22:06:24 +00:00
enum wrepl_name_node node ;
2005-09-29 14:00:07 +00:00
BOOL is_static ;
uint32_t raw_flags ;
2005-09-28 09:58:58 +00:00
uint64_t version_id ;
const char * owner ;
2005-02-18 23:13:51 +00:00
uint32_t num_addresses ;
struct wrepl_address {
const char * owner ;
const char * address ;
} * addresses ;
} * names ;
} out ;
} ;
2005-12-28 15:38:36 +00:00
# include "libcli/wrepl/winsrepl_proto.h"