Author: metze
Date: 2005-09-30 02:07:34 +0000 (Fri, 30 Sep 2005)
New Revision: 10640

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10640

Log:
- add some short path for the composite helper functions
  they will be used in the next commit

metze
Modified:
   branches/tmp/samba4-winsrepl/source/include/structs.h
   branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c
   branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c
   branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h


Changeset:
Modified: branches/tmp/samba4-winsrepl/source/include/structs.h
===================================================================
--- branches/tmp/samba4-winsrepl/source/include/structs.h       2005-09-30 
01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/include/structs.h       2005-09-30 
02:07:34 UTC (rev 10640)
@@ -269,8 +269,10 @@
 struct wreplsrv_owner;
 struct wreplsrv_in_connection;
 struct wreplsrv_in_call;
+struct wreplsrv_out_connection;
 struct wreplsrv_pull_table_io;
 struct wreplsrv_pull_names_io;
+struct wreplsrv_pull_cycle_io;
 
 struct winsdb_record;
 

Modified: 
branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c
===================================================================
--- branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c     
2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_connection.c     
2005-09-30 02:07:34 UTC (rev 10640)
@@ -46,6 +46,9 @@
 
        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);
@@ -76,7 +79,17 @@
 {
        struct wreplsrv_partner *partner = talloc_get_type(ptr, struct 
wreplsrv_partner);
 
-       partner->pull.creq = wreplsrv_pull_cycle_send(partner);
+       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, 
partner->pull.cycle_io);
        if (!partner->pull.creq) {
                DEBUG(1,("wreplsrv_pull_cycle_send(%s) failed\n",
                         partner->address));

Modified: branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c
===================================================================
--- branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c        
2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_out_helpers.c        
2005-09-30 02:07:34 UTC (rev 10640)
@@ -113,12 +113,12 @@
        }
 }
 
