Skip to content

Commit

Permalink
Set GnuTLS push/pull/errno functions on MinGW build
Browse files Browse the repository at this point in the history
Based on a patch from Nikos Mavrogiannopoulos.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Feb 6, 2014
1 parent bd7ae7e commit a19ce0b
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
10 changes: 10 additions & 0 deletions compat.c
Expand Up @@ -238,4 +238,14 @@ int openconnect__win32_neterrno()
default: return EIO;
}
}

ssize_t openconnect__win32_sock_read(gnutls_transport_ptr_t ptr, void *data, size_t size)
{
return recv((long)ptr, data, size, 0);
}

ssize_t openconnect__win32_sock_write(gnutls_transport_ptr_t ptr, const void *data, size_t size)
{
return send((long)ptr, data, size, 0);
}
#endif /* _WIN32 */
6 changes: 6 additions & 0 deletions dtls.c
Expand Up @@ -378,6 +378,12 @@ static int start_dtls_handshake(struct openconnect_info *vpninfo, int dtls_fd)

gnutls_transport_set_ptr(dtls_ssl,
(gnutls_transport_ptr_t)(long) dtls_fd);
#ifdef _WIN32
gnutls_transport_set_pull_function(dtls_ssl, openconnect__win32_sock_read);
gnutls_transport_set_push_function(dtls_ssl, openconnect__win32_sock_write);
gnutls_transport_set_errno_function(dtls_ssl, openconnect__win32_neterrno);
#endif

gnutls_record_disable_padding(dtls_ssl);
master_secret.data = vpninfo->dtls_secret;
master_secret.size = sizeof(vpninfo->dtls_secret);
Expand Down
5 changes: 5 additions & 0 deletions gnutls.c
Expand Up @@ -1944,6 +1944,11 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
gnutls_record_disable_padding(vpninfo->https_sess);
gnutls_credentials_set(vpninfo->https_sess, GNUTLS_CRD_CERTIFICATE, vpninfo->https_cred);
gnutls_transport_set_ptr(vpninfo->https_sess, /* really? */(gnutls_transport_ptr_t)(long) ssl_sock);
#ifdef _WIN32
gnutls_transport_set_pull_function(vpninfo->https_sess, openconnect__win32_sock_read);
gnutls_transport_set_push_function(vpninfo->https_sess, openconnect__win32_sock_write);
gnutls_transport_set_errno_function(vpninfo->https_sess, openconnect__win32_neterrno);
#endif

vpn_progress(vpninfo, PRG_INFO, _("SSL negotiation with %s\n"),
vpninfo->hostname);
Expand Down
2 changes: 2 additions & 0 deletions openconnect-internal.h
Expand Up @@ -372,6 +372,8 @@ int openconnect__inet_aton(const char *cp, struct in_addr *addr);
#ifdef _WIN32
#define neterrno openconnect__win32_neterrno
int openconnect__win32_neterrno();
ssize_t openconnect__win32_sock_read(gnutls_transport_ptr_t ptr, void *data, size_t size);
ssize_t openconnect__win32_sock_write(gnutls_transport_ptr_t ptr, const void *data, size_t size);
#else
#define neterrno() errno
#define closesocket close
Expand Down

0 comments on commit a19ce0b

Please sign in to comment.