confused with actual gnutls functions -- such as the gnutls_read
preprocessor macro. */
-static gnutls_certificate_credentials credentials;
+static gnutls_certificate_credentials_t credentials;
bool
-ssl_init ()
+ssl_init (void)
{
/* Becomes true if GnuTLS is initialized. */
static bool ssl_initialized = false;
struct wgnutls_transport_context
{
- gnutls_session session; /* GnuTLS session handle */
+ gnutls_session_t session; /* GnuTLS session handle */
int last_error; /* last error returned by read/write/... */
/* Since GnuTLS doesn't support the equivalent to recv(...,
int flags = 0;
#endif
int ret = 0;
- struct ptimer *timer;
+ struct ptimer *timer = NULL;
struct wgnutls_transport_context *ctx = arg;
int timed_out = 0;
flags = fcntl (fd, F_GETFL, 0);
if (flags < 0)
return flags;
+ if (fcntl (fd, F_SETFL, flags | O_NONBLOCK))
+ return -1;
+#else
+ /* XXX: Assume it was blocking before. */
+ const int one = 1;
+ if (ioctl (fd, FIONBIO, &one) < 0)
+ return -1;
#endif
+
timer = ptimer_new ();
- if (timer == 0)
+ if (timer == NULL)
return -1;
}
do
{
- double next_timeout;
- if (timeout > 0.0)
+ double next_timeout = 0;
+ if (timeout)
{
next_timeout = timeout - ptimer_measure (timer);
- if (next_timeout < 0.0)
+ if (next_timeout < 0)
break;
}
if (timeout == 0 || gnutls_record_check_pending (ctx->session)
|| select_fd (fd, next_timeout, WAIT_FOR_READ))
{
- if (timeout)
- {
-#ifdef F_GETFL
- if (fcntl (fd, F_SETFL, flags | O_NONBLOCK))
- break;
-#else
- /* XXX: Assume it was blocking before. */
- const int one = 1;
- if (ioctl (fd, FIONBIO, &one) < 0)
- break;
-#endif
- }
-
ret = gnutls_record_recv (ctx->session, buf, bufsize);
-
- if (timeout)
- {
-#ifdef F_GETFL
- if (fcntl (fd, F_SETFL, flags) < 0)
- break;
-#else
- const int zero = 0;
- if (ioctl (fd, FIONBIO, &zero) < 0)
- break;
-#endif
- }
+ timed_out = timeout && ptimer_measure (timer) >= timeout;
}
-
- timed_out = timeout && ptimer_measure (timer) >= timeout;
}
while (ret == GNUTLS_E_INTERRUPTED || (ret == GNUTLS_E_AGAIN && !timed_out));
if (timeout)
- ptimer_destroy (timer);
+ {
+ ptimer_destroy (timer);
+
+#ifdef F_GETFL
+ if (fcntl (fd, F_SETFL, flags) < 0)
+ return -1;
+#else
+ const int zero = 0;
+ if (ioctl (fd, FIONBIO, &zero) < 0)
+ return -1;
+#endif
- if (timeout && timed_out && ret == GNUTLS_E_AGAIN)
- errno = ETIMEDOUT;
+ if (timed_out && ret == GNUTLS_E_AGAIN)
+ errno = ETIMEDOUT;
+ }
return ret;
}
ssl_connect_wget (int fd, const char *hostname)
{
struct wgnutls_transport_context *ctx;
- gnutls_session session;
+ gnutls_session_t session;
int err;
gnutls_init (&session, GNUTLS_CLIENT);
#ifndef FD_TO_SOCKET
# define FD_TO_SOCKET(X) (X)
#endif
- gnutls_transport_set_ptr (session, (gnutls_transport_ptr) FD_TO_SOCKET (fd));
+ gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) FD_TO_SOCKET (fd));
err = 0;
#if HAVE_GNUTLS_PRIORITY_SET_DIRECT
if (gnutls_certificate_type_get (ctx->session) == GNUTLS_CRT_X509)
{
time_t now = time (NULL);
- gnutls_x509_crt cert;
- const gnutls_datum *cert_list;
+ gnutls_x509_crt_t cert;
+ const gnutls_datum_t *cert_list;
unsigned int cert_list_size;
if ((err = gnutls_x509_crt_init (&cert)) < 0)