Merge pull request #105 from cgeorges82/master

fix for issue #97. Also, this fixes cmake builds for other platforms.
pull/1/head
Christian Beier 6 years ago
commit ddabcb67a6
  1. 11
      CMakeLists.txt
  2. 19
      libvncclient/tls_gnutls.c
  3. 21
      rfb/rfbconfig.h.cmake

@ -106,10 +106,12 @@ if(GNUTLS_FOUND)
option(LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (gnutls)" ON)
set(WEBSOCKET_LIBRARIES ${RESOLV_LIB} ${GNUTLS_LIBRARIES})
set(WSSRCS ${LIBVNCSERVER_DIR}/rfbssl_gnutls ${LIBVNCSERVER_DIR}/rfbcrypto_gnutls)
include_directories(${GNUTLS_INCLUDE_DIR})
elseif(OPENSSL_FOUND)
option(LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (openssl)" ON)
set(WEBSOCKET_LIBRARIES ${RESOLV_LIB} ${OPENSSL_LIBRARIES})
set(WSSRCS ${LIBVNCSERVER_DIR}/rfbssl_openssl ${LIBVNCSERVER_DIR}/rfbcrypto_openssl)
include_directories(${OPENSSL_INCLUDE_DIR})
else()
option(LIBVNCSERVER_WITH_WEBSOCKETS "Build with websockets support (no ssl)" ON)
set(WEBSOCKET_LIBRARIES ${RESOLV_LIB})
@ -135,12 +137,21 @@ check_include_file("sys/wait.h" LIBVNCSERVER_HAVE_SYS_WAIT_H)
check_include_file("unistd.h" LIBVNCSERVER_HAVE_UNISTD_H)
# headers needed for check_type_size()
check_include_file("vfork.h" LIBVNCSERVER_HAVE_VFORK_H)
check_include_file("ws2tcpip.h" LIBVNCSERVER_HAVE_WS2TCPIP_H)
check_include_file("arpa/inet.h" HAVE_ARPA_INET_H)
check_include_file("stdint.h" HAVE_STDINT_H)
check_include_file("stddef.h" HAVE_STDDEF_H)
check_include_file("sys/types.h" HAVE_SYS_TYPES_H)
check_function_exists(gettimeofday LIBVNCSERVER_HAVE_GETTIMEOFDAY)
check_function_exists(vfork LIBVNCSERVER_HAVE_VFORK)
check_function_exists(vprintf LIBVNCSERVER_HAVE_VPRINTF)
if(LIBVNCSERVER_HAVE_WS2TCPIP_H AND LIBVNCSERVER_HAVE_VPRINTF)
option(LIBVNCSERVER_IPv6 "Enable IPv6 Support" ON)
endif()
if(CMAKE_USE_PTHREADS_INIT)
set(LIBVNCSERVER_HAVE_LIBPTHREAD 1)

@ -67,9 +67,20 @@ InitializeTLS(void)
* libvncclient are linked to different versions of msvcrt.dll.
*/
#ifdef WIN32
static void WSAtoTLSErrno()
static void WSAtoTLSErrno(gnutls_session_t* session)
{
switch(WSAGetLastError()) {
#if (GNUTLS_VERSION_NUMBER >= 0x029901)
case WSAEWOULDBLOCK:
gnutls_transport_set_errno(session, EAGAIN);
break;
case WSAEINTR:
gnutls_transport_set_errno(session, EINTR);
break;
default:
gnutls_transport_set_errno(session, EIO);
break;
#else
case WSAEWOULDBLOCK:
gnutls_transport_set_global_errno(EAGAIN);
break;
@ -79,11 +90,11 @@ static void WSAtoTLSErrno()
default:
gnutls_transport_set_global_errno(EIO);
break;
#endif
}
}
#endif
static ssize_t
PushTLS(gnutls_transport_ptr_t transport, const void *data, size_t len)
{
@ -96,7 +107,7 @@ PushTLS(gnutls_transport_ptr_t transport, const void *data, size_t len)
if (ret < 0)
{
#ifdef WIN32
WSAtoTLSErrno();
WSAtoTLSErrno((gnutls_session_t*)&client->tlsSession);
#endif
if (errno == EINTR) continue;
return -1;
@ -118,7 +129,7 @@ PullTLS(gnutls_transport_ptr_t transport, void *data, size_t len)
if (ret < 0)
{
#ifdef WIN32
WSAtoTLSErrno();
WSAtoTLSErrno((gnutls_session_t*)&client->tlsSession);
#endif
if (errno == EINTR) continue;
return -1;

@ -54,6 +54,27 @@
/* Define to 1 if you have the <unistd.h> header file. */
#cmakedefine LIBVNCSERVER_HAVE_UNISTD_H 1
/* Define to 1 if you have the `vfork' function. */
#cmakedefine LIBVNCSERVER_HAVE_VFORK 1
/* Define to 1 if you have the <vfork.h> header file. */
#cmakedefine LIBVNCSERVER_HAVE_VFORK_H 1
/* Define to 1 if you have the `vprintf' function. */
#cmakedefine LIBVNCSERVER_HAVE_VPRINTF 1
/* Define to 1 if `fork' works. */
#cmakedefine LIBVNCSERVER_HAVE_WORKING_FORK 1
/* Define to 1 if `vfork' works. */
#cmakedefine LIBVNCSERVER_HAVE_WORKING_VFORK 1
/* Define to 1 if you have the <ws2tcpip.h> header file. */
#cmakedefine LIBVNCSERVER_HAVE_WS2TCPIP_H 1
/* Enable IPv6 support */
#cmakedefine LIBVNCSERVER_IPv6 1
/* Need a typedef for in_addr_t */
#cmakedefine LIBVNCSERVER_NEED_INADDR_T 1

Loading…
Cancel
Save