]> sjero.net Git - wget/blob - src/retr.c
[svn] Rename LARGE_INT to SUM_SIZE_INT, and simplify its handling.
[wget] / src / retr.c
1 /* File retrieval.
2    Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
3
4 This file is part of GNU Wget.
5
6 GNU Wget is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or (at
9 your option) any later version.
10
11 GNU Wget is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Wget; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
20 In addition, as a special exception, the Free Software Foundation
21 gives permission to link the code of its release of Wget with the
22 OpenSSL project's "OpenSSL" library (or with modified versions of it
23 that use the same license as the "OpenSSL" library), and distribute
24 the linked executables.  You must obey the GNU General Public License
25 in all respects for all of the code used other than "OpenSSL".  If you
26 modify this file, you may extend this exception to your version of the
27 file, but you are not obligated to do so.  If you do not wish to do
28 so, delete this exception statement from your version.  */
29
30 #include <config.h>
31
32 #include <stdio.h>
33 #include <stdlib.h>
34 #ifdef HAVE_UNISTD_H
35 # include <unistd.h>
36 #endif /* HAVE_UNISTD_H */
37 #include <errno.h>
38 #include <string.h>
39 #include <assert.h>
40
41 #include "wget.h"
42 #include "utils.h"
43 #include "retr.h"
44 #include "progress.h"
45 #include "url.h"
46 #include "recur.h"
47 #include "ftp.h"
48 #include "host.h"
49 #include "connect.h"
50 #include "hash.h"
51 #include "convert.h"
52 #include "ptimer.h"
53
54 /* Total size of downloaded files.  Used to enforce quota.  */
55 SUM_SIZE_INT total_downloaded_bytes;
56
57 /* If non-NULL, the stream to which output should be written.  This
58    stream is initialized when `-O' is used.  */
59 FILE *output_stream;
60
61 /* Whether output_document is a regular file we can manipulate,
62    i.e. not `-' or a device file. */
63 bool output_stream_regular;
64 \f
65 static struct {
66   wgint chunk_bytes;
67   double chunk_start;
68   double sleep_adjust;
69 } limit_data;
70
71 static void
72 limit_bandwidth_reset (void)
73 {
74   limit_data.chunk_bytes = 0;
75   limit_data.chunk_start = 0;
76   limit_data.sleep_adjust = 0;
77 }
78
79 /* Limit the bandwidth by pausing the download for an amount of time.
80    BYTES is the number of bytes received from the network, and TIMER
81    is the timer that started at the beginning of download.  */
82
83 static void
84 limit_bandwidth (wgint bytes, struct ptimer *timer)
85 {
86   double delta_t = ptimer_read (timer) - limit_data.chunk_start;
87   double expected;
88
89   limit_data.chunk_bytes += bytes;
90
91   /* Calculate the amount of time we expect downloading the chunk
92      should take.  If in reality it took less time, sleep to
93      compensate for the difference.  */
94   expected = 1000.0 * limit_data.chunk_bytes / opt.limit_rate;
95
96   if (expected > delta_t)
97     {
98       double slp = expected - delta_t + limit_data.sleep_adjust;
99       double t0, t1;
100       if (slp < 200)
101         {
102           DEBUGP (("deferring a %.2f ms sleep (%s/%.2f).\n",
103                    slp, number_to_static_string (limit_data.chunk_bytes),
104                    delta_t));
105           return;
106         }
107       DEBUGP (("\nsleeping %.2f ms for %s bytes, adjust %.2f ms\n",
108                slp, number_to_static_string (limit_data.chunk_bytes),
109                limit_data.sleep_adjust));
110
111       t0 = ptimer_read (timer);
112       xsleep (slp / 1000);
113       t1 = ptimer_measure (timer);
114
115       /* Due to scheduling, we probably slept slightly longer (or
116          shorter) than desired.  Calculate the difference between the
117          desired and the actual sleep, and adjust the next sleep by
118          that amount.  */
119       limit_data.sleep_adjust = slp - (t1 - t0);
120       /* If sleep_adjust is very large, it's likely due to suspension
121          and not clock inaccuracy.  Don't enforce those.  */
122       if (limit_data.sleep_adjust > 500)
123         limit_data.sleep_adjust = 500;
124       else if (limit_data.sleep_adjust < -500)
125         limit_data.sleep_adjust = -500;
126     }
127
128   limit_data.chunk_bytes = 0;
129   limit_data.chunk_start = ptimer_read (timer);
130 }
131
132 #ifndef MIN
133 # define MIN(i, j) ((i) <= (j) ? (i) : (j))
134 #endif
135
136 /* Write data in BUF to OUT.  However, if *SKIP is non-zero, skip that
137    amount of data and decrease SKIP.  Increment *TOTAL by the amount
138    of data written.  */
139
140 static int
141 write_data (FILE *out, const char *buf, int bufsize, wgint *skip,
142             wgint *written)
143 {
144   if (!out)
145     return 1;
146   if (*skip > bufsize)
147     {
148       *skip -= bufsize;
149       return 1;
150     }
151   if (*skip)
152     {
153       buf += *skip;
154       bufsize -= *skip;
155       *skip = 0;
156       if (bufsize == 0)
157         return 1;
158     }
159
160   fwrite (buf, 1, bufsize, out);
161   *written += bufsize;
162
163   /* Immediately flush the downloaded data.  This should not hinder
164      performance: fast downloads will arrive in large 16K chunks
165      (which stdio would write out immediately anyway), and slow
166      downloads wouldn't be limited by disk speed.  */
167   fflush (out);
168   return !ferror (out);
169 }
170
171 /* Read the contents of file descriptor FD until it the connection
172    terminates or a read error occurs.  The data is read in portions of
173    up to 16K and written to OUT as it arrives.  If opt.verbose is set,
174    the progress is shown.
175
176    TOREAD is the amount of data expected to arrive, normally only used
177    by the progress gauge.
178
179    STARTPOS is the position from which the download starts, used by
180    the progress gauge.  If QTYREAD is non-NULL, the value it points to
181    is incremented by the amount of data read from the network.  If
182    QTYWRITTEN is non-NULL, the value it points to is incremented by
183    the amount of data written to disk.  The time it took to download
184    the data (in milliseconds) is stored to ELAPSED.
185
186    The function exits and returns the amount of data read.  In case of
187    error while reading data, -1 is returned.  In case of error while
188    writing data, -2 is returned.  */
189
190 int
191 fd_read_body (int fd, FILE *out, wgint toread, wgint startpos,
192               wgint *qtyread, wgint *qtywritten, double *elapsed, int flags)
193 {
194   int ret = 0;
195
196   static char dlbuf[16384];
197   int dlbufsize = sizeof (dlbuf);
198
199   struct ptimer *timer = NULL;
200   double last_successful_read_tm = 0;
201
202   /* The progress gauge, set according to the user preferences. */
203   void *progress = NULL;
204
205   /* Non-zero if the progress gauge is interactive, i.e. if it can
206      continually update the display.  When true, smaller timeout
207      values are used so that the gauge can update the display when
208      data arrives slowly. */
209   bool progress_interactive = false;
210
211   bool exact = !!(flags & rb_read_exactly);
212   wgint skip = 0;
213
214   /* How much data we've read/written.  */
215   wgint sum_read = 0;
216   wgint sum_written = 0;
217
218   if (flags & rb_skip_startpos)
219     skip = startpos;
220
221   if (opt.verbose)
222     {
223       /* If we're skipping STARTPOS bytes, pass 0 as the INITIAL
224          argument to progress_create because the indicator doesn't
225          (yet) know about "skipping" data.  */
226       progress = progress_create (skip ? 0 : startpos, startpos + toread);
227       progress_interactive = progress_interactive_p (progress);
228     }
229
230   if (opt.limit_rate)
231     limit_bandwidth_reset ();
232
233   /* A timer is needed for tracking progress, for throttling, and for
234      tracking elapsed time.  If either of these are requested, start
235      the timer.  */
236   if (progress || opt.limit_rate || elapsed)
237     {
238       timer = ptimer_new ();
239       last_successful_read_tm = 0;
240     }
241
242   /* Use a smaller buffer for low requested bandwidths.  For example,
243      with --limit-rate=2k, it doesn't make sense to slurp in 16K of
244      data and then sleep for 8s.  With buffer size equal to the limit,
245      we never have to sleep for more than one second.  */
246   if (opt.limit_rate && opt.limit_rate < dlbufsize)
247     dlbufsize = opt.limit_rate;
248
249   /* Read from FD while there is data to read.  Normally toread==0
250      means that it is unknown how much data is to arrive.  However, if
251      EXACT is set, then toread==0 means what it says: that no data
252      should be read.  */
253   while (!exact || (sum_read < toread))
254     {
255       int rdsize = exact ? MIN (toread - sum_read, dlbufsize) : dlbufsize;
256       double tmout = opt.read_timeout;
257       if (progress_interactive)
258         {
259           /* For interactive progress gauges, always specify a ~1s
260              timeout, so that the gauge can be updated regularly even
261              when the data arrives very slowly or stalls.  */
262           tmout = 0.95;
263           if (opt.read_timeout)
264             {
265               double waittm;
266               waittm = (ptimer_read (timer) - last_successful_read_tm) / 1000;
267               if (waittm + tmout > opt.read_timeout)
268                 {
269                   /* Don't let total idle time exceed read timeout. */
270                   tmout = opt.read_timeout - waittm;
271                   if (tmout < 0)
272                     {
273                       /* We've already exceeded the timeout. */
274                       ret = -1, errno = ETIMEDOUT;
275                       break;
276                     }
277                 }
278             }
279         }
280       ret = fd_read (fd, dlbuf, rdsize, tmout);
281
282       if (progress_interactive && ret < 0 && errno == ETIMEDOUT)
283         ret = 0;                /* interactive timeout, handled above */
284       else if (ret <= 0)
285         break;                  /* EOF or read error */
286
287       if (progress || opt.limit_rate)
288         {
289           ptimer_measure (timer);
290           if (ret > 0)
291             last_successful_read_tm = ptimer_read (timer);
292         }
293
294       if (ret > 0)
295         {
296           sum_read += ret;
297           if (!write_data (out, dlbuf, ret, &skip, &sum_written))
298             {
299               ret = -2;
300               goto out;
301             }
302         }
303
304       if (opt.limit_rate)
305         limit_bandwidth (ret, timer);
306
307       if (progress)
308         progress_update (progress, ret, ptimer_read (timer));
309 #ifdef WINDOWS
310       if (toread > 0 && !opt.quiet)
311         ws_percenttitle (100.0 *
312                          (startpos + sum_read) / (startpos + toread));
313 #endif
314     }
315   if (ret < -1)
316     ret = -1;
317
318  out:
319   if (progress)
320     progress_finish (progress, ptimer_read (timer));
321
322   if (elapsed)
323     *elapsed = ptimer_read (timer);
324   if (timer)
325     ptimer_destroy (timer);
326
327   if (qtyread)
328     *qtyread += sum_read;
329   if (qtywritten)
330     *qtywritten += sum_written;
331
332   return ret;
333 }
334 \f
335 /* Read a hunk of data from FD, up until a terminator.  The terminator
336    is whatever the TERMINATOR function determines it to be; for
337    example, it can be a line of data, or the head of an HTTP response.
338    The function returns the data read allocated with malloc.
339
340    In case of error, NULL is returned.  In case of EOF and no data
341    read, NULL is returned and errno set to 0.  In case of EOF with
342    data having been read, the data is returned, but it will
343    (obviously) not contain the terminator.
344
345    The idea is to be able to read a line of input, or otherwise a hunk
346    of text, such as the head of an HTTP request, without crossing the
347    boundary, so that the next call to fd_read etc. reads the data
348    after the hunk.  To achieve that, this function does the following:
349
350    1. Peek at available data.
351
352    2. Determine whether the peeked data, along with the previously
353       read data, includes the terminator.
354
355       2a. If yes, read the data until the end of the terminator, and
356           exit.
357
358       2b. If no, read the peeked data and goto 1.
359
360    The function is careful to assume as little as possible about the
361    implementation of peeking.  For example, every peek is followed by
362    a read.  If the read returns a different amount of data, the
363    process is retried until all data arrives safely.
364
365    SIZEHINT is the buffer size sufficient to hold all the data in the
366    typical case (it is used as the initial buffer size).  MAXSIZE is
367    the maximum amount of memory this function is allowed to allocate,
368    or 0 if no upper limit is to be enforced.
369
370    This function should be used as a building block for other
371    functions -- see fd_read_line as a simple example.  */
372
373 char *
374 fd_read_hunk (int fd, hunk_terminator_t terminator, long sizehint, long maxsize)
375 {
376   long bufsize = sizehint;
377   char *hunk = xmalloc (bufsize);
378   int tail = 0;                 /* tail position in HUNK */
379
380   assert (maxsize >= bufsize);
381
382   while (1)
383     {
384       const char *end;
385       int pklen, rdlen, remain;
386
387       /* First, peek at the available data. */
388
389       pklen = fd_peek (fd, hunk + tail, bufsize - 1 - tail, -1);
390       if (pklen < 0)
391         {
392           xfree (hunk);
393           return NULL;
394         }
395       end = terminator (hunk, tail, pklen);
396       if (end)
397         {
398           /* The data contains the terminator: we'll drain the data up
399              to the end of the terminator.  */
400           remain = end - (hunk + tail);
401           if (remain == 0)
402             {
403               /* No more data needs to be read. */
404               hunk[tail] = '\0';
405               return hunk;
406             }
407           if (bufsize - 1 < tail + remain)
408             {
409               bufsize = tail + remain + 1;
410               hunk = xrealloc (hunk, bufsize);
411             }
412         }
413       else
414         /* No terminator: simply read the data we know is (or should
415            be) available.  */
416         remain = pklen;
417
418       /* Now, read the data.  Note that we make no assumptions about
419          how much data we'll get.  (Some TCP stacks are notorious for
420          read returning less data than the previous MSG_PEEK.)  */
421
422       rdlen = fd_read (fd, hunk + tail, remain, 0);
423       if (rdlen < 0)
424         {
425           xfree_null (hunk);
426           return NULL;
427         }
428       tail += rdlen;
429       hunk[tail] = '\0';
430
431       if (rdlen == 0)
432         {
433           if (tail == 0)
434             {
435               /* EOF without anything having been read */
436               xfree (hunk);
437               errno = 0;
438               return NULL;
439             }
440           else
441             /* EOF seen: return the data we've read. */
442             return hunk;
443         }
444       if (end && rdlen == remain)
445         /* The terminator was seen and the remaining data drained --
446            we got what we came for.  */
447         return hunk;
448
449       /* Keep looping until all the data arrives. */
450
451       if (tail == bufsize - 1)
452         {
453           /* Double the buffer size, but refuse to allocate more than
454              MAXSIZE bytes.  */
455           if (maxsize && bufsize >= maxsize)
456             {
457               xfree (hunk);
458               errno = ENOMEM;
459               return NULL;
460             }
461           bufsize <<= 1;
462           if (maxsize && bufsize > maxsize)
463             bufsize = maxsize;
464           hunk = xrealloc (hunk, bufsize);
465         }
466     }
467 }
468
469 static const char *
470 line_terminator (const char *hunk, int oldlen, int peeklen)
471 {
472   const char *p = memchr (hunk + oldlen, '\n', peeklen);
473   if (p)
474     /* p+1 because we want the line to include '\n' */
475     return p + 1;
476   return NULL;
477 }
478
479 /* The maximum size of the single line we agree to accept.  This is
480    not meant to impose an arbitrary limit, but to protect the user
481    from Wget slurping up available memory upon encountering malicious
482    or buggy server output.  Define it to 0 to remove the limit.  */
483 #define FD_READ_LINE_MAX 4096
484
485 /* Read one line from FD and return it.  The line is allocated using
486    malloc, but is never larger than FD_READ_LINE_MAX.
487
488    If an error occurs, or if no data can be read, NULL is returned.
489    In the former case errno indicates the error condition, and in the
490    latter case, errno is NULL.  */
491
492 char *
493 fd_read_line (int fd)
494 {
495   return fd_read_hunk (fd, line_terminator, 128, FD_READ_LINE_MAX);
496 }
497 \f
498 /* Return a printed representation of the download rate, as
499    appropriate for the speed.  If PAD is true, strings will be padded
500    to the width of 7 characters (xxxx.xx).  */
501 char *
502 retr_rate (wgint bytes, double msecs, bool pad)
503 {
504   static char res[20];
505   static const char *rate_names[] = {"B/s", "KB/s", "MB/s", "GB/s" };
506   int units = 0;
507
508   double dlrate = calc_rate (bytes, msecs, &units);
509   sprintf (res, pad ? "%7.2f %s" : "%.2f %s", dlrate, rate_names[units]);
510
511   return res;
512 }
513
514 /* Calculate the download rate and trim it as appropriate for the
515    speed.  Appropriate means that if rate is greater than 1K/s,
516    kilobytes are used, and if rate is greater than 1MB/s, megabytes
517    are used.
518
519    UNITS is zero for B/s, one for KB/s, two for MB/s, and three for
520    GB/s.  */
521 double
522 calc_rate (wgint bytes, double msecs, int *units)
523 {
524   double dlrate;
525
526   assert (msecs >= 0);
527   assert (bytes >= 0);
528
529   if (msecs == 0)
530     /* If elapsed time is exactly zero, it means we're under the
531        resolution of the timer.  This can easily happen on systems
532        that use time() for the timer.  Since the interval lies between
533        0 and the timer's resolution, assume half the resolution.  */
534     msecs = ptimer_resolution () / 2.0;
535
536   dlrate = 1000.0 * bytes / msecs;
537   if (dlrate < 1024.0)
538     *units = 0;
539   else if (dlrate < 1024.0 * 1024.0)
540     *units = 1, dlrate /= 1024.0;
541   else if (dlrate < 1024.0 * 1024.0 * 1024.0)
542     *units = 2, dlrate /= (1024.0 * 1024.0);
543   else
544     /* Maybe someone will need this, one day. */
545     *units = 3, dlrate /= (1024.0 * 1024.0 * 1024.0);
546
547   return dlrate;
548 }
549 \f
550 /* Maximum number of allowed redirections.  20 was chosen as a
551    "reasonable" value, which is low enough to not cause havoc, yet
552    high enough to guarantee that normal retrievals will not be hurt by
553    the check.  */
554
555 #define MAX_REDIRECTIONS 20
556
557 #define SUSPEND_POST_DATA do {                  \
558   post_data_suspended = true;                   \
559   saved_post_data = opt.post_data;              \
560   saved_post_file_name = opt.post_file_name;    \
561   opt.post_data = NULL;                         \
562   opt.post_file_name = NULL;                    \
563 } while (0)
564
565 #define RESTORE_POST_DATA do {                          \
566   if (post_data_suspended)                              \
567     {                                                   \
568       opt.post_data = saved_post_data;                  \
569       opt.post_file_name = saved_post_file_name;        \
570       post_data_suspended = false;                      \
571     }                                                   \
572 } while (0)
573
574 static char *getproxy (struct url *);
575
576 /* Retrieve the given URL.  Decides which loop to call -- HTTP, FTP,
577    FTP, proxy, etc.  */
578
579 /* #### This function should be rewritten so it doesn't return from
580    multiple points. */
581
582 uerr_t
583 retrieve_url (const char *origurl, char **file, char **newloc,
584               const char *refurl, int *dt)
585 {
586   uerr_t result;
587   char *url;
588   bool location_changed;
589   int dummy;
590   char *mynewloc, *proxy;
591   struct url *u, *proxy_url;
592   int up_error_code;            /* url parse error code */
593   char *local_file;
594   int redirection_count = 0;
595
596   bool post_data_suspended = false;
597   char *saved_post_data = NULL;
598   char *saved_post_file_name = NULL;
599
600   /* If dt is NULL, use local storage.  */
601   if (!dt)
602     {
603       dt = &dummy;
604       dummy = 0;
605     }
606   url = xstrdup (origurl);
607   if (newloc)
608     *newloc = NULL;
609   if (file)
610     *file = NULL;
611
612   u = url_parse (url, &up_error_code);
613   if (!u)
614     {
615       logprintf (LOG_NOTQUIET, "%s: %s.\n", url, url_error (up_error_code));
616       xfree (url);
617       return URLERROR;
618     }
619
620   if (!refurl)
621     refurl = opt.referer;
622
623  redirected:
624
625   result = NOCONERROR;
626   mynewloc = NULL;
627   local_file = NULL;
628   proxy_url = NULL;
629
630   proxy = getproxy (u);
631   if (proxy)
632     {
633       /* Parse the proxy URL.  */
634       proxy_url = url_parse (proxy, &up_error_code);
635       if (!proxy_url)
636         {
637           logprintf (LOG_NOTQUIET, _("Error parsing proxy URL %s: %s.\n"),
638                      proxy, url_error (up_error_code));
639           xfree (url);
640           RESTORE_POST_DATA;
641           return PROXERR;
642         }
643       if (proxy_url->scheme != SCHEME_HTTP && proxy_url->scheme != u->scheme)
644         {
645           logprintf (LOG_NOTQUIET, _("Error in proxy URL %s: Must be HTTP.\n"), proxy);
646           url_free (proxy_url);
647           xfree (url);
648           RESTORE_POST_DATA;
649           return PROXERR;
650         }
651     }
652
653   if (u->scheme == SCHEME_HTTP
654 #ifdef HAVE_SSL
655       || u->scheme == SCHEME_HTTPS
656 #endif
657       || (proxy_url && proxy_url->scheme == SCHEME_HTTP))
658     {
659       result = http_loop (u, &mynewloc, &local_file, refurl, dt, proxy_url);
660     }
661   else if (u->scheme == SCHEME_FTP)
662     {
663       /* If this is a redirection, we must not allow recursive FTP
664          retrieval, so we save recursion to oldrec, and restore it
665          later.  */
666       bool oldrec = opt.recursive;
667       if (redirection_count)
668         opt.recursive = false;
669       result = ftp_loop (u, dt, proxy_url);
670       opt.recursive = oldrec;
671
672       /* There is a possibility of having HTTP being redirected to
673          FTP.  In these cases we must decide whether the text is HTML
674          according to the suffix.  The HTML suffixes are `.html',
675          `.htm' and a few others, case-insensitive.  */
676       if (redirection_count && local_file && u->scheme == SCHEME_FTP)
677         {
678           if (has_html_suffix_p (local_file))
679             *dt |= TEXTHTML;
680         }
681     }
682
683   if (proxy_url)
684     {
685       url_free (proxy_url);
686       proxy_url = NULL;
687     }
688
689   location_changed = (result == NEWLOCATION);
690   if (location_changed)
691     {
692       char *construced_newloc;
693       struct url *newloc_parsed;
694
695       assert (mynewloc != NULL);
696
697       if (local_file)
698         xfree (local_file);
699
700       /* The HTTP specs only allow absolute URLs to appear in
701          redirects, but a ton of boneheaded webservers and CGIs out
702          there break the rules and use relative URLs, and popular
703          browsers are lenient about this, so wget should be too. */
704       construced_newloc = uri_merge (url, mynewloc);
705       xfree (mynewloc);
706       mynewloc = construced_newloc;
707
708       /* Now, see if this new location makes sense. */
709       newloc_parsed = url_parse (mynewloc, &up_error_code);
710       if (!newloc_parsed)
711         {
712           logprintf (LOG_NOTQUIET, "%s: %s.\n", escnonprint_uri (mynewloc),
713                      url_error (up_error_code));
714           url_free (u);
715           xfree (url);
716           xfree (mynewloc);
717           RESTORE_POST_DATA;
718           return result;
719         }
720
721       /* Now mynewloc will become newloc_parsed->url, because if the
722          Location contained relative paths like .././something, we
723          don't want that propagating as url.  */
724       xfree (mynewloc);
725       mynewloc = xstrdup (newloc_parsed->url);
726
727       /* Check for max. number of redirections.  */
728       if (++redirection_count > MAX_REDIRECTIONS)
729         {
730           logprintf (LOG_NOTQUIET, _("%d redirections exceeded.\n"),
731                      MAX_REDIRECTIONS);
732           url_free (newloc_parsed);
733           url_free (u);
734           xfree (url);
735           xfree (mynewloc);
736           RESTORE_POST_DATA;
737           return WRONGCODE;
738         }
739
740       xfree (url);
741       url = mynewloc;
742       url_free (u);
743       u = newloc_parsed;
744
745       /* If we're being redirected from POST, we don't want to POST
746          again.  Many requests answer POST with a redirection to an
747          index page; that redirection is clearly a GET.  We "suspend"
748          POST data for the duration of the redirections, and restore
749          it when we're done. */
750       if (!post_data_suspended)
751         SUSPEND_POST_DATA;
752
753       goto redirected;
754     }
755
756   if (local_file)
757     {
758       if (*dt & RETROKF)
759         {
760           register_download (u->url, local_file);
761           if (redirection_count && 0 != strcmp (origurl, u->url))
762             register_redirection (origurl, u->url);
763           if (*dt & TEXTHTML)
764             register_html (u->url, local_file);
765         }
766     }
767
768   if (file)
769     *file = local_file ? local_file : NULL;
770   else
771     xfree_null (local_file);
772
773   url_free (u);
774
775   if (redirection_count)
776     {
777       if (newloc)
778         *newloc = url;
779       else
780         xfree (url);
781     }
782   else
783     {
784       if (newloc)
785         *newloc = NULL;
786       xfree (url);
787     }
788
789   RESTORE_POST_DATA;
790
791   return result;
792 }
793
794 /* Find the URLs in the file and call retrieve_url() for each of them.
795    If HTML is true, treat the file as HTML, and construct the URLs
796    accordingly.
797
798    If opt.recursive is set, call retrieve_tree() for each file.  */
799
800 uerr_t
801 retrieve_from_file (const char *file, bool html, int *count)
802 {
803   uerr_t status;
804   struct urlpos *url_list, *cur_url;
805
806   url_list = (html ? get_urls_html (file, NULL, NULL)
807               : get_urls_file (file));
808   status = RETROK;             /* Suppose everything is OK.  */
809   *count = 0;                  /* Reset the URL count.  */
810
811   for (cur_url = url_list; cur_url; cur_url = cur_url->next, ++*count)
812     {
813       char *filename = NULL, *new_file = NULL;
814       int dt;
815
816       if (cur_url->ignore_when_downloading)
817         continue;
818
819       if (opt.quota && total_downloaded_bytes > opt.quota)
820         {
821           status = QUOTEXC;
822           break;
823         }
824       if ((opt.recursive || opt.page_requisites)
825           && cur_url->url->scheme != SCHEME_FTP)
826         status = retrieve_tree (cur_url->url->url);
827       else
828         status = retrieve_url (cur_url->url->url, &filename, &new_file, NULL, &dt);
829
830       if (filename && opt.delete_after && file_exists_p (filename))
831         {
832           DEBUGP (("\
833 Removing file due to --delete-after in retrieve_from_file():\n"));
834           logprintf (LOG_VERBOSE, _("Removing %s.\n"), filename);
835           if (unlink (filename))
836             logprintf (LOG_NOTQUIET, "unlink: %s\n", strerror (errno));
837           dt &= ~RETROKF;
838         }
839
840       xfree_null (new_file);
841       xfree_null (filename);
842     }
843
844   /* Free the linked list of URL-s.  */
845   free_urlpos (url_list);
846
847   return status;
848 }
849
850 /* Print `giving up', or `retrying', depending on the impending
851    action.  N1 and N2 are the attempt number and the attempt limit.  */
852 void
853 printwhat (int n1, int n2)
854 {
855   logputs (LOG_VERBOSE, (n1 == n2) ? _("Giving up.\n\n") : _("Retrying.\n\n"));
856 }
857
858 /* If opt.wait or opt.waitretry are specified, and if certain
859    conditions are met, sleep the appropriate number of seconds.  See
860    the documentation of --wait and --waitretry for more information.
861
862    COUNT is the count of current retrieval, beginning with 1. */
863
864 void
865 sleep_between_retrievals (int count)
866 {
867   static bool first_retrieval = true;
868
869   if (first_retrieval)
870     {
871       /* Don't sleep before the very first retrieval. */
872       first_retrieval = false;
873       return;
874     }
875
876   if (opt.waitretry && count > 1)
877     {
878       /* If opt.waitretry is specified and this is a retry, wait for
879          COUNT-1 number of seconds, or for opt.waitretry seconds.  */
880       if (count <= opt.waitretry)
881         xsleep (count - 1);
882       else
883         xsleep (opt.waitretry);
884     }
885   else if (opt.wait)
886     {
887       if (!opt.random_wait || count > 1)
888         /* If random-wait is not specified, or if we are sleeping
889            between retries of the same download, sleep the fixed
890            interval.  */
891         xsleep (opt.wait);
892       else
893         {
894           /* Sleep a random amount of time averaging in opt.wait
895              seconds.  The sleeping amount ranges from 0 to
896              opt.wait*2, inclusive.  */
897           double waitsecs = 2 * opt.wait * random_float ();
898           DEBUGP (("sleep_between_retrievals: avg=%f,sleep=%f\n",
899                    opt.wait, waitsecs));
900           xsleep (waitsecs);
901         }
902     }
903 }
904
905 /* Free the linked list of urlpos.  */
906 void
907 free_urlpos (struct urlpos *l)
908 {
909   while (l)
910     {
911       struct urlpos *next = l->next;
912       if (l->url)
913         url_free (l->url);
914       xfree_null (l->local_name);
915       xfree (l);
916       l = next;
917     }
918 }
919
920 /* Rotate FNAME opt.backups times */
921 void
922 rotate_backups(const char *fname)
923 {
924   int maxlen = strlen (fname) + 1 + numdigit (opt.backups) + 1;
925   char *from = (char *)alloca (maxlen);
926   char *to = (char *)alloca (maxlen);
927   struct_stat sb;
928   int i;
929
930   if (stat (fname, &sb) == 0)
931     if (S_ISREG (sb.st_mode) == 0)
932       return;
933
934   for (i = opt.backups; i > 1; i--)
935     {
936       sprintf (from, "%s.%d", fname, i - 1);
937       sprintf (to, "%s.%d", fname, i);
938       rename (from, to);
939     }
940
941   sprintf (to, "%s.%d", fname, 1);
942   rename(fname, to);
943 }
944
945 static bool no_proxy_match (const char *, const char **);
946
947 /* Return the URL of the proxy appropriate for url U.  */
948
949 static char *
950 getproxy (struct url *u)
951 {
952   char *proxy = NULL;
953   char *rewritten_url;
954   static char rewritten_storage[1024];
955
956   if (!opt.use_proxy)
957     return NULL;
958   if (!no_proxy_match (u->host, (const char **)opt.no_proxy))
959     return NULL;
960
961   switch (u->scheme)
962     {
963     case SCHEME_HTTP:
964       proxy = opt.http_proxy ? opt.http_proxy : getenv ("http_proxy");
965       break;
966 #ifdef HAVE_SSL
967     case SCHEME_HTTPS:
968       proxy = opt.https_proxy ? opt.https_proxy : getenv ("https_proxy");
969       break;
970 #endif
971     case SCHEME_FTP:
972       proxy = opt.ftp_proxy ? opt.ftp_proxy : getenv ("ftp_proxy");
973       break;
974     case SCHEME_INVALID:
975       break;
976     }
977   if (!proxy || !*proxy)
978     return NULL;
979
980   /* Handle shorthands.  `rewritten_storage' is a kludge to allow
981      getproxy() to return static storage. */
982   rewritten_url = rewrite_shorthand_url (proxy);
983   if (rewritten_url)
984     {
985       strncpy (rewritten_storage, rewritten_url, sizeof (rewritten_storage));
986       rewritten_storage[sizeof (rewritten_storage) - 1] = '\0';
987       proxy = rewritten_storage;
988     }
989
990   return proxy;
991 }
992
993 /* Should a host be accessed through proxy, concerning no_proxy?  */
994 static bool
995 no_proxy_match (const char *host, const char **no_proxy)
996 {
997   if (!no_proxy)
998     return true;
999   else
1000     return !sufmatch (no_proxy, host);
1001 }