]> sjero.net Git - wget/blobdiff - src/main.c
[svn] New option --keep-session-cookies.
[wget] / src / main.c
index 148205ad412fda81e6bc3704a90d58e62e4e6ccb..207654b3b9591b1ffdafc5901e2f9940b9da2a3b 100644 (file)
@@ -50,6 +50,9 @@ so, delete this exception statement from your version.  */
 #endif /* HAVE_LOCALE_H */
 #endif /* HAVE_NLS */
 #include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
 
 #include "wget.h"
 #include "utils.h"
@@ -60,6 +63,7 @@ so, delete this exception statement from your version.  */
 #include "cookies.h"
 #include "url.h"
 #include "progress.h"          /* for progress_handle_sigwinch */
+#include "convert.h"
 
 #ifdef HAVE_SSL
 # include "gen_sslfunc.h"
@@ -72,14 +76,11 @@ so, delete this exception statement from your version.  */
 # define PATH_SEPARATOR '/'
 #endif
 
-extern char *version_string;
-
-#ifndef errno
-extern int errno;
-#endif
-
 struct options opt;
 
+extern LARGE_INT total_downloaded_bytes;
+extern char *version_string;
+
 extern struct cookie_jar *wget_cookie_jar;
 
 /* From log.c.  */
@@ -170,7 +171,10 @@ Download:\n\
   -N,  --timestamping           don\'t re-retrieve files unless newer than local.\n\
   -S,  --server-response        print server response.\n\
        --spider                 don\'t download anything.\n\
-  -T,  --timeout=SECONDS        set the read timeout to SECONDS.\n\
+  -T,  --timeout=SECONDS        set all timeout values to SECONDS.\n\
+       --dns-timeout=SECS       set the DNS lookup timeout to SECS.\n\
+       --connect-timeout=SECS   set the connect timeout to SECS.\n\
+       --read-timeout=SECS      set the read timeout to SECS.\n\
   -w,  --wait=SECONDS           wait SECONDS between retrievals.\n\
        --waitretry=SECONDS      wait 1...SECONDS between retries of a retrieval.\n\
        --random-wait            wait from 0...2*WAIT secs between retrievals.\n\
@@ -206,6 +210,7 @@ HTTP options:\n\
        --cookies=off         don't use cookies.\n\
        --load-cookies=FILE   load cookies from FILE before session.\n\
        --save-cookies=FILE   save cookies to FILE after session.\n\
+       --keep-session-cookies  load and save session (non-permanent) cookies.\n\
        --post-data=STRING    use the POST method; send STRING as the data.\n\
        --post-file=FILE      use the POST method; send contents of FILE.\n\
 \n"), stdout);
@@ -215,7 +220,7 @@ HTTPS (SSL) options:\n\
        --sslcertfile=FILE     optional client certificate.\n\
        --sslcertkey=KEYFILE   optional keyfile for this certificate.\n\
        --egd-file=FILE        file name of the EGD socket.\n\
-       --sslcadir=DIR         dir where hash list of CA's are stured.\n\
+       --sslcadir=DIR         dir where hash list of CA's are stored.\n\
        --sslcafile=FILE       file with bundle of CA's\n\
        --sslcerttype=0/1      Client-Cert type 0=PEM (default) / 1=ASN1 (DER)\n\
        --sslcheckcert=0/1     Check the server cert agenst given CA\n\
@@ -283,6 +288,7 @@ main (int argc, char *const *argv)
     { "help", no_argument, NULL, 'h' },
     { "html-extension", no_argument, NULL, 'E' },
     { "ignore-length", no_argument, NULL, 138 },
+    { "keep-session-cookies", no_argument, NULL, 181 },
     { "mirror", no_argument, NULL, 'm' },
     { "no-clobber", no_argument, NULL, 141 },
     { "no-directories", no_argument, NULL, 147 },
@@ -315,8 +321,10 @@ main (int argc, char *const *argv)
     { "base", required_argument, NULL, 'B' },
     { "bind-address", required_argument, NULL, 155 },
     { "cache", required_argument, NULL, 'C' },
+    { "connect-timeout", required_argument, NULL, 180 },
     { "cookies", required_argument, NULL, 160 },
     { "cut-dirs", required_argument, NULL, 145 },
+    { "dns-timeout", required_argument, NULL, 178 },
     { "directory-prefix", required_argument, NULL, 'P' },
     { "dns-cache", required_argument, NULL, 175 },
     { "domains", required_argument, NULL, 'D' },
@@ -346,6 +354,7 @@ main (int argc, char *const *argv)
     { "proxy-passwd", required_argument, NULL, 144 },
     { "proxy-user", required_argument, NULL, 143 },
     { "quota", required_argument, NULL, 'Q' },
+    { "read-timeout", required_argument, NULL, 179 },
     { "reject", required_argument, NULL, 'R' },
     { "restrict-file-names", required_argument, NULL, 176 },
     { "save-cookies", required_argument, NULL, 162 },
@@ -452,12 +461,12 @@ hpVqvdkKsxmNWrHSLcFbEY:G:g:T:U:O:l:n:i:o:a:t:D:A:R:P:B:e:Q:X:I:w:C:",
          setoptval ("continue", "on");
          break;
        case 'd':
-#ifdef DEBUG
+#ifdef ENABLE_DEBUG
          setoptval ("debug", "on");
