s4:lib/tevent: rename structs
[gd/samba-autobuild/.git] / source4 / client / cifsdd.c
index 28c9059efaa00d5d4fc099a490bbc8b41ab8f482..302d470afdb747b0e88430afb58481c6ca657a4f 100644 (file)
 #include "system/filesys.h"
 #include "auth/gensec/gensec.h"
 #include "lib/cmdline/popt_common.h"
+#include "libcli/resolve/resolve.h"
+#include "libcli/raw/libcliraw.h"
+#include "lib/events/events.h"
 
 #include "cifsdd.h"
+#include "param/param.h"
 
 const char * const PROGNAME = "cifsdd";
 
@@ -102,7 +106,7 @@ static struct argdef args[] =
  */
 };
 
-struct argdef * find_named_arg(const char * arg)
+static struct argdef * find_named_arg(const char * arg)
 {
        int i;
 
@@ -218,7 +222,7 @@ fail:
        return;
 }
 
-BOOL check_arg_bool(const char * name)
+bool check_arg_bool(const char * name)
 {
        struct argdef * arg;
 
@@ -229,7 +233,7 @@ BOOL check_arg_bool(const char * name)
 
        DEBUG(0, ("invalid argument name: %s", name));
        SMB_ASSERT(0);
-       return(False);
+       return(false);
 }
 
 uint64_t check_arg_numeric(const char * name)
@@ -350,7 +354,14 @@ static void print_transfer_stats(void)
        }
 }
 