-static struct composite_context *wreplsrv_out_connect_send(struct 
wreplsrv_partner *partner)
+static struct composite_context *wreplsrv_out_connect_send(struct 
wreplsrv_partner *partner,
+                                                          struct 
wreplsrv_out_connection *wreplconn)
 {
        struct composite_context *c = NULL;
        struct wreplsrv_service *service = partner->service;
        struct wreplsrv_out_connect_state *state = NULL;
-       struct wreplsrv_out_connection *wreplconn;
 
        c = talloc_zero(partner, struct composite_context);
        if (!c) goto failed;
@@ -131,6 +131,17 @@
        c->event_ctx    = service->task->event_ctx;
        c->private_data = state;
 
+       /* we have a connection given, so use it */
+       if (wreplconn) {
+               if (wreplconn->sock->dead) {
+                       goto failed;
+               }
+               state->stage    = WREPLSRV_OUT_CONNECT_STAGE_DONE;
+               state->wreplconn= wreplconn;
+               composite_trigger_done(c);
+               return c;
+       }
+
        /* we have a connection already, so use it */
        if (partner->pull.wreplconn) {
                if (!partner->pull.wreplconn->sock->dead) {
@@ -295,8 +306,16 @@
        c->event_ctx    = service->task->event_ctx;
        c->private_data = state;
 
-       state->stage    = WREPLSRV_PULL_TABLE_STAGE_WAIT_CONNECTION;
-       state->creq     = wreplsrv_out_connect_send(io->in.partner);
+       if (io->in.num_owners) {
+               state->table_io.out.num_partners        = io->in.num_owners;
+               state->table_io.out.partners            = io->in.owners;
+               state->stage                            = 
WREPLSRV_PULL_TABLE_STAGE_DONE;
+               composite_trigger_done(c);
+               return c;
+       }
+
+       state->stage    = WREPLSRV_PULL_TABLE_STAGE_WAIT_CONNECTION;
+       state->creq     = wreplsrv_out_connect_send(io->in.partner, NULL);
        if (!state->creq) goto failed;
 
        state->creq->async.fn           = wreplsrv_pull_table_handler_creq;
@@ -437,7 +456,7 @@
        c->private_data = state;
 
        state->stage    = WREPLSRV_PULL_NAMES_STAGE_WAIT_CONNECTION;
-       state->creq     = wreplsrv_out_connect_send(io->in.partner);
+       state->creq     = wreplsrv_out_connect_send(io->in.partner, 
io->in.wreplconn);
        if (!state->creq) goto failed;
 
        state->creq->async.fn           = wreplsrv_pull_names_handler_creq;
@@ -478,7 +497,7 @@
 struct wreplsrv_pull_cycle_state {
        enum wreplsrv_pull_cycle_stage stage;
        struct composite_context *c;
-       struct wreplsrv_partner *partner;
+       struct wreplsrv_pull_cycle_io *io;
        struct wreplsrv_pull_table_io table_io;
        uint32_t current;
        struct wreplsrv_pull_names_io names_io;
@@ -496,10 +515,10 @@
        BOOL do_pull = False;
 
        for (i=state->current; i < state->table_io.out.num_owners; i++) {
-               current_owner = wreplsrv_find_owner(state->partner->pull.table,
+               current_owner = 
wreplsrv_find_owner(state->io->in.partner->pull.table,
                                                    
state->table_io.out.owners[i].address);
 
-               local_owner = 
wreplsrv_find_owner(state->partner->service->table,
+               local_owner = 
wreplsrv_find_owner(state->io->in.partner->service->table,
                                                  
state->table_io.out.owners[i].address);
                /*
                 * this means we are ourself the current owner,
@@ -530,7 +549,8 @@
        state->current = i;
 
        if (do_pull) {
-               state->names_io.in.partner              = state->partner;
+               state->names_io.in.partner              = state->io->in.partner;
+               state->names_io.in.wreplconn            = 
state->io->in.wreplconn;
                state->names_io.in.owner                = current_owner->owner;
                state->names_io.in.owner.min_version    = old_max_version;
                state->creq = wreplsrv_pull_names_send(state, &state->names_io);
@@ -557,13 +577,13 @@
        for (i=0; i < state->table_io.out.num_owners; i++) {
                BOOL is_our_addr;
 
-               is_our_addr = wreplsrv_is_our_address(state->partner->service,
+               is_our_addr = 
wreplsrv_is_our_address(state->io->in.partner->service,
                                                      
state->table_io.out.owners[i].address);
                if (is_our_addr) continue;
 
-               status = wreplsrv_add_table(state->partner->service,
-                                           state->partner, 
-                                           &state->partner->pull.table,
+               status = wreplsrv_add_table(state->io->in.partner->service,
+                                           state->io->in.partner, 
+                                           &state->io->in.partner->pull.table,
                                            
state->table_io.out.owners[i].address,
                                            
state->table_io.out.owners[i].max_version);
                NT_STATUS_NOT_OK_RETURN(status);
@@ -584,7 +604,7 @@
 {
        NTSTATUS status;
 
-       status = wreplsrv_apply_records(state->partner, &state->names_io);
+       status = wreplsrv_apply_records(state->io->in.partner, 
&state->names_io);
        NT_STATUS_NOT_OK_RETURN(status);
 
        talloc_free(state->names_io.out.names);
@@ -654,26 +674,28 @@
        return;
 }
 
-struct composite_context *wreplsrv_pull_cycle_send(struct wreplsrv_partner 
*partner)
+struct composite_context *wreplsrv_pull_cycle_send(TALLOC_CTX *mem_ctx, struct 
wreplsrv_pull_cycle_io *io)
 {
        struct composite_context *c = NULL;
-       struct wreplsrv_service *service = partner->service;
+       struct wreplsrv_service *service = io->in.partner->service;
        struct wreplsrv_pull_cycle_state *state = NULL;
 
-       c = talloc_zero(partner, struct composite_context);
+       c = talloc_zero(mem_ctx, struct composite_context);
        if (!c) goto failed;
 
        state = talloc_zero(c, struct wreplsrv_pull_cycle_state);
        if (!state) goto failed;
        state->c        = c;
-       state->partner  = partner;
+       state->io       = io;
 
        c->state        = COMPOSITE_STATE_IN_PROGRESS;
        c->event_ctx    = service->task->event_ctx;
        c->private_data = state;
 
        state->stage    = WREPLSRV_PULL_CYCLE_STAGE_WAIT_TABLE_REPLY;
-       state->table_io.in.partner      = partner;
+       state->table_io.in.partner      = io->in.partner;
+       state->table_io.in.num_owners   = io->in.num_owners;
+       state->table_io.in.owners       = io->in.owners;
        state->creq = wreplsrv_pull_table_send(state, &state->table_io);
        if (!state->creq) goto failed;
 

Modified: branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h
===================================================================
--- branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h     
2005-09-30 01:56:02 UTC (rev 10639)
+++ branches/tmp/samba4-winsrepl/source/wrepl_server/wrepl_server.h     
2005-09-30 02:07:34 UTC (rev 10640)
@@ -108,11 +108,6 @@
                uint32_t peer_ctx;
        } assoc_ctx;
 
-       /*
-        * are we currently doing something on the connection?
-        */
-       BOOL processing;
-
        /* 
         * the client socket to the partner,
         * NULL if not yet connected
@@ -176,6 +171,9 @@
                /* the current pending pull cycle request */
                struct composite_context *creq;
 
+               /* the pull cycle io params */
+               struct wreplsrv_pull_cycle_io *cycle_io;
+
                /* the current timed_event to the next pull cycle */
                struct timed_event *te;
        } pull;

Reply via email to