]> sjero.net Git - wget/commitdiff
gnutls: honor the specified timeout value
authorTim Ruehsen <tim.ruehsen@gmx.de>
Fri, 18 May 2012 11:23:56 +0000 (13:23 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Mon, 21 May 2012 20:54:41 +0000 (22:54 +0200)
* gnutls.c (wgnutls_poll): Honor the specified `timeout' value.
(wgnutls_peek): Likewise.

src/ChangeLog
src/gnutls.c

index f38047cb37c9e4773cd85164245e1b392b7c9bad..533a39e6e07582e1aa57d4f11d245ed28ab16d0a 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-18  Tim Ruehsen  <tim.ruehsen@gmx.de>
+
+       * gnutls.c (wgnutls_poll): Honor the specified `timeout' value.
+       (wgnutls_peek): Likewise.
+
 2012-05-19  illusionoflife  <illusion.of.life92@gmail.com> (tiny change)
 
        * convert.c (register_html,register_css): Fixed functions signature to
index 9847ab47b20de280a1bf048813d292bce8c9035a..32c6d174548ba2e3ffc69b9168648dd03a10506d 100644 (file)
@@ -216,11 +216,11 @@ wgnutls_read_timeout (int fd, char *buf, int bufsize, void *arg, double timeout)
     {
       double next_timeout = 0;
       if (timeout)
-       {
-         next_timeout = timeout - ptimer_measure (timer);
-         if (next_timeout < 0)
-           break;
-       }
+        {
+          next_timeout = timeout - ptimer_measure (timer);
+          if (next_timeout < 0)
+            break;
+        }
 
       ret = GNUTLS_E_AGAIN;
       if (timeout == 0 || gnutls_record_check_pending (ctx->session)
@@ -294,8 +294,12 @@ static int
 wgnutls_poll (int fd, double timeout, int wait_for, void *arg)
 {
   struct wgnutls_transport_context *ctx = arg;
-  return ctx->peeklen || gnutls_record_check_pending (ctx->session)
-    || select_fd (fd, timeout, wait_for);
+
+  if (timeout)
+    return ctx->peeklen || gnutls_record_check_pending (ctx->session)
+      || select_fd (fd, timeout, wait_for);
+  else
+    return ctx->peeklen || gnutls_record_check_pending (ctx->session);
 }
 
 static int
@@ -304,15 +308,19 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
   int read = 0;
   struct wgnutls_transport_context *ctx = arg;
   int offset = MIN (bufsize, ctx->peeklen);
-  if (bufsize > sizeof ctx->peekbuf)
-    bufsize = sizeof ctx->peekbuf;
 
   if (ctx->peeklen)
-    memcpy (buf, ctx->peekbuf, offset);
+    {
+      memcpy (buf, ctx->peekbuf, offset);
+      return offset;
+    }
+
+  if (bufsize > sizeof ctx->peekbuf)
+    bufsize = sizeof ctx->peekbuf;
 
   if (bufsize > offset)
     {
-      if (gnutls_record_check_pending (ctx->session) <= 0
+      if (opt.read_timeout && gnutls_record_check_pending (ctx->session) == 0
           && select_fd (fd, 0.0, WAIT_FOR_READ) <= 0)
         read = 0;
       else