]> sjero.net Git - wget/blobdiff - src/http.c
[svn] Tell OpenSSL to renegotiate automatically (mode SSL_MODE_AUTO_RETRY).
[wget] / src / http.c
index 9b02e37d97879467af8d23c01f7f1c0151ceb71f..3ef8f47b110c5174694adca4024b38848c1b82c7 100644 (file)
@@ -1075,7 +1075,7 @@ struct http_stat
   wgint contlen;               /* expected length */
   wgint restval;               /* the restart value */
   int res;                     /* the result of last read */
-  const char *errstr;          /* error message from read error */
+  char *rderrmsg;              /* error message from read error */
   char *newloc;                        /* new location (redirection) */
   char *remote_time;           /* remote time-stamp string */
   char *error;                 /* textual HTTP error */
@@ -1092,6 +1092,7 @@ free_hstat (struct http_stat *hs)
   xfree_null (hs->newloc);
   xfree_null (hs->remote_time);
   xfree_null (hs->error);
+  xfree_null (hs->rderrmsg);
 
   /* Guard against being called twice. */
   hs->newloc = NULL;
@@ -1213,7 +1214,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
   hs->len = 0;
   hs->contlen = -1;
   hs->res = -1;
-  hs->errstr = "";
+  hs->rderrmsg = NULL;
   hs->newloc = NULL;
   hs->remote_time = NULL;
   hs->error = NULL;
@@ -1485,8 +1486,6 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
          request_free (connreq);
          if (write_error < 0)
            {
-             logprintf (LOG_VERBOSE, _("Failed writing to proxy: %s.\n"),
-                        fd_errstr (sock));
              CLOSE_INVALIDATE (sock);
              return WRITEFAILED;
            }
@@ -1555,8 +1554,6 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
 
   if (write_error < 0)
     {
-      logprintf (LOG_VERBOSE, _("Failed writing HTTP request: %s.\n"),
-                fd_errstr (sock));
       CLOSE_INVALIDATE (sock);
       request_free (req);
       return WRITEFAILED;
@@ -1707,7 +1704,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
     hs->error = xstrdup (_("(no description)"));
   else
     hs->error = xstrdup (message);
-  xfree (message);
+  xfree_null (message);
 
   type = resp_header_strdup (resp, "Content-Type");
   if (type)
@@ -1943,9 +1940,9 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
   else
     fp = output_stream;
 
-  /* #### This confuses the timestamping code that checks for file
-     size.  Maybe we should save some additional information?  */
-  if (opt.save_headers)
+  /* This confuses the timestamping code that checks for file size.
+     #### The timestamping code should be smarter about file size.  */
+  if (opt.save_headers && hs->restval == 0)
     fwrite (head, 1, strlen (head), fp);
 
   /* Now we no longer need to store the response header. */
@@ -1953,7 +1950,10 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
 
   /* Download the request body.  */
   flags = 0;
-  if (keep_alive)
+  if (contlen != -1)
+    /* If content-length is present, read that much; otherwise, read
+       until EOF.  The HTTP spec doesn't require the server to
+       actually close the connection when it's done sending data. */
     flags |= rb_read_exactly;
   if (hs->restval > 0 && contrange == 0)
     /* If the server ignored our range request, instruct fd_read_body
@@ -1970,7 +1970,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
   else
     {
       if (hs->res < 0)
-       hs->errstr = fd_errstr (sock);
+       hs->rderrmsg = xstrdup (fd_errstr (sock));
       CLOSE_INVALIDATE (sock);
     }
 
@@ -2355,9 +2355,7 @@ The sizes do not match (local %s) -- retrieving.\n"),
       if ((tmr != (time_t) (-1))
          && !opt.spider
          && ((hstat.len == hstat.contlen) ||
-             ((hstat.res == 0) &&
-              ((hstat.contlen == -1) ||
-               (hstat.len >= hstat.contlen && !opt.kill_longer)))))
+             ((hstat.res == 0) && (hstat.contlen == -1))))
        {
          /* #### This code repeats in http.c and ftp.c.  Move it to a
              function!  */
@@ -2453,43 +2451,10 @@ The sizes do not match (local %s) -- retrieving.\n"),
              free_hstat (&hstat);
              continue;
            }
-         else if (!opt.kill_longer) /* meaning we got more than expected */
-           {
-             logprintf (LOG_VERBOSE,
-                        _("%s (%s) - `%s' saved [%s/%s]\n\n"),
-                        tms, tmrate, locf,
-                        number_to_static_string (hstat.len),
-                        number_to_static_string (hstat.contlen));
-             logprintf (LOG_NONVERBOSE,
-                        "%s URL:%s [%s/%s] -> \"%s\" [%d]\n",
-                        tms, u->url,
-                        number_to_static_string (hstat.len),
-                        number_to_static_string (hstat.contlen),
-                        locf, count);
-             ++opt.numurls;
-             total_downloaded_bytes += hstat.len;
-
-             /* Remember that we downloaded the file for later ".orig" code. */
-             if (*dt & ADDED_HTML_EXTENSION)
-               downloaded_file(FILE_DOWNLOADED_AND_HTML_EXTENSION_ADDED, locf);
-             else
-               downloaded_file(FILE_DOWNLOADED_NORMALLY, locf);
-             
-             free_hstat (&hstat);
-             xfree_null (dummy);
-             return RETROK;
-           }
-         else                  /* the same, but not accepted */
-           {
-             logprintf (LOG_VERBOSE,
-                        _("%s (%s) - Connection closed at byte %s/%s. "),
-                        tms, tmrate,
-                        number_to_static_string (hstat.len),
-                        number_to_static_string (hstat.contlen));
-             printwhat (count, opt.ntry);
-             free_hstat (&hstat);
-             continue;
-           }
+         else
+           /* Getting here would mean reading more data than
+              requested with content-length, which we never do.  */
+           abort ();
        }
       else                     /* now hstat.res can only be -1 */
        {
@@ -2498,7 +2463,7 @@ The sizes do not match (local %s) -- retrieving.\n"),
              logprintf (LOG_VERBOSE,
                         _("%s (%s) - Read error at byte %s (%s)."),
                         tms, tmrate, number_to_static_string (hstat.len),
-                        hstat.errstr);
+                        hstat.rderrmsg);
              printwhat (count, opt.ntry);
              free_hstat (&hstat);
              continue;
@@ -2510,7 +2475,7 @@ The sizes do not match (local %s) -- retrieving.\n"),
                         tms, tmrate,
                         number_to_static_string (hstat.len),
                         number_to_static_string (hstat.contlen),
-                        hstat.errstr);
+                        hstat.rderrmsg);
              printwhat (count, opt.ntry);
              free_hstat (&hstat);
              continue;