1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

gnutls: honor the specified timeout value

* gnutls.c (wgnutls_poll): Honor the specified `timeout' value.
(wgnutls_peek): Likewise.
This commit is contained in:
Tim Ruehsen 2012-05-18 13:23:56 +02:00 committed by Giuseppe Scrivano
parent e93bb4fa28
commit 370f96d36c
2 changed files with 24 additions and 11 deletions

View 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) 2012-05-19 illusionoflife <illusion.of.life92@gmail.com> (tiny change)
* convert.c (register_html,register_css): Fixed functions signature to * convert.c (register_html,register_css): Fixed functions signature to

View File

@ -216,11 +216,11 @@ wgnutls_read_timeout (int fd, char *buf, int bufsize, void *arg, double timeout)
{ {
double next_timeout = 0; double next_timeout = 0;
if (timeout) if (timeout)
{ {
next_timeout = timeout - ptimer_measure (timer); next_timeout = timeout - ptimer_measure (timer);
if (next_timeout < 0) if (next_timeout < 0)
break; break;
} }
ret = GNUTLS_E_AGAIN; ret = GNUTLS_E_AGAIN;
if (timeout == 0 || gnutls_record_check_pending (ctx->session) 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) wgnutls_poll (int fd, double timeout, int wait_for, void *arg)
{ {
struct wgnutls_transport_context *ctx = 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 static int
@ -304,15 +308,19 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
int read = 0; int read = 0;
struct wgnutls_transport_context *ctx = arg; struct wgnutls_transport_context *ctx = arg;
int offset = MIN (bufsize, ctx->peeklen); int offset = MIN (bufsize, ctx->peeklen);
if (ctx->peeklen)
{
memcpy (buf, ctx->peekbuf, offset);
return offset;
}
if (bufsize > sizeof ctx->peekbuf) if (bufsize > sizeof ctx->peekbuf)
bufsize = sizeof ctx->peekbuf; bufsize = sizeof ctx->peekbuf;
if (ctx->peeklen)
memcpy (buf, ctx->peekbuf, offset);
if (bufsize > offset) 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) && select_fd (fd, 0.0, WAIT_FOR_READ) <= 0)
read = 0; read = 0;
else else