summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Beier <dontmind@freeshell.org>2016-05-30 12:16:54 +0200
committerChristian Beier <dontmind@freeshell.org>2016-05-30 12:16:54 +0200
commitddabcb67a630d5b8e73cdce6d78f9413b36b742b (patch)
tree6542861c237fc2b29c1b73f339b0fe0e881d2ea8
parent475a2c944731aa5c578f1fc4aba51a3ae0069c2d (diff)
parent6fabf75f9ce7adb565ca4c02d03ba3cccae36759 (diff)
downloadlibtdevnc-ddabcb67a630d5b8e73cdce6d78f9413b36b742b.tar.gz
libtdevnc-ddabcb67a630d5b8e73cdce6d78f9413b36b742b.zip
Merge pull request #105 from cgeorges82/master
fix for issue #97. Also, this fixes cmake builds for other platforms.
-rw-r--r--CMakeLists.txt11
-rw-r--r--libvncclient/tls_gnutls.c19
-rw-r--r--rfb/rfbconfig.h.cmake21
3 files changed, 47 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 168873f..aad3f71 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -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)
diff --git a/libvncclient/tls_gnutls.c b/libvncclient/tls_gnutls.c
index 91cea67..b9ffe89 100644
--- a/libvncclient/tls_gnutls.c
+++ b/libvncclient/tls_gnutls.c
@@ -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;
diff --git a/rfb/rfbconfig.h.cmake b/rfb/rfbconfig.h.cmake
index 3e3155b..5bd6569 100644
--- a/rfb/rfbconfig.h.cmake
+++ b/rfb/rfbconfig.h.cmake
@@ -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