-static struct dd_iohandle * open_file(const char * which)
+static struct dd_iohandle * open_file(struct resolve_context *resolve_ctx, 
+                                     struct tevent_context *ev,
+                                     const char * which, const char **ports,
+                                     struct smbcli_options *smb_options,
+                                     const char *socket_options,
+                                     struct smbcli_session_options *smb_session_options,
+                                     struct smb_iconv_convenience *iconv_convenience,
+                                     struct gensec_settings *gensec_settings)
 {
        int                     options = 0;
        const char *            path = NULL;
@@ -370,13 +381,21 @@ static struct dd_iohandle * open_file(const char * which)
 
        if (strcmp(which, "if") == 0) {
                path = check_arg_pathname("if");
-               handle = dd_open_path(path, check_arg_numeric("ibs"),
-                                       options);
+               handle = dd_open_path(resolve_ctx, ev, path, ports,
+                                     check_arg_numeric("ibs"), options,
+                                     socket_options,
+                                     smb_options, smb_session_options,
+                                     iconv_convenience,
+                                     gensec_settings);
        } else if (strcmp(which, "of") == 0) {
                options |= DD_WRITE;
                path = check_arg_pathname("of");
-               handle = dd_open_path(path, check_arg_numeric("obs"),
-                                       options);
+               handle = dd_open_path(resolve_ctx, ev, path, ports,
+                                     check_arg_numeric("obs"), options,
+                                     socket_options,
+                                     smb_options, smb_session_options,
+                                     iconv_convenience,
+                                     gensec_settings);
        } else {
                SMB_ASSERT(0);
                return(NULL);
@@ -389,15 +408,7 @@ static struct dd_iohandle * open_file(const char * which)
        return(handle);
 }
 
-static void set_max_xmit(uint64_t iomax)
-{
-       char buf[64];
-
-       snprintf(buf, sizeof(buf), "%llu", (unsigned long long)iomax);
-       lp_set_cmdline("max xmit", buf);
-}
-
-static int copy_files(void)
+static int copy_files(struct tevent_context *ev, struct loadparm_context *lp_ctx)
 {
        uint8_t *       iobuf;  /* IO buffer. */
        uint64_t        iomax;  /* Size of the IO buffer. */
@@ -410,31 +421,46 @@ static int copy_files(void)
        struct dd_iohandle *    ifile;
        struct dd_iohandle *    ofile;
 
+       struct smbcli_options options;
+       struct smbcli_session_options session_options;
+
        ibs = check_arg_numeric("ibs");
        obs = check_arg_numeric("obs");
        count = check_arg_numeric("count");
 
+       lp_smbcli_options(lp_ctx, &options);
+       lp_smbcli_session_options(lp_ctx, &session_options);
+
        /* Allocate IO buffer. We need more than the max IO size because we
         * could accumulate a remainder if ibs and obs don't match.
         */
        iomax = 2 * MAX(ibs, obs);
-       if ((iobuf = malloc(iomax)) == NULL) {
+       if ((iobuf = malloc_array_p(uint8_t, iomax)) == NULL) {
                fprintf(stderr,
                        "%s: failed to allocate IO buffer of %llu bytes\n",
                        PROGNAME, (unsigned long long)iomax);
                return(EOM_EXIT_CODE);
        }
 
-       set_max_xmit(MAX(ibs, obs));
+       options.max_xmit = MAX(ibs, obs);
 
        DEBUG(4, ("IO buffer size is %llu, max xmit is %d\n",
-                       (unsigned long long)iomax, lp_max_xmit()));
+                       (unsigned long long)iomax, options.max_xmit));
 
-       if (!(ifile = open_file("if"))) {
+       if (!(ifile = open_file(lp_resolve_context(lp_ctx), ev, "if",
+                               lp_smb_ports(lp_ctx), &options,
+                               lp_socket_options(lp_ctx),
+                               &session_options, lp_iconv_convenience(lp_ctx),
+                               lp_gensec_settings(lp_ctx, lp_ctx)))) {
                return(FILESYS_EXIT_CODE);
        }
 
-       if (!(ofile = open_file("of"))) {
+       if (!(ofile = open_file(lp_resolve_context(lp_ctx), ev, "of",
+                               lp_smb_ports(lp_ctx), &options,
+                               lp_socket_options(lp_ctx),
+                               &session_options,
+                               lp_iconv_convenience(lp_ctx),
+                               lp_gensec_settings(lp_ctx, lp_ctx)))) {
                return(FILESYS_EXIT_CODE);
        }
 
@@ -442,7 +468,7 @@ static int copy_files(void)
        ifile->io_seek(ifile, check_arg_numeric("skip") * ibs);
        ofile->io_seek(ofile, check_arg_numeric("seek") * obs);
 
-       DEBUG(4, ("max xmit was negotiated to be %d\n", lp_max_xmit()));
+       DEBUG(4, ("max xmit was negotiated to be %d\n", options.max_xmit));
 
        for (data_size = 0;;) {
 
@@ -523,6 +549,7 @@ int main(int argc, const char ** argv)
 {
        int i;
        const char ** dd_args;
+       struct tevent_context *ev;
 
        poptContext pctx;
        struct poptOption poptions[] = {
@@ -548,9 +575,9 @@ int main(int argc, const char ** argv)
        set_arg_val("if", NULL);
        set_arg_val("of", NULL);
        /* Options. */
-       set_arg_val("direct", False);
-       set_arg_val("sync", False);
-       set_arg_val("oplock", False);
+       set_arg_val("direct", false);
+       set_arg_val("sync", false);
+       set_arg_val("oplock", false);
 
        pctx = poptGetContext(PROGNAME, argc, argv, poptions, 0);
        while ((i = poptGetNextOpt(pctx)) != -1) {
@@ -573,7 +600,9 @@ int main(int argc, const char ** argv)
                }
        }
 
-       gensec_init();
+       ev = s4_event_context_init(talloc_autofree_context());
+
+       gensec_init(cmdline_lp_ctx);
        dump_args();
 
        if (check_arg_numeric("ibs") == 0 || check_arg_numeric("ibs") == 0) {
@@ -594,7 +623,7 @@ int main(int argc, const char ** argv)
 
        CatchSignal(SIGINT, dd_handle_signal);
        CatchSignal(SIGUSR1, dd_handle_signal);
-       return(copy_files());
+       return(copy_files(ev, cmdline_lp_ctx));
 }
 
 /* vim: set sw=8 sts=8 ts=8 tw=79 : */