summaryrefslogtreecommitdiff
path: root/source4/wrepl_server/wrepl_out_connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/wrepl_server/wrepl_out_connection.c')
-rw-r--r--source4/wrepl_server/wrepl_out_connection.c174
1 files changed, 0 insertions, 174 deletions
diff --git a/source4/wrepl_server/wrepl_out_connection.c b/source4/wrepl_server/wrepl_out_connection.c
deleted file mode 100644
index 31a72307d7..0000000000
--- a/source4/wrepl_server/wrepl_out_connection.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- 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 02139, USA.
-*/
-
-#include "includes.h"
-#include "dlinklist.h"
-#include "lib/events/events.h"
-#include "lib/socket/socket.h"
-#include "smbd/service_task.h"
-#include "smbd/service_stream.h"
-#include "lib/messaging/irpc.h"
-#include "librpc/gen_ndr/ndr_winsrepl.h"
-#include "wrepl_server/wrepl_server.h"
-#include "nbt_server/wins/winsdb.h"
-#include "ldb/include/ldb.h"
-#include "libcli/composite/composite.h"
-#include "libcli/wrepl/winsrepl.h"
-#include "wrepl_server/wrepl_out_helpers.h"
-
-static void wreplsrv_pull_handler_te(struct event_context *ev, struct timed_event *te,
- struct timeval t, void *ptr);
-
-static void wreplsrv_pull_handler_creq(struct composite_context *creq)
-{
- struct wreplsrv_partner *partner = talloc_get_type(creq->async.private_data, struct wreplsrv_partner);
- uint32_t interval;
-
- partner->pull.last_status = wreplsrv_pull_cycle_recv(partner->pull.creq);
- partner->pull.creq = NULL;
- talloc_free(partner->pull.cycle_io);
- partner->pull.cycle_io = NULL;
-
- if (!NT_STATUS_IS_OK(partner->pull.last_status)) {
- interval = partner->pull.error_count * partner->pull.retry_interval;
- interval = MIN(interval, partner->pull.interval);
- partner->pull.error_count++;
-
- DEBUG(1,("wreplsrv_pull_cycle(%s): %s: next: %us\n",
- partner->address, nt_errstr(partner->pull.last_status),
- interval));
- } else {
- interval = partner->pull.interval;
- partner->pull.error_count = 0;
-
- DEBUG(2,("wreplsrv_pull_cycle(%s): %s: next: %us\n",
- partner->address, nt_errstr(partner->pull.last_status),
- interval));
- }
-
- partner->pull.te = event_add_timed(partner->service->task->event_ctx, partner,
- timeval_current_ofs(interval, 0),
- wreplsrv_pull_handler_te, partner);
- if (!partner->pull.te) {
- DEBUG(0,("wreplsrv_pull_handler_creq: event_add_timed() failed! no memory!\n"));
- }
-}
-
-static void wreplsrv_pull_handler_te(struct event_context *ev, struct timed_event *te,
- struct timeval t, void *ptr)
-{
- struct wreplsrv_partner *partner = talloc_get_type(ptr, struct wreplsrv_partner);
-
- partner->pull.te = NULL;
-
- partner->pull.cycle_io = talloc(partner, struct wreplsrv_pull_cycle_io);
- if (!partner->pull.cycle_io) {
- goto requeue;
- }
-
- partner->pull.cycle_io->in.partner = partner;
- partner->pull.cycle_io->in.num_owners = 0;
- partner->pull.cycle_io->in.owners = NULL;
- partner->pull.cycle_io->in.wreplconn = NULL;
- partner->pull.creq = wreplsrv_pull_cycle_send(partner->pull.cycle_io, partner->pull.cycle_io);
- if (!partner->pull.creq) {
- DEBUG(1,("wreplsrv_pull_cycle_send(%s) failed\n",
- partner->address));
- goto requeue;
- }
-
- partner->pull.creq->async.fn = wreplsrv_pull_handler_creq;
- partner->pull.creq->async.private_data = partner;
-
- return;
-requeue:
- talloc_free(partner->pull.cycle_io);
- partner->pull.cycle_io = NULL;
- /* retry later */
- partner->pull.te = event_add_timed(partner->service->task->event_ctx, partner,
- timeval_add(&t, partner->pull.retry_interval, 0),
- wreplsrv_pull_handler_te, partner);
- if (!partner->pull.te) {
- DEBUG(0,("wreplsrv_pull_handler_te: event_add_timed() failed! no memory!\n"));
- }
-}
-
-NTSTATUS wreplsrv_sched_inform_action(struct wreplsrv_partner *partner, struct wrepl_table *inform_in)
-{
- if (partner->pull.creq) {
- /* there's already a pull in progress, so we're done */
- return NT_STATUS_OK;
- }
-
- /* remove the scheduled pull */
- talloc_free(partner->pull.te);
- partner->pull.te = NULL;
-
- partner->pull.cycle_io = talloc(partner, struct wreplsrv_pull_cycle_io);
- if (!partner->pull.cycle_io) {
- goto requeue;
- }
-
- partner->pull.cycle_io->in.partner = partner;
- partner->pull.cycle_io->in.num_owners = inform_in->partner_count;
- partner->pull.cycle_io->in.owners = inform_in->partners;
- talloc_steal(partner->pull.cycle_io, inform_in->partners);
- partner->pull.cycle_io->in.wreplconn = NULL;
- partner->pull.creq = wreplsrv_pull_cycle_send(partner->pull.cycle_io, partner->pull.cycle_io);
- if (!partner->pull.creq) {
- DEBUG(1,("wreplsrv_pull_cycle_send(%s) failed\n",
- partner->address));
- goto requeue;
- }
-
- partner->pull.creq->async.fn = wreplsrv_pull_handler_creq;
- partner->pull.creq->async.private_data = partner;
-
- return NT_STATUS_OK;
-requeue:
- talloc_free(partner->pull.cycle_io);
- partner->pull.cycle_io = NULL;
- /* retry later */
- partner->pull.te = event_add_timed(partner->service->task->event_ctx, partner,
- timeval_current_ofs(partner->pull.retry_interval, 0),
- wreplsrv_pull_handler_te, partner);
- if (!partner->pull.te) {
- DEBUG(0,("wreplsrv_pull_handler_te: event_add_timed() failed! no memory!\n"));
- }
-
- return NT_STATUS_OK;
-}
-
-NTSTATUS wreplsrv_setup_out_connections(struct wreplsrv_service *service)
-{
- struct wreplsrv_partner *cur;
-
- for (cur = service->partners; cur; cur = cur->next) {
- if ((cur->type & WINSREPL_PARTNER_PULL) && cur->pull.interval) {
- cur->pull.te = event_add_timed(service->task->event_ctx, cur,
- timeval_zero(), wreplsrv_pull_handler_te, cur);
- NT_STATUS_HAVE_NO_MEMORY(cur->pull.te);
- }
- }
-
- return NT_STATUS_OK;
-}