Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add GnuTLS recv_timeout function for MinGW
Fixes DTLS connectivity.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
  • Loading branch information
David Woodhouse authored and David Woodhouse committed Feb 6, 2014
1 parent 7557d03 commit 6a6a7a1
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 0 deletions.
20 changes: 20 additions & 0 deletions compat.c
Expand Up @@ -248,6 +248,26 @@ void openconnect__win32_sock_init()
}
}
#ifdef OPENCONNECT_GNUTLS
int openconnect__win32_sock_poll(gnutls_transport_ptr_t ptr, unsigned int ms)
{
fd_set rfds;
struct timeval tv;
int fd = (int)(long)ptr;

FD_ZERO(&rfds);
FD_SET(fd, &rfds);

tv.tv_sec = 0;
tv.tv_usec = ms * 1000;

while(tv.tv_usec >= 1000000) {
tv.tv_usec -= 1000000;
tv.tv_sec++;
}

return select(fd+1, &rfds, NULL, NULL, &tv);
}

ssize_t openconnect__win32_sock_read(gnutls_transport_ptr_t ptr, void *data, size_t size)
{
return recv((long)ptr, data, size, 0);
Expand Down
1 change: 1 addition & 0 deletions dtls.c
Expand Up @@ -379,6 +379,7 @@ 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_timeout_function(dtls_ssl, openconnect__win32_sock_poll);
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);
Expand Down
1 change: 1 addition & 0 deletions gnutls.c
Expand Up @@ -1945,6 +1945,7 @@ int openconnect_open_https(struct openconnect_info *vpninfo)
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_timeout_function(vpninfo->https_sess, openconnect__win32_sock_poll);
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);
Expand Down
1 change: 1 addition & 0 deletions openconnect-internal.h
Expand Up @@ -394,6 +394,7 @@ static inline int set_fd_cloexec(int fd)
int openconnect__win32_neterrno();
void openconnect__win32_sock_init();
#ifdef OPENCONNECT_GNUTLS
int openconnect__win32_sock_poll(gnutls_transport_ptr_t ptr, unsigned int ms);
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);
#endif
Expand Down

0 comments on commit 6a6a7a1

Please sign in to comment.