2005-10-14 16:38:07 +04:00
/*
Unix SMB / CIFS implementation .
WINS Replication server
Copyright ( C ) Stefan Metzmacher 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 .
*/
struct wreplsrv_service ;
struct wreplsrv_in_connection ;
struct wreplsrv_out_connection ;
struct wreplsrv_partner ;
struct wreplsrv_pull_partner_item ;
struct wreplsrv_push_partner_item ;
2005-10-14 16:44:47 +04:00
# define WREPLSRV_VALID_ASSOC_CTX 0x12345678
# define WREPLSRV_INVALID_ASSOC_CTX 0x0000000a
2005-10-14 16:38:07 +04:00
/*
state of an incoming wrepl call
*/
struct wreplsrv_in_call {
struct wreplsrv_in_connection * wreplconn ;
struct wrepl_packet req_packet ;
struct wrepl_packet rep_packet ;
} ;
/*
state of an incoming wrepl connection
*/
struct wreplsrv_in_connection {
struct wreplsrv_in_connection * prev , * next ;
struct stream_connection * conn ;
/* our global service context */
struct wreplsrv_service * service ;
/*
* the partner that connects us ,
* can be NULL , when we got a connection
* from an unknown address
*/
struct wreplsrv_partner * partner ;
/*
* we need to take care of our own ip address ,
* as this is the WINS - Owner ID the peer expect
* from us .
*/
const char * our_ip ;
2005-10-14 16:44:47 +04:00
/* keep track of the assoc_ctx's */
struct {
BOOL stopped ;
uint32_t our_ctx ;
uint32_t peer_ctx ;
} assoc_ctx ;
2005-10-14 16:38:07 +04:00
/* the partial input on the connection */
DATA_BLOB partial ;
size_t partial_read ;
/*
* are we currently processing a request ?
* this prevents loops , with half async code
*/
BOOL processing ;
2005-10-14 16:44:47 +04:00
/*
* if this is set we no longer accept incoming packets
* and terminate the connection after we have send all packets
*/
BOOL terminate ;
2005-10-14 16:38:07 +04:00
/* the list of outgoing DATA_BLOB's that needs to be send */
struct data_blob_list_item * send_queue ;
} ;
/*
state of an outcoming wrepl connection
*/
struct wreplsrv_out_connection {
struct wreplsrv_partner * partner ;
} ;
/*
state of the whole wrepl service
*/
struct wreplsrv_service {
/* the whole wrepl service is in one task */
struct task_server * task ;
2005-10-14 16:48:20 +04:00
/* the winsdb handle */
struct ldb_context * wins_db ;
2005-10-14 16:38:07 +04:00
/* all incoming connections */
struct wreplsrv_in_connection * in_connections ;
/* all partners (pull and push) */
struct wreplsrv_partner * partners ;
/* all pull partners */
struct wreplsrv_pull_partner * pull_partners ;
/* all push partners */
struct wreplsrv_push_partner * push_partners ;
} ;