-#else  /* not DEBUG */
+#else
          fprintf (stderr, _("%s: debug support not compiled in.\n"),
                   exec_name);
-#endif /* not DEBUG */
+#endif
          break;
        case 'E':
          setoptval ("htmlextension", "on");
@@ -508,13 +517,13 @@ hpVqvdkKsxmNWrHSLcFbEY:G:g:T:U:O:l:n:i:o:a:t:D:A:R:P:B:e:Q:X:I:w:C:",
        case 'V':
          printf ("GNU Wget %s\n\n", version_string);
          printf ("%s", _("\
-Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.\n"));
+Copyright (C) 2003 Free Software Foundation, Inc.\n"));
          printf ("%s", _("\
 This program is distributed in the hope that it will be useful,\n\
 but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\
 GNU General Public License for more details.\n"));
-         printf (_("\nOriginally written by Hrvoje Niksic <hniksic@arsdigita.com>.\n"));
+         printf (_("\nOriginally written by Hrvoje Niksic <hniksic@xemacs.org>.\n"));
          exit (0);
          break;
        case 'v':
@@ -529,6 +538,9 @@ GNU General Public License for more details.\n"));
        case 177:
          setoptval ("strictcomments", "on");
          break;
+       case 181:
+         setoptval ("keepsessioncookies", "on");
+         break;
 
          /* Options accepting an argument: */
        case 129:
@@ -620,6 +632,15 @@ GNU General Public License for more details.\n"));
        case 176:
          setoptval ("restrictfilenames", optarg);
          break;
+       case 178:
+         setoptval ("dnstimeout", optarg);
+         break;
+       case 179:
+         setoptval ("readtimeout", optarg);
+         break;
+       case 180:
+         setoptval ("connecttimeout", optarg);
+         break;
        case 'A':
          setoptval ("accept", optarg);
          break;
@@ -743,10 +764,12 @@ GNU General Public License for more details.\n"));
 
   if (opt.page_requisites && !opt.recursive)
     {
-      opt.recursive = TRUE;
+      /* Don't set opt.recursive here because it would confuse the FTP
+        code.  Instead, call retrieve_tree below when either
+        page_requisites or recursive is requested.  */
       opt.reclevel = 0;
       if (!opt.no_dirstruct)
-       opt.dirstruct = TRUE;  /* usually handled by cmd_spec_recursive() */
+       opt.dirstruct = 1;      /* normally handled by cmd_spec_recursive() */
     }
 
   if (opt.verbose == -1)
@@ -787,9 +810,8 @@ Can't timestamp and not clobber old files at the same time.\n"));
   if (opt.verbose)
     set_progress_implementation (opt.progress_type);
 
-  /* Allocate basic pointer.  */
-  url = ALLOCA_ARRAY (char *, nurl + 1);
   /* Fill in the arguments.  */
+  url = alloca_array (char *, nurl + 1);
   for (i = 0; i < nurl; i++, optind++)
     {
       char *rewritten = rewrite_shorthand_url (argv[optind]);
@@ -864,7 +886,8 @@ Can't timestamp and not clobber old files at the same time.\n"));
       char *filename = NULL, *redirected_URL = NULL;
       int dt;
 
-      if (opt.recursive && url_scheme (*t) != SCHEME_FTP)
+      if ((opt.recursive || opt.page_requisites)
+         && url_scheme (*t) != SCHEME_FTP)
        status = retrieve_tree (*t);
       else
        status = retrieve_url (*t, &filename, &redirected_URL, NULL, &dt);
@@ -877,8 +900,8 @@ Can't timestamp and not clobber old files at the same time.\n"));
            logprintf (LOG_NOTQUIET, "unlink: %s\n", strerror (errno));
        }
 
-      FREE_MAYBE (redirected_URL);
-      FREE_MAYBE (filename);
+      xfree_null (redirected_URL);
+      xfree_null (filename);
     }
 
   /* And then from the input file, if any.  */
@@ -891,18 +914,16 @@ Can't timestamp and not clobber old files at the same time.\n"));
                   opt.input_filename);
     }
   /* Print the downloaded sum.  */
-  if (opt.recursive
+  if (opt.recursive || opt.page_requisites
       || nurl > 1
-      || (opt.input_filename && opt.downloaded != 0))
+      || (opt.input_filename && total_downloaded_bytes != 0))
     {
       logprintf (LOG_NOTQUIET,
                 _("\nFINISHED --%s--\nDownloaded: %s bytes in %d files\n"),
-                time_str (NULL),
-                (opt.downloaded_overflow ?
-                 "<overflow>" : legible_very_long (opt.downloaded)),
+                time_str (NULL), legible_large_int (total_downloaded_bytes),
                 opt.numurls);
       /* Print quota warning, if exceeded.  */
-      if (downloaded_exceeds_quota ())
+      if (opt.quota && total_downloaded_bytes > opt.quota)
        logprintf (LOG_NOTQUIET,
                   _("Download quota (%s bytes) EXCEEDED!\n"),
                   legible (opt.quota));
@@ -912,9 +933,7 @@ Can't timestamp and not clobber old files at the same time.\n"));
     cookie_jar_save (wget_cookie_jar, opt.cookies_output);
 
   if (opt.convert_links && !opt.delete_after)
-    {
-      convert_all_links ();
-    }
+    convert_all_links ();
 
   log_close ();
   for (i = 0; i < nurl; i++)