diff options
author | Stefan Metzmacher <metze@samba.org> | 2005-10-14 12:38:07 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:41:25 -0500 |
commit | b2da403af9963b9242f0a61ce0ed1d005acf2bd7 (patch) | |
tree | 8e4f435a8c60109376837e4973c445f4a5545cb3 /source4/wrepl_server/wrepl_server.c | |
parent | e44c76ebd75af22f15b4ab2dd87421e66632eac0 (diff) | |
download | samba-b2da403af9963b9242f0a61ce0ed1d005acf2bd7.tar.gz samba-b2da403af9963b9242f0a61ce0ed1d005acf2bd7.tar.xz samba-b2da403af9963b9242f0a61ce0ed1d005acf2bd7.zip |
r11007: r10109@SERNOX: metze | 2005-09-09 12:29:12 +0200
- move structs to a seperate header file
- move the code for the wreplsrv_in_call handling to a seperate file
metze
(This used to be commit c9a8544446312d96ecadcf370af76d9dc5b2531a)
Diffstat (limited to 'source4/wrepl_server/wrepl_server.c')
-rw-r--r-- | source4/wrepl_server/wrepl_server.c | 157 |
1 files changed, 2 insertions, 155 deletions
diff --git a/source4/wrepl_server/wrepl_server.c b/source4/wrepl_server/wrepl_server.c index 10dc824507..50be38e8d6 100644 --- a/source4/wrepl_server/wrepl_server.c +++ b/source4/wrepl_server/wrepl_server.c @@ -28,166 +28,13 @@ #include "smbd/service_stream.h" #include "lib/messaging/irpc.h" #include "librpc/gen_ndr/ndr_winsrepl.h" +#include "wrepl_server/wrepl_server.h" -struct wreplsrv_service; -struct wreplsrv_in_connection; -struct wreplsrv_out_connection; -struct wreplsrv_partner; -struct wreplsrv_pull_partner_item; -struct wreplsrv_push_partner_item; - -/* - 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; - - /* 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; - - /* 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; - - /* 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; -}; - -static void wreplsrv_terminate_connection(struct wreplsrv_in_connection *wreplconn, const char *reason) +void wreplsrv_terminate_connection(struct wreplsrv_in_connection *wreplconn, const char *reason) { stream_terminate_connection(wreplconn->conn, reason); } -static NTSTATUS wreplsrv_in_start_association(struct wreplsrv_in_call *call) -{ - struct wrepl_stop *stop; - - call->rep_packet.opcode = WREPL_OPCODE_BITS; - call->rep_packet.assoc_ctx = 0; - call->rep_packet.mess_type = WREPL_STOP_ASSOCIATION; - stop = &call->rep_packet.message.stop; - stop->reason = 4; - - return NT_STATUS_OK; -} - -static NTSTATUS wreplsrv_in_replication(struct wreplsrv_in_call *call) -{ - struct wrepl_replication *repl_in = &call->req_packet.message.replication; - struct wrepl_stop *stop_out; - - switch (repl_in->command) { - case WREPL_REPL_TABLE_QUERY: - break; - case WREPL_REPL_TABLE_REPLY: - break; - case WREPL_REPL_SEND_REQUEST: - break; - case WREPL_REPL_SEND_REPLY: - break; - case WREPL_REPL_UPDATE: - break; - case WREPL_REPL_INFORM: - break; - } - - call->rep_packet.opcode = WREPL_OPCODE_BITS; - call->rep_packet.assoc_ctx = 0; - call->rep_packet.mess_type = WREPL_STOP_ASSOCIATION; - stop_out = &call->rep_packet.message.stop; - stop_out->reason = 4; - - return NT_STATUS_OK; -} - -static NTSTATUS wreplsrv_in_call(struct wreplsrv_in_call *call) -{ - struct wrepl_stop *stop_out; - - /* TODO: check opcode and assoc_ctx */ - - switch (call->req_packet.mess_type) { - case WREPL_START_ASSOCIATION: - return wreplsrv_in_start_association(call); - - case WREPL_START_ASSOCIATION_REPLY: - /* this is not valid here */ - break; - case WREPL_STOP_ASSOCIATION: - /* this is not valid here */ - break; - - case WREPL_REPLICATION: - return wreplsrv_in_replication(call); - } - - call->rep_packet.opcode = WREPL_OPCODE_BITS; - call->rep_packet.assoc_ctx = 0; - call->rep_packet.mess_type = WREPL_STOP_ASSOCIATION; - call->rep_packet.padding = data_blob(NULL, 0); - stop_out = &call->rep_packet.message.stop; - stop_out->reason = 4; - - return NT_STATUS_OK; -} - /* called when we get a new connection */ |