Author: metze
Date: 2006-07-30 18:24:07 +0000 (Sun, 30 Jul 2006)
New Revision: 17325

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

Log:
make better usage of the composite api

metze
Modified:
   branches/SAMBA_4_0/source/librpc/rpc/dcerpc_connect.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/rpc/dcerpc_connect.c
===================================================================
--- branches/SAMBA_4_0/source/librpc/rpc/dcerpc_connect.c       2006-07-30 
17:55:09 UTC (rev 17324)
+++ branches/SAMBA_4_0/source/librpc/rpc/dcerpc_connect.c       2006-07-30 
18:24:07 UTC (rev 17325)
@@ -98,15 +98,12 @@
        struct smb_composite_connect *conn;
 
        /* composite context allocation and setup */
-       c = talloc_zero(mem_ctx, struct composite_context);
+       c = composite_create(mem_ctx, io->pipe->conn->event_ctx);
        if (c == NULL) return NULL;
 
        s = talloc_zero(c, struct pipe_np_smb_state);
        if (composite_nomem(s, c)) return c;
-
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
-       c->event_ctx = io->pipe->conn->event_ctx;
 
        s->io  = *io;
        conn   = &s->conn;
@@ -229,15 +226,12 @@
        struct composite_context *conn_req;
 
        /* composite context allocation and setup */
-       c = talloc_zero(mem_ctx, struct composite_context);
+       c = composite_create(mem_ctx, io->pipe->conn->event_ctx);
        if (c == NULL) return NULL;
 
        s = talloc_zero(c, struct pipe_np_smb2_state);
        if (composite_nomem(s, c)) return c;
-       
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
-       c->event_ctx = io->pipe->conn->event_ctx;
 
        s->io = *io;
 
@@ -256,10 +250,7 @@
        /* send smb2 connect request */
        conn_req = smb2_connect_send(mem_ctx, s->io.binding->host, "IPC$", 
s->io.creds,
                                     c->event_ctx);
-       if (composite_nomem(conn_req, c)) return c;
-
        composite_continue(c, conn_req, continue_smb2_connect, c);
-
        return c;
 }
 
@@ -323,15 +314,12 @@
        struct composite_context *pipe_req;
 
        /* composite context allocation and setup */
-       c = talloc_zero(mem_ctx, struct composite_context);
+       c = composite_create(mem_ctx, io->pipe->conn->event_ctx);
        if (c == NULL) return NULL;
 
        s = talloc_zero(c, struct pipe_ip_tcp_state);
        if (composite_nomem(s, c)) return c;
-       
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
-       c->event_ctx = io->pipe->conn->event_ctx;
 
        /* store input parameters in state structure */
        s->io    = *io;
@@ -340,8 +328,6 @@
 
        /* send pipe open request on tcp/ip */
        pipe_req = dcerpc_pipe_open_tcp_send(s->io.pipe->conn, s->host, 
s->port);
-       if (composite_nomem(pipe_req, c)) return c;
-
        composite_continue(c, pipe_req, continue_pipe_open_ncacn_ip_tcp, c);
        return c;
 }
@@ -405,15 +391,12 @@
        struct composite_context *pipe_req;
 
        /* composite context allocation and setup */
-       c = talloc_zero(mem_ctx, struct composite_context);
+       c = composite_create(mem_ctx, io->pipe->conn->event_ctx);
        if (c == NULL) return NULL;
 
        s = talloc_zero(c, struct pipe_unix_state);
        if (composite_nomem(s, c)) return c;
-       
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
-       c->event_ctx = io->pipe->conn->event_ctx;
 
        /* prepare pipe open parameters and store them in state structure
           also, verify whether biding endpoint is not null */
@@ -426,11 +409,10 @@
        }
 
        s->path  = talloc_strdup(c, io->binding->endpoint);  /* path is a 
binding endpoint here */
+       if (composite_nomem(s->path, c)) return c;
 
        /* send pipe open request on unix socket */
        pipe_req = dcerpc_pipe_open_unix_stream_send(s->io.pipe->conn, s->path);
-       if (composite_nomem(pipe_req, c)) return c;
-
        composite_continue(c, pipe_req, continue_pipe_open_ncacn_unix_stream, 
c);
        return c;
 }
@@ -493,23 +475,18 @@
        struct composite_context *pipe_req;
 
        /* composite context allocation and setup */
-       c = talloc_zero(mem_ctx, struct composite_context);
+       c = composite_create(mem_ctx, io->pipe->conn->event_ctx);
        if (c == NULL) return NULL;
 
        s = talloc_zero(c, struct pipe_ncalrpc_state);
        if (composite_nomem(s, c)) return c;
-       
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
-       c->event_ctx = io->pipe->conn->event_ctx;
        
        /* store input parameters in state structure */
        s->io  = *io;
 
        /* send pipe open request */
        pipe_req = dcerpc_pipe_open_pipe_send(s->io.pipe->conn, 
s->io.binding->endpoint);
-       if (composite_nomem(pipe_req, c)) return c;
-       
        composite_continue(c, pipe_req, continue_pipe_open_ncalrpc, c);
        return c;
 }
@@ -602,16 +579,12 @@
                if (pc.binding->flags & DCERPC_SMB2) {
                        /* new varient of SMB a.k.a. SMB2 */
                        ncacn_np_smb2_req = 
dcerpc_pipe_connect_ncacn_np_smb2_send(c, &pc);
-                       if (composite_nomem(ncacn_np_smb2_req, c)) return;
-
                        composite_continue(c, ncacn_np_smb2_req, 
continue_pipe_connect_ncacn_np_smb2, c);
                        return;
 
                } else {
                        /* good old ordinary SMB */
                        ncacn_np_smb_req = 
dcerpc_pipe_connect_ncacn_np_smb_send(c, &pc);
-                       if (composite_nomem(ncacn_np_smb_req, c)) return;
-                       
                        composite_continue(c, ncacn_np_smb_req, 
continue_pipe_connect_ncacn_np_smb, c);
                        return;
                }
@@ -619,22 +592,16 @@
 
        case NCACN_IP_TCP:
                ncacn_ip_tcp_req = dcerpc_pipe_connect_ncacn_ip_tcp_send(c, 
&pc);
-               if (composite_nomem(ncacn_ip_tcp_req, c)) return;
-               
                composite_continue(c, ncacn_ip_tcp_req, 
continue_pipe_connect_ncacn_ip_tcp, c);
                return;
 
        case NCACN_UNIX_STREAM:
                ncacn_unix_req = dcerpc_pipe_connect_ncacn_unix_stream_send(c, 
&pc);
-               if (composite_nomem(ncacn_unix_req, c)) return;
-               
                composite_continue(c, ncacn_unix_req, 
continue_pipe_connect_ncacn_unix, c);
                return;
 
        case NCALRPC:
                ncalrpc_req = dcerpc_pipe_connect_ncalrpc_send(c, &pc);
-               if (composite_nomem(ncalrpc_req, c)) return;
-               
                composite_continue(c, ncalrpc_req, 
continue_pipe_connect_ncalrpc, c);
                return;
 
@@ -748,8 +715,6 @@
 
        auth_bind_req = dcerpc_pipe_auth_send(s->pipe, s->binding, s->table,
                                              s->credentials);
-       if (composite_nomem(auth_bind_req, c)) return;
-       
        composite_continue(c, auth_bind_req, continue_pipe_auth, c);
 }
 
@@ -783,28 +748,28 @@
 {
        struct composite_context *c;
        struct pipe_connect_state *s;
-
+       struct event_context *new_ev = NULL;
        struct composite_context *binding_req;
 
+
+       if (ev == NULL) {
+               new_ev = event_context_init(parent_ctx);
+               if (new_ev == NULL) return NULL;
+               ev = new_ev;
+       }
+
        /* composite context allocation and setup */
-       c = talloc_zero(parent_ctx, struct composite_context);
-       if (c == NULL) return NULL;
+       c = composite_create(parent_ctx, ev);
+       if (c == NULL) {
+               talloc_free(new_ev);
+               return NULL;
+       }
+       talloc_steal(c, new_ev);
 
        s = talloc_zero(c, struct pipe_connect_state);
        if (composite_nomem(s, c)) return c;
-
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
 
-       if (ev == NULL) {
-               ev = event_context_init(c);
-               if (ev == NULL) {
-                       talloc_free(c);
-                       return NULL;
-               }
-       }
-       c->event_ctx = ev;
-
        /* initialise dcerpc pipe structure */
        s->pipe = dcerpc_pipe_init(c, ev);
        if (composite_nomem(s->pipe, c)) return c;
@@ -893,36 +858,35 @@
                                                   struct cli_credentials 
*credentials,
                                                   struct event_context *ev)
 {
-       NTSTATUS status;
        struct composite_context *c;
        struct pipe_conn_state *s;
        struct dcerpc_binding *b;
        struct composite_context *pipe_conn_req;
+       struct event_context *new_ev = NULL;
 
+       if (ev == NULL) {
+               new_ev = event_context_init(parent_ctx);
+               if (new_ev == NULL) return NULL;
+               ev = new_ev;
+       }
+
        /* composite context allocation and setup */
-       c = talloc_zero(parent_ctx, struct composite_context);
-       if (c == NULL) return NULL;
+       c = composite_create(parent_ctx, ev);
+       if (c == NULL) {
+               talloc_free(new_ev);
+               return NULL;
+       }
+       talloc_steal(c, new_ev);
 
        s = talloc_zero(c, struct pipe_conn_state);
        if (composite_nomem(s, c)) return c;
-
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
        c->private_data = s;
 
-       if (ev == NULL) {
-               ev = event_context_init(c);
-               if (ev == NULL) {
-                       talloc_free(c);
-                       return NULL;
-               }
-       }
-       c->event_ctx = ev;
-
        /* parse binding string to the structure */
-       status = dcerpc_parse_binding(c, binding, &b);
-       if (!NT_STATUS_IS_OK(status)) {
+       c->status = dcerpc_parse_binding(c, binding, &b);
+       if (!NT_STATUS_IS_OK(c->status)) {
                DEBUG(0, ("Failed to parse dcerpc binding '%s'\n", binding));
-               composite_error(c, status);
+               composite_error(c, c->status);
                return c;
        }
 
@@ -934,9 +898,6 @@
         */
        pipe_conn_req = dcerpc_pipe_connect_b_send(c, b, table,
                                                   credentials, ev);
-
-       if (composite_nomem(pipe_conn_req, c)) return c;
-
        composite_continue(c, pipe_conn_req, continue_pipe_connect_b, c);
        return c;
 }
@@ -1027,18 +988,11 @@
        struct composite_context *pipe_ncalrpc_req;
        
        /* composite context allocation and setup */
-       c = talloc_zero(p, struct composite_context);
+       c = composite_create(p, p->conn->event_ctx);
        if (c == NULL) return NULL;
 
-       c->event_ctx = p->conn->event_ctx;
-
        s = talloc_zero(c, struct sec_conn_state);
-       if (s == NULL) {
-               composite_error(c, NT_STATUS_NO_MEMORY);
-               return c;
-       }
-
-       c->state = COMPOSITE_STATE_IN_PROGRESS;
+       if (composite_nomem(s, c)) return c;
        c->private_data = s;
 
        s->pipe     = p;
@@ -1060,8 +1014,6 @@
 
                pipe_smb_req = dcerpc_pipe_open_smb_send(s->pipe2->conn, 
s->tree,
                                                         s->binding->endpoint);
-               if (composite_nomem(pipe_smb_req, c)) return c;
-
                composite_continue(c, pipe_smb_req, continue_open_smb, c);
                return c;
 
@@ -1069,16 +1021,12 @@
                pipe_tcp_req = dcerpc_pipe_open_tcp_send(s->pipe2->conn,
                                                         s->binding->host,
                                                         
atoi(s->binding->endpoint));
-               if (composite_nomem(pipe_tcp_req, c)) return c;
-
                composite_continue(c, pipe_tcp_req, continue_open_tcp, c);
                return c;
 
        case NCALRPC:
                pipe_ncalrpc_req = dcerpc_pipe_open_pipe_send(s->pipe2->conn,
                                                              
s->binding->endpoint);
-               if (composite_nomem(pipe_ncalrpc_req, c)) return c;
-
                composite_continue(c, pipe_ncalrpc_req, continue_open_pipe, c);
                return c;
 

Reply via email to