summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Beier <dontmind@freeshell.org>2011-03-28 15:13:29 +0200
committerChristian Beier <dontmind@freeshell.org>2011-03-28 15:13:29 +0200
commit471baea920773e3080b7972b93dbe091ebe3b4e0 (patch)
treef29897c140230af1ce95943baa18b89d664b8ba3
parent64daa71ede302d4d0ba4174b3dcec49bf2588111 (diff)
parent62b7acf48009cfad1a54bd8ba04b662f9ac53c80 (diff)
downloadlibtdevnc-471baea920773e3080b7972b93dbe091ebe3b4e0.tar.gz
libtdevnc-471baea920773e3080b7972b93dbe091ebe3b4e0.zip
Merge branch 'master' of ssh://libvncserver.git.sourceforge.net/gitroot/libvncserver/libvncserver
-rw-r--r--CMakeLists.txt20
-rw-r--r--Makefile.am2
-rw-r--r--NEWS50
-rw-r--r--VisualNaCro/nacro.c2
-rw-r--r--examples/backchannel.c2
-rw-r--r--examples/camera.c2
-rw-r--r--examples/colourmaptest.c3
-rw-r--r--examples/example.c5
-rw-r--r--examples/filetransfer.c2
-rw-r--r--examples/fontsel.c3
-rw-r--r--examples/mac.c2
-rw-r--r--examples/pnmshow.c2
-rw-r--r--examples/pnmshow24.c2
-rw-r--r--examples/rotate.c37
-rw-r--r--examples/rotatetemplate.c10
-rw-r--r--examples/simple.c2
-rw-r--r--examples/simple15.c3
-rw-r--r--examples/vncev.c5
-rw-r--r--examples/zippy.c8
-rw-r--r--libvncclient/listen.c1
-rw-r--r--libvncclient/rfbproto.c9
-rw-r--r--libvncclient/ultra.c10
-rw-r--r--libvncclient/zrle.c2
-rw-r--r--libvncserver/rfbserver.c4
-rw-r--r--libvncserver/ultra.c6
-rw-r--r--libvncserver/zrle.c3
-rw-r--r--libvncserver/zrleencodetemplate.c6
-rw-r--r--rfb/rfbconfig.h.cmake3
-rw-r--r--rfb/rfbconfig.h.in191
-rw-r--r--rfb/stamp-h.in1
-rw-r--r--test/cargstest.c3
-rw-r--r--test/copyrecttest.c2
-rw-r--r--test/cursortest.c6
-rw-r--r--test/encodingstest.c69
34 files changed, 175 insertions, 303 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b474a03..a5425cc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,10 +18,12 @@ find_package(JPEG)
find_package(SDL)
find_package(GnuTLS)
find_package(Threads)
+find_package(X11)
+find_library(LIBGCRYPT_LIBRARIES gcrypt)
-if(SDL_FOUND) # == pthread.h available
+if(Threads_FOUND)
option(TIGHTVNC_FILETRANSFER "Enable filetransfer" ON)
-endif(SDL_FOUND)
+endif(Threads_FOUND)
if(ZLIB_FOUND)
set(LIBVNCSERVER_HAVE_LIBZ 1)
endif(ZLIB_FOUND)
@@ -32,6 +34,11 @@ option(LIBVNCSERVER_ALLOW24BPP "Allow 24 bpp" ON)
if(GNUTLS_FOUND)
set(LIBVNCSERVER_WITH_CLIENT_TLS 1)
endif(GNUTLS_FOUND)
+if(LIBGCRYPT_LIBRARIES)
+ message(STATUS "Found libgcrypt: ${LIBGCRYPT_LIBRARIES}")
+ set(LIBVNCSERVER_WITH_CLIENT_GCRYPT 1)
+endif(LIBGCRYPT_LIBRARIES)
+
check_include_file("fcntl.h" LIBVNCSERVER_HAVE_FCNTL_H)
check_include_file("netinet/in.h" LIBVNCSERVER_HAVE_NETINET_IN_H)
@@ -187,12 +194,12 @@ set(LIBVNCSERVER_TESTS
vncev
)
-if(SDL_FOUND)
+if(Threads_FOUND)
set(LIBVNCSERVER_TESTS
${LIBVNCSERVER_TESTS}
blooptest
)
-endif(SDL_FOUND)
+endif(Threads_FOUND)
if(TIGHTVNC_FILETRANSFER)
set(LIBVNCSERVER_TESTS
@@ -219,6 +226,7 @@ if(SDL_FOUND)
${LIBVNCCLIENT_TESTS}
SDLvncviewer
)
+ set(SDLvncviewer_EXTRA_SOURCES scrap.c)
endif(SDL_FOUND)
if(HAVE_FFMPEG)
@@ -237,8 +245,8 @@ endforeach(test ${LIBVNCSERVER_TESTS})
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/client_examples)
foreach(test ${LIBVNCCLIENT_TESTS})
- add_executable(client_examples/${test} ${LIBVNCCLITEST_DIR}/${test}.c)
- target_link_libraries(client_examples/${test} vncclient ${CMAKE_THREAD_LIBS_INIT} ${GNUTLS_LIBRARIES} ${SDL_LIBRARY} ${FFMPEG_LIBRARIES})
+ add_executable(client_examples/${test} ${LIBVNCCLITEST_DIR}/${test}.c ${LIBVNCCLITEST_DIR}/${${test}_EXTRA_SOURCES} )
+ target_link_libraries(client_examples/${test} vncclient ${CMAKE_THREAD_LIBS_INIT} ${GNUTLS_LIBRARIES} ${X11_LIBRARIES} ${SDL_LIBRARY} ${FFMPEG_LIBRARIES})
endforeach(test ${LIBVNCCLIENT_TESTS})
install_targets(/lib vncserver)
diff --git a/Makefile.am b/Makefile.am
index 4ff8d14..0125b5b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,7 +4,7 @@ endif
SUBDIRS=libvncserver examples libvncclient vncterm classes client_examples test $(X11VNC)
DIST_SUBDIRS=libvncserver examples libvncclient vncterm classes client_examples test
-EXTRA_DIST = CMakeLists.txt
+EXTRA_DIST = CMakeLists.txt rfb/rfbint.h.cmake rfb/rfbconfig.h.cmake
bin_SCRIPTS = libvncserver-config
diff --git a/NEWS b/NEWS
index 58f9285..ca64d1d 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,53 @@
+0.9.8
+ - Overall changes:
+ * Automagically generated API documentation using doxygen.
+ * Fixed Mingw32 cross compilation.
+ * Fixed CMake build system.
+
+ - LibVNCServer/LibVNCClient:
+ * All files used by _both_ LibVNCServer and LibVNCClient were put into
+ a 'common' directory, reducing code duplication.
+ * Implemented xvp VNC extension.
+ * Updated minilzo library used for Ultra encoding to ver 2.04.
+ According to the minilzo README, this brings a significant
+ speedup on 64-bit architechtures.
+
+ - LibVNCServer:
+ * Thread safety for ZRLE, Zlib, Tight, RRE, CoRRE and Ultra encodings.
+ This makes all VNC encodings safe to use with a multithreaded server.
+ * A DisplayFinishedHook for LibVNCServer. If set, this hook gets called
+ just before rfbSendFrameBufferUpdate() returns.
+ * Fix for tight security type for RFB 3.8 in TightVNC file transfer
+ (Debian Bug #517422).
+
+ - LibVNCClient:
+ * Unix sockets support.
+ * Anonymous TLS security type support.
+ * VeNCrypt security type support.
+ * MSLogon security type support.
+ * ARD (Apple Remote Desktop) security type support.
+ * UltraVNC Repeater support.
+ * A new FinishedFrameBufferUpdate callback that is invoked after each
+ complete framebuffer update.
+ * A new non-forking listen (reverse VNC) function that works under
+ Windows.
+ * IPv6 support. LibVNCClient is now able to connect to IPv6 VNC servers.
+ * IP QoS support. This enables setting the DSCP/Traffic Class field of
+ IP/IPv6 packets sent by a client. For example starting a client with
+ -qosdscp 184 marks all outgoing traffic for expedited forwarding.
+ Implementation for Win32 is still a TODO, though.
+ * Fixed hostname resolution problems under Windows.
+
+ - SDLvncviewer
+ * Is now resizable and can do key repeat, mouse wheel scrolling
+ and clipboard copy and paste.
+
+ - LinuxVNC:
+ * Fix for no input possible because of ctrl key being stuck.
+ Issue was reported as Debian bug #555988.
+
+
+0.9.7
Mark sent me patches to no longer need C++ for ZRLE encoding!
added --disable-cxx Option for configure
x11vnc changes from Karl Runge:
diff --git a/VisualNaCro/nacro.c b/VisualNaCro/nacro.c
index 2fc9e36..9c492b0 100644
--- a/VisualNaCro/nacro.c
+++ b/VisualNaCro/nacro.c
@@ -121,6 +121,8 @@ static rfbBool malloc_frame_buffer(rfbClient* cl)
res->client->frameBuffer=malloc(w*4*h);
res->server=rfbGetScreen(NULL,NULL,w,h,8,3,4);
+ if(!res->server)
+ return FALSE;
res->server->screenData=res;
res->server->port=res->listen_port;
res->server->frameBuffer=res->client->frameBuffer;
diff --git a/examples/backchannel.c b/examples/backchannel.c
index 7aa0fa1..c625753 100644
--- a/examples/backchannel.c
+++ b/examples/backchannel.c
@@ -107,6 +107,8 @@ int main(int argc,char** argv)
rfbRegisterProtocolExtension(&backChannelExtension);
server=rfbGetScreen(&argc,argv,400,300,8,3,4);
+ if(!server)
+ return 0;
server->frameBuffer=(char*)malloc(400*300*4);
rfbInitServer(server);
rfbRunEventLoop(server,-1,FALSE);
diff --git a/examples/camera.c b/examples/camera.c
index 7077790..58ab1c3 100644
--- a/examples/camera.c
+++ b/examples/camera.c
@@ -133,6 +133,8 @@ int main(int argc,char** argv)
long usec;
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,WIDTH,HEIGHT,8,3,BPP);
+ if(!server)
+ return 0;
server->desktopName = "Live Video Feed Example";
server->frameBuffer=(char*)malloc(WIDTH*HEIGHT*BPP);
server->alwaysShared=(1==1);
diff --git a/examples/colourmaptest.c b/examples/colourmaptest.c
index e403164..20ea303 100644
--- a/examples/colourmaptest.c
+++ b/examples/colourmaptest.c
@@ -7,7 +7,8 @@ int main(int argc,char** argv)
uint8_t bytes[256*3];
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,256,256,8,1,1);
-
+ if(!server)
+ return 0;
server->serverFormat.trueColour=FALSE;
server->colourMap.count=256;
server->colourMap.is16=FALSE;
diff --git a/examples/example.c b/examples/example.c
index 31bc38d..93fdf28 100644
--- a/examples/example.c
+++ b/examples/example.c
@@ -279,8 +279,9 @@ static void MakeRichCursor(rfbScreenInfoPtr rfbScreen)
int main(int argc,char** argv)
{
- rfbScreenInfoPtr rfbScreen =
- rfbGetScreen(&argc,argv,maxx,maxy,8,3,bpp);
+ rfbScreenInfoPtr rfbScreen = rfbGetScreen(&argc,argv,maxx,maxy,8,3,bpp);
+ if(!rfbScreen)
+ return 0;
rfbScreen->desktopName = "LibVNCServer Example";
rfbScreen->frameBuffer = (char*)malloc(maxx*maxy*bpp);
rfbScreen->alwaysShared = TRUE;
diff --git a/examples/filetransfer.c b/examples/filetransfer.c
index ff4af11..2d03fe1 100644
--- a/examples/filetransfer.c
+++ b/examples/filetransfer.c
@@ -7,6 +7,8 @@
int main(int argc,char** argv)
{
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,8,3,4);
+ if(!server)
+ return 0;
server->frameBuffer=(char*)malloc(400*300*4);
rfbRegisterTightVNCFileTransferExtension();
rfbInitServer(server);
diff --git a/examples/fontsel.c b/examples/fontsel.c
index 85d2624..15139dc 100644
--- a/examples/fontsel.c
+++ b/examples/fontsel.c
@@ -41,6 +41,9 @@ int main(int argc,char** argv)
rfbScreenInfoPtr s=rfbGetScreen(&argc,argv,640,480,8,3,3);
int i,j;
+ if(!s)
+ return 0;
+
s->frameBuffer=(char*)malloc(640*480*3);
rfbInitServer(s);
diff --git a/examples/mac.c b/examples/mac.c
index 2d335a4..1c85d73 100644
--- a/examples/mac.c
+++ b/examples/mac.c
@@ -455,6 +455,8 @@ ScreenInit(int argc, char**argv)
CGDisplayPixelsHigh(kCGDirectMainDisplay),
bitsPerSample,
CGDisplaySamplesPerPixel(kCGDirectMainDisplay),4);
+ if(!rfbScreen)
+ exit(0);
rfbScreen->serverFormat.redShift = bitsPerSample*2;
rfbScreen->serverFormat.greenShift = bitsPerSample*1;
rfbScreen->serverFormat.blueShift = 0;
diff --git a/examples/pnmshow.c b/examples/pnmshow.c
index 734155f..6ced92a 100644
--- a/examples/pnmshow.c
+++ b/examples/pnmshow.c
@@ -65,6 +65,8 @@ int main(int argc,char** argv)
/* initialize data for vnc server */
rfbScreen = rfbGetScreen(&argc,argv,paddedWidth,height,8,(bitsPerPixelInFile+7)/8,bytesPerPixel);
+ if(!rfbScreen)
+ return 0;
if(argc>1)
rfbScreen->desktopName = argv[1];
else
diff --git a/examples/pnmshow24.c b/examples/pnmshow24.c
index a8d6c1d..81389d7 100644
--- a/examples/pnmshow24.c
+++ b/examples/pnmshow24.c
@@ -60,6 +60,8 @@ int main(int argc,char** argv)
/* initialize data for vnc server */
rfbScreen = rfbGetScreen(&argc,argv,paddedWidth,height,8,3,3);
+ if(!rfbScreen)
+ return 0;
if(argc>1)
rfbScreen->desktopName = argv[1];
else
diff --git a/examples/rotate.c b/examples/rotate.c
index 66fca80..028de8c 100644
--- a/examples/rotate.c
+++ b/examples/rotate.c
@@ -2,13 +2,6 @@
#include <rfb/rfb.h>
#include <rfb/keysym.h>
-static int gcd(int x, int y)
-{
- if (x == 0)
- return y;
- return gcd((y % x), x);
-}
-
#define CONCAT2(a,b) a##b
#define CONCAT2E(a,b) CONCAT2(a,b)
#define CONCAT3(a,b,c) a##b##c
@@ -17,22 +10,22 @@ static int gcd(int x, int y)
#define FUNCNAME rfbRotate
#define FUNC(i, j) (h - 1 - j + i * h)
#define SWAPDIMENSIONS
-#define OUT 8
+#define OUTBITS 8
#include "rotatetemplate.c"
-#define OUT 16
+#define OUTBITS 16
#include "rotatetemplate.c"
-#define OUT 32
+#define OUTBITS 32
#include "rotatetemplate.c"
#undef FUNCNAME
#undef FUNC
#define FUNCNAME rfbRotateCounterClockwise
#define FUNC(i, j) (j + (w - 1 - i) * h)
-#define OUT 8
+#define OUTBITS 8
#include "rotatetemplate.c"
-#define OUT 16
+#define OUTBITS 16
#include "rotatetemplate.c"
-#define OUT 32
+#define OUTBITS 32
#include "rotatetemplate.c"
#undef FUNCNAME
#undef FUNC
@@ -40,33 +33,33 @@ static int gcd(int x, int y)
#define FUNCNAME rfbFlipHorizontally
#define FUNC(i, j) ((w - 1 - i) + j * w)
-#define OUT 8
+#define OUTBITS 8
#include "rotatetemplate.c"
-#define OUT 16
+#define OUTBITS 16
#include "rotatetemplate.c"
-#define OUT 32
+#define OUTBITS 32
#include "rotatetemplate.c"
#undef FUNCNAME
#undef FUNC
#define FUNCNAME rfbFlipVertically
#define FUNC(i, j) (i + (h - 1 - j) * w)
-#define OUT 8
+#define OUTBITS 8
#include "rotatetemplate.c"
-#define OUT 16
+#define OUTBITS 16
#include "rotatetemplate.c"
-#define OUT 32
+#define OUTBITS 32
#include "rotatetemplate.c"
#undef FUNCNAME
#undef FUNC
#define FUNCNAME rfbRotateHundredAndEighty
#define FUNC(i, j) ((w - 1 - i) + (h - 1 - j) * w)
-#define OUT 8
+#define OUTBITS 8
#include "rotatetemplate.c"
-#define OUT 16
+#define OUTBITS 16
#include "rotatetemplate.c"
-#define OUT 32
+#define OUTBITS 32
#include "rotatetemplate.c"
#undef FUNCNAME
#undef FUNC
diff --git a/examples/rotatetemplate.c b/examples/rotatetemplate.c
index 57dc052..0d7e007 100644
--- a/examples/rotatetemplate.c
+++ b/examples/rotatetemplate.c
@@ -1,5 +1,5 @@
-#define OUT_T CONCAT3E(uint,OUT,_t)
-#define FUNCTION CONCAT2E(FUNCNAME,OUT)
+#define OUT_T CONCAT3E(uint,OUTBITS,_t)
+#define FUNCTION CONCAT2E(FUNCNAME,OUTBITS)
static void FUNCTION(rfbScreenInfoPtr screen)
{
@@ -16,7 +16,7 @@ static void FUNCTION(rfbScreenInfoPtr screen)
#ifdef SWAPDIMENSIONS
screen->width = h;
- screen->paddedWidthInBytes = h * OUT / 8;
+ screen->paddedWidthInBytes = h * OUTBITS / 8;
screen->height = w;
{
@@ -31,7 +31,7 @@ static void FUNCTION(rfbScreenInfoPtr screen)
rfbMarkRectAsModified(screen, 0, 0, screen->width, screen->height);
}
-#if OUT == 32
+#if OUTBITS == 32
void FUNCNAME(rfbScreenInfoPtr screen) {
if (screen->serverFormat.bitsPerPixel == 32)
CONCAT2E(FUNCNAME,32)(screen);
@@ -48,5 +48,5 @@ void FUNCNAME(rfbScreenInfoPtr screen) {
#endif
#undef FUNCTION
-#undef OUT
+#undef OUTBITS
diff --git a/examples/simple.c b/examples/simple.c
index f6e94dc..6167d72 100644
--- a/examples/simple.c
+++ b/examples/simple.c
@@ -3,6 +3,8 @@
int main(int argc,char** argv)
{
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,8,3,4);
+ if(!server)
+ return 0;
server->frameBuffer=(char*)malloc(400*300*4);
rfbInitServer(server);
rfbRunEventLoop(server,-1,FALSE);
diff --git a/examples/simple15.c b/examples/simple15.c
index faff4f7..a90988e 100644
--- a/examples/simple15.c
+++ b/examples/simple15.c
@@ -9,7 +9,8 @@ int main(int argc,char** argv)
uint16_t* f;
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,5,3,2);
-
+ if(!server)
+ return 0;
server->frameBuffer=(char*)malloc(400*300*2);
f=(uint16_t*)server->frameBuffer;
for(j=0;j<300;j++)
diff --git a/examples/vncev.c b/examples/vncev.c
index 9ebafc9..b185746 100644
--- a/examples/vncev.c
+++ b/examples/vncev.c
@@ -99,7 +99,8 @@ static enum rfbNewClientAction newclient(rfbClientPtr cl)
{
char buffer[1024];
struct sockaddr_in addr;
- unsigned int len=sizeof(addr),ip;
+ socklen_t len=sizeof(addr);
+ unsigned int ip;
getpeername(cl->sock,(struct sockaddr*)&addr,&len);
ip=ntohl(addr.sin_addr.s_addr);
@@ -112,6 +113,8 @@ static enum rfbNewClientAction newclient(rfbClientPtr cl)
int main(int argc,char** argv)
{
rfbScreenInfoPtr s=rfbGetScreen(&argc,argv,width,height,8,1,1);
+ if(!s)
+ return 0;
s->colourMap.is16=FALSE;
s->colourMap.count=2;
s->colourMap.data.bytes=(unsigned char*)"\xd0\xd0\xd0\x30\x01\xe0";
diff --git a/examples/zippy.c b/examples/zippy.c
index d8a90d7..5a5961a 100644
--- a/examples/zippy.c
+++ b/examples/zippy.c
@@ -13,6 +13,8 @@ static int maxx=400, maxy=400, bpp=4;
void blank_framebuffer(char* frame_buffer, int x1, int y1, int x2, int y2);
/* displays a red bar, a green bar, and a blue bar */
void draw_primary_colors (char* frame_buffer, int x1, int y1, int x2, int y2);
+void draw_primary_colours_generic(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2);
+void draw_primary_colours_generic_fast(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2);
void linecount (char* frame_buffer);
/* handles mouse events */
void on_mouse_event (int buttonMask,int x,int y,rfbClientPtr cl);
@@ -27,6 +29,8 @@ int main (int argc, char **argv)
return 1;
server = rfbGetScreen (&argc, argv, maxx, maxy, 8, 3, bpp);
+ if(!server)
+ return 0;
server->desktopName = "Zippy das wundersquirrel\'s VNC server";
server->frameBuffer = (char*)malloc(maxx*maxy*bpp);
server->alwaysShared = TRUE;
@@ -74,7 +78,7 @@ void draw_primary_colors (char* frame_buffer, int x1, int y1, int x2, int y2)
}
/* Dscho's versions (slower, but works for bpp != 3 or 4) */
-static void draw_primary_colours_generic(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2)
+void draw_primary_colours_generic(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2)
{
rfbPixelFormat f=s->serverFormat;
int i,j;
@@ -88,7 +92,7 @@ static void draw_primary_colours_generic(rfbScreenInfoPtr s,int x1,int y1,int x2
rfbDrawPixel(s,i,j,f.blueMax<<f.blueShift);
}
-static void draw_primary_colours_generic_fast(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2)
+void draw_primary_colours_generic_fast(rfbScreenInfoPtr s,int x1,int y1,int x2,int y2)
{
rfbPixelFormat f=s->serverFormat;
int i,j,y3=(y1*2+y2)/3,y4=(y1+y2*2)/3;
diff --git a/libvncclient/listen.c b/libvncclient/listen.c
index 637abb1..58275a0 100644
--- a/libvncclient/listen.c
+++ b/libvncclient/listen.c
@@ -29,6 +29,7 @@
#ifdef __MINGW32__
#define close closesocket
#include <winsock2.h>
+#undef max
#else
#include <sys/wait.h>
#include <sys/utsname.h>
diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c
index dd06ebd..d424b04 100644
--- a/libvncclient/rfbproto.c
+++ b/libvncclient/rfbproto.c
@@ -559,11 +559,6 @@ ReadSupportedSecurityType(rfbClient* client, uint32_t *result, rfbBool subAuth)
ReadReason(client);
return FALSE;
}
- if (count>sizeof(tAuth))
- {
- rfbClientLog("%d security types are too many; maximum is %d\n", count, sizeof(tAuth));
- return FALSE;
- }
rfbClientLog("We have %d security types to read\n", count);
authScheme=0;
@@ -573,7 +568,7 @@ ReadSupportedSecurityType(rfbClient* client, uint32_t *result, rfbBool subAuth)
if (!ReadFromRFBServer(client, (char *)&tAuth[loop], 1)) return FALSE;
rfbClientLog("%d) Received security type %d\n", loop, tAuth[loop]);
if (flag) continue;
- if (tAuth[loop]==rfbVncAuth || tAuth[loop]==rfbNoAuth || tAuth[loop]==rfbMSLogon ||
+ if (tAuth[loop]==rfbVncAuth || tAuth[loop]==rfbNoAuth ||
tAuth[loop]==rfbARD ||
(!subAuth && (tAuth[loop]==rfbTLS || tAuth[loop]==rfbVeNCrypt)))
{
@@ -1045,7 +1040,9 @@ InitialiseRFBConnection(rfbClient* client)
rfbProtocolVersionMsg pv;
int major,minor;
uint32_t authScheme;
+#ifdef LIBVNCSERVER_WITH_CLIENT_TLS
uint32_t subAuthScheme;
+#endif
rfbClientInitMsg ci;
/* if the connection is immediately closed, don't report anything, so
diff --git a/libvncclient/ultra.c b/libvncclient/ultra.c
index 3be150d..dac89b5 100644
--- a/libvncclient/ultra.c
+++ b/libvncclient/ultra.c
@@ -37,7 +37,7 @@ HandleUltraBPP (rfbClient* client, int rx, int ry, int rw, int rh)
rfbZlibHeader hdr;
int toRead=0;
int inflateResult=0;
- int uncompressedBytes = (( rw * rh ) * ( BPP / 8 ));
+ lzo_uint uncompressedBytes = (( rw * rh ) * ( BPP / 8 ));
if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbZlibHeader))
return FALSE;
@@ -57,7 +57,7 @@ HandleUltraBPP (rfbClient* client, int rx, int ry, int rw, int rh)
* buffer, this buffer allocation should only happen once, on the
* first update.
*/
- if ( client->raw_buffer_size < uncompressedBytes) {
+ if ( client->raw_buffer_size < (int)uncompressedBytes) {
if ( client->raw_buffer != NULL ) {
free( client->raw_buffer );
}
@@ -119,7 +119,7 @@ HandleUltraZipBPP (rfbClient* client, int rx, int ry, int rw, int rh)
int toRead=0;
int inflateResult=0;
unsigned char *ptr=NULL;
- int uncompressedBytes = ry + (rw * 65535);
+ lzo_uint uncompressedBytes = ry + (rw * 65535);
unsigned int numCacheRects = rx;
if (!ReadFromRFBServer(client, (char *)&hdr, sz_rfbZlibHeader))
@@ -141,7 +141,7 @@ HandleUltraZipBPP (rfbClient* client, int rx, int ry, int rw, int rh)
* buffer, this buffer allocation should only happen once, on the
* first update.
*/
- if ( client->raw_buffer_size < (uncompressedBytes + 500)) {
+ if ( client->raw_buffer_size < (int)(uncompressedBytes + 500)) {
if ( client->raw_buffer != NULL ) {
free( client->raw_buffer );
}
@@ -170,7 +170,7 @@ HandleUltraZipBPP (rfbClient* client, int rx, int ry, int rw, int rh)
uncompressedBytes = client->raw_buffer_size;
inflateResult = lzo1x_decompress(
(lzo_byte *)client->ultra_buffer, toRead,
- (lzo_byte *)client->raw_buffer, (lzo_uintp) &uncompressedBytes, NULL);
+ (lzo_byte *)client->raw_buffer, &uncompressedBytes, NULL);
if ( inflateResult != LZO_E_OK )
{
rfbClientLog("ultra decompress returned error: %d\n",
diff --git a/libvncclient/zrle.c b/libvncclient/zrle.c
index 16fc091..a14ad44 100644
--- a/libvncclient/zrle.c
+++ b/libvncclient/zrle.c
@@ -363,7 +363,7 @@ static int HandleZRLETile(rfbClient* client,
{
return -8;
}
- else if( (type >= 130)&&(type <= 255) ) /* palette RLE */
+ else if( type >= 130 ) /* palette RLE */
{
CARDBPP palette[128];
int i,j;
diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
index 73be34c..70ae88b 100644
--- a/libvncserver/rfbserver.c
+++ b/libvncserver/rfbserver.c
@@ -1657,7 +1657,7 @@ rfbBool rfbProcessFileTransfer(rfbClientPtr cl, uint8_t contentType, uint8_t con
#ifdef LIBVNCSERVER_HAVE_LIBZ
/* compressed packet */
nRet = uncompress(compBuff,&nRawBytes,(const unsigned char*)buffer, length);
- retval=write(cl->fileTransfer.fd, compBuff, nRawBytes);
+ retval=write(cl->fileTransfer.fd, (char*)compBuff, nRawBytes);
#else
/* Write the file out as received... */
retval=write(cl->fileTransfer.fd, buffer, length);
@@ -3265,7 +3265,7 @@ void
rfbNewUDPConnection(rfbScreenInfoPtr rfbScreen,
int sock)
{
- if (write(sock, &ptrAcceleration, 1) < 0) {
+ if (write(sock, (char*) &ptrAcceleration, 1) < 0) {
rfbLogPerror("rfbNewUDPConnection: write");
}
}
diff --git a/libvncserver/ultra.c b/libvncserver/ultra.c
index 9a3b14f..9485591 100644
--- a/libvncserver/ultra.c
+++ b/libvncserver/ultra.c
@@ -50,7 +50,7 @@ rfbSendOneRectEncodingUltra(rfbClientPtr cl,
+ (x * (cl->scaledScreen->bitsPerPixel / 8)));
int maxRawSize;
- int maxCompSize;
+ lzo_uint maxCompSize;
maxRawSize = (w * h * (cl->format.bitsPerPixel / 8));
@@ -68,7 +68,7 @@ rfbSendOneRectEncodingUltra(rfbClientPtr cl,
*/
maxCompSize = (maxRawSize + maxRawSize / 16 + 64 + 3);
- if (cl->afterEncBufSize < maxCompSize) {
+ if (cl->afterEncBufSize < (int)maxCompSize) {
cl->afterEncBufSize = maxCompSize;
if (cl->afterEncBuf == NULL)
cl->afterEncBuf = (char *)malloc(cl->afterEncBufSize);
@@ -92,7 +92,7 @@ rfbSendOneRectEncodingUltra(rfbClientPtr cl,
}
/* Perform the compression here. */
- deflateResult = lzo1x_1_compress((unsigned char *)cl->beforeEncBuf, (lzo_uint)(w * h * (cl->format.bitsPerPixel / 8)), (unsigned char *)cl->afterEncBuf, (lzo_uint *)&maxCompSize, cl->lzoWrkMem);
+ deflateResult = lzo1x_1_compress((unsigned char *)cl->beforeEncBuf, (lzo_uint)(w * h * (cl->format.bitsPerPixel / 8)), (unsigned char *)cl->afterEncBuf, &maxCompSize, cl->lzoWrkMem);
/* maxCompSize now contains the compressed size */
/* Find the total size of the resulting compressed data. */
diff --git a/libvncserver/zrle.c b/libvncserver/zrle.c
index e1f1447..80f629c 100644
--- a/libvncserver/zrle.c
+++ b/libvncserver/zrle.c
@@ -96,9 +96,6 @@
* data.
*/
-/* TODO: put into rfbClient struct */
-
-static char zrleBeforeBuf[rfbZRLETileWidth * rfbZRLETileHeight * 4 + 4];
/*
* rfbSendRectEncodingZRLE - send a given rectangle using ZRLE encoding.
diff --git a/libvncserver/zrleencodetemplate.c b/libvncserver/zrleencodetemplate.c
index 3a6f117..b6de755 100644
--- a/libvncserver/zrleencodetemplate.c
+++ b/libvncserver/zrleencodetemplate.c
@@ -84,8 +84,6 @@ static const int bitsPerPackedPixel[] = {
0, 1, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4
};
-static zrlePaletteHelper paletteHelper;
-
#endif /* ZRLE_ONCE */
void ZRLE_ENCODE_TILE (PIXEL_T* data, int w, int h, zrleOutStream* os,
@@ -144,11 +142,7 @@ void ZRLE_ENCODE_TILE(PIXEL_T* data, int w, int h, zrleOutStream* os,
PIXEL_T* end = ptr + h * w;
*end = ~*(end-1); /* one past the end is different so the while loop ends */
-#if 0
- ph = &paletteHelper;
-#else
ph = (zrlePaletteHelper *) paletteHelper;
-#endif
zrlePaletteHelperInit(ph);
while (ptr < end) {
diff --git a/rfb/rfbconfig.h.cmake b/rfb/rfbconfig.h.cmake
index f9f9ba3..de898fc 100644
--- a/rfb/rfbconfig.h.cmake
+++ b/rfb/rfbconfig.h.cmake
@@ -54,6 +54,9 @@
/* Define to the version of this package. */
#define LIBVNCSERVER_PACKAGE_VERSION "@PACKAGE_VERSION@"
+/* Define to 1 if libgcrypt is present */
+#cmakedefine LIBVNCSERVER_WITH_CLIENT_GCRYPT 1
+
/* Define to 1 if GnuTLS is present */
#cmakedefine LIBVNCSERVER_WITH_CLIENT_TLS 1
diff --git a/rfb/rfbconfig.h.in b/rfb/rfbconfig.h.in
deleted file mode 100644
index 5736804..0000000
--- a/rfb/rfbconfig.h.in
+++ /dev/null
@@ -1,191 +0,0 @@
-/* rfb/rfbconfig.h.in. Generated automatically from configure.ac by autoheader. */
-
-/* Enable 24 bit per pixel in native framebuffer */
-#undef ALLOW24BPP
-
-/* Enable BackChannel communication */
-#undef BACKCHANNEL
-
-/* Define if you have the <arpa/inet.h> header file. */
-#undef HAVE_ARPA_INET_H
-
-/* Define if you don't have `vprintf' but do have `_doprnt.' */
-#undef HAVE_DOPRNT
-
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define if you have the `ftime' function. */
-#undef HAVE_FTIME
-
-/* Define if you have the `gethostbyname' function. */
-#undef HAVE_GETHOSTBYNAME
-
-/* Define if you have the `gethostname' function. */
-#undef HAVE_GETHOSTNAME
-
-/* Define if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define if you have the `inet_ntoa' function. */
-#undef HAVE_INET_NTOA
-
-/* Define if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define if you have the `jpeg' library (-ljpeg). */
-#undef HAVE_LIBJPEG
-
-/* Define if you have the `nsl' library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the `pthread' library (-lpthread). */
-#undef HAVE_LIBPTHREAD
-
-/* Define if you have the `socket' library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define if you have the `z' library (-lz). */
-#undef HAVE_LIBZ
-
-/* Define if your system has a working `malloc' function. */
-#undef HAVE_MALLOC
-
-/* Define if you have the `memmove' function. */
-#undef HAVE_MEMMOVE
-
-/* Define if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have the `memset' function. */
-#undef HAVE_MEMSET
-
-/* Define if you have the `mkfifo' function. */
-#undef HAVE_MKFIFO
-
-/* Define if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define if you have the <netinet/in.h> header file. */
-#undef HAVE_NETINET_IN_H
-
-/* Define if you have the `select' function. */
-#undef HAVE_SELECT
-
-/* Define if you have the `socket' function. */
-#undef HAVE_SOCKET
-
-/* Define if `stat' has the bug that it succeeds when given the zero-length
- file name argument. */
-#undef HAVE_STAT_EMPTY_STRING_BUG
-
-/* Define if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
-/* Define if you have the `strcspn' function. */
-#undef HAVE_STRCSPN
-
-/* Define if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define if you have the `strftime' function. */
-#undef HAVE_STRFTIME
-
-/* Define if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define if you have the `strstr' function. */
-#undef HAVE_STRSTR
-
-/* Define if you have the <syslog.h> header file. */
-#undef HAVE_SYSLOG_H
-
-/* Define if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define if you have the <sys/timeb.h> header file. */
-#undef HAVE_SYS_TIMEB_H
-
-/* Define if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* Use zrle compression; needs a c++ compiler */
-#undef HAVE_ZRLE
-
-/* Define if `lstat' dereferences a symlink specified with a trailing slash.
- */
-#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
-
-/* Name of package */
-#undef PACKAGE
-
-/* The number of bytes in type char */
-#undef SIZEOF_CHAR
-
-/* The number of bytes in type int */
-#undef SIZEOF_INT
-
-/* The number of bytes in type long */
-#undef SIZEOF_LONG
-
-/* The number of bytes in type short */
-#undef SIZEOF_SHORT
-
-/* The number of bytes in type void* */
-#undef SIZEOF_VOIDP
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Version number of package */
-#undef VERSION
-
-/* Define if your processor stores words with the most significant byte first
- (like Motorola and SPARC, unlike Intel and VAX). */
-#undef WORDS_BIGENDIAN
-
-/* Define if the X Window System is missing or not being used. */
-#undef X_DISPLAY_MISSING
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define as `__inline' if that's what the C compiler calls it, or to nothing
- if it is not supported. */
-#undef inline
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
-
-/* The type for socklen */
-#undef socklen_t
diff --git a/rfb/stamp-h.in b/rfb/stamp-h.in
deleted file mode 100644
index 9788f70..0000000
--- a/rfb/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/test/cargstest.c b/test/cargstest.c
index 263982d..e2b97ee 100644
--- a/test/cargstest.c
+++ b/test/cargstest.c
@@ -10,6 +10,9 @@ int main(int argc,char** argv)
rfbBool ret=0;
screen = rfbGetScreen(&fake_argc,fake_argv,1024,768,8,3,1);
+ if(!screen)
+ return 0;
+
#define CHECK(a,b) if(screen->a!=b) { fprintf(stderr,#a " is %d (should be " #b ")\n",screen->a); ret=1; }
CHECK(width,1024);
CHECK(height,768);
diff --git a/test/copyrecttest.c b/test/copyrecttest.c
index 5521595..cd2a504 100644
--- a/test/copyrecttest.c
+++ b/test/copyrecttest.c
@@ -22,6 +22,8 @@ int main(int argc,char** argv)
double r,phi=0;
rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,width,height,8,3,4);
+ if(!server)
+ return 0;
server->frameBuffer=(char*)malloc(width*height*4);
initBackground(server);
server->deferUpdateTime=0;
diff --git a/test/cursortest.c b/test/cursortest.c
index 7a4efd3..78c37e3 100644
--- a/test/cursortest.c
+++ b/test/cursortest.c
@@ -322,8 +322,10 @@ static void doptr(int buttonMask,int x,int y,rfbClientPtr cl)
int main(int argc,char** argv)
{
- rfbScreenInfoPtr rfbScreen =
- rfbGetScreen(&argc,argv,maxx,maxy,8,3,bpp);
+ rfbScreenInfoPtr rfbScreen = rfbGetScreen(&argc,argv,maxx,maxy,8,3,bpp);
+ if(!rfbScreen)
+ return 0;
+
rfbScreen->desktopName = "Cursor Test";
rfbScreen->frameBuffer = (char*)malloc(maxx*maxy*bpp);
rfbScreen->ptrAddEvent = doptr;
diff --git a/test/encodingstest.c b/test/encodingstest.c
index bef30a8..e79f7e7 100644
--- a/test/encodingstest.c
+++ b/test/encodingstest.c
@@ -17,15 +17,16 @@ static MUTEX(frameBufferMutex);
typedef struct { int id; char* str; } encoding_t;
static encoding_t testEncodings[]={
- { rfbEncodingRaw, "raw" },
+ { rfbEncodingRaw, "raw" },
{ rfbEncodingRRE, "rre" },
- /* TODO: fix corre */
- /* { rfbEncodingCoRRE, "corre" }, */
+ { rfbEncodingCoRRE, "corre" },
{ rfbEncodingHextile, "hextile" },
+ { rfbEncodingUltra, "ultra" },
#ifdef LIBVNCSERVER_HAVE_LIBZ
{ rfbEncodingZlib, "zlib" },
{ rfbEncodingZlibHex, "zlibhex" },
{ rfbEncodingZRLE, "zrle" },
+ { rfbEncodingZYWRLE, "zywrle" },
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
{ rfbEncodingTight, "tight" },
#endif
@@ -39,7 +40,6 @@ static encoding_t testEncodings[]={
/* Here come the variables/functions to handle the test output */
static const int width=400,height=300;
-static struct { int x1,y1,x2,y2; } lastUpdateRect;
static unsigned int statistics[2][NUMBER_OF_ENCODINGS_TO_TEST];
static unsigned int totalFailed,totalCount;
static unsigned int countGotUpdate;
@@ -49,22 +49,9 @@ static void initStatistics(void) {
memset(statistics[0],0,sizeof(int)*NUMBER_OF_ENCODINGS_TO_TEST);
memset(statistics[1],0,sizeof(int)*NUMBER_OF_ENCODINGS_TO_TEST);
totalFailed=totalCount=0;
- lastUpdateRect.x1=0;
- lastUpdateRect.y1=0;
- lastUpdateRect.x2=width;
- lastUpdateRect.y2=height;
INIT_MUTEX(statisticsMutex);
}
-static void updateServerStatistics(int x1,int y1,int x2,int y2) {
- LOCK(statisticsMutex);
- countGotUpdate=0;
- lastUpdateRect.x1=x1;
- lastUpdateRect.y1=y1;
- lastUpdateRect.x2=x2;
- lastUpdateRect.y2=y2;
- UNLOCK(statisticsMutex);
-}
static void updateStatistics(int encodingIndex,rfbBool failed) {
LOCK(statisticsMutex);
@@ -115,7 +102,7 @@ static rfbBool doFramebuffersMatch(rfbScreenInfo* server,rfbClient* client,
static rfbBool resize(rfbClient* cl) {
if(cl->frameBuffer)
free(cl->frameBuffer);
- cl->frameBuffer=(char*)malloc(cl->width*cl->height*cl->format.bitsPerPixel/8);
+ cl->frameBuffer=malloc(cl->width*cl->height*cl->format.bitsPerPixel/8);
if(!cl->frameBuffer)
return FALSE;
SendFramebufferUpdateRequest(cl,0,0,cl->width,cl->height,FALSE);
@@ -129,44 +116,44 @@ typedef struct clientData {
} clientData;
static void update(rfbClient* client,int x,int y,int w,int h) {
- clientData* cd=(clientData*)client->clientData;
- int maxDelta=0;
-
#ifndef VERY_VERBOSE
+
static const char* progress="|/-\\";
static int counter=0;
if(++counter>sizeof(progress)) counter=0;
fprintf(stderr,"%c\r",progress[counter]);
#else
+ clientData* cd=(clientData*)client->clientData;
rfbClientLog("Got update (encoding=%s): (%d,%d)-(%d,%d)\n",
testEncodings[cd->encodingIndex].str,
x,y,x+w,y+h);
#endif
+}
- /* only check if this was the last update */
- if(x+w!=lastUpdateRect.x2 || y+h!=lastUpdateRect.y2) {
-#ifdef VERY_VERBOSE
- rfbClientLog("Waiting (%d!=%d or %d!=%d)\n",
- x+w,lastUpdateRect.x2,y+h,lastUpdateRect.y2);
-#endif
- return;
- }
+static void update_finished(rfbClient* client) {
+ clientData* cd=(clientData*)client->clientData;
+ int maxDelta=0;
#ifdef LIBVNCSERVER_HAVE_LIBZ
+ if(testEncodings[cd->encodingIndex].id==rfbEncodingZYWRLE)
+ maxDelta=5;
+#ifdef LIBVNCSERVER_HAVE_LIBJPEG
if(testEncodings[cd->encodingIndex].id==rfbEncodingTight)
maxDelta=5;
#endif
-
+#endif
updateStatistics(cd->encodingIndex,
!doFramebuffersMatch(cd->server,client,maxDelta));
}
+
static void* clientLoop(void* data) {
rfbClient* client=(rfbClient*)data;
clientData* cd=(clientData*)client->clientData;
client->appData.encodingsString=strdup(testEncodings[cd->encodingIndex].str);
+ client->appData.qualityLevel = 7; /* ZYWRLE fails the test with standard settings */
sleep(1);
rfbClientLog("Starting client (encoding %s, display %s)\n",
@@ -201,6 +188,7 @@ static void startClient(int encodingIndex,rfbScreenInfo* server) {
client->clientData=malloc(sizeof(clientData));
client->MallocFrameBuffer=resize;
client->GotFrameBufferUpdate=update;
+ client->FinishedFrameBufferUpdate=update_finished;
cd=(clientData*)client->clientData;
cd->encodingIndex=encodingIndex;
@@ -208,10 +196,6 @@ static void startClient(int encodingIndex,rfbScreenInfo* server) {
cd->display=(char*)malloc(6);
sprintf(cd->display,":%d",server->port-5900);
- lastUpdateRect.x1=lastUpdateRect.y1=0;
- lastUpdateRect.x2=server->width;
- lastUpdateRect.y2=server->height;
-
pthread_create(&all_threads[thread_counter++],NULL,clientLoop,(void*)client);
}
@@ -228,11 +212,10 @@ static void idle(rfbScreenInfo* server)
#else
goForward=(countGotUpdate==1);
#endif
- /* if(lastUpdateRect.x2==354)
- rfbLog("server checked: countGotUpdate=%d\n",countGotUpdate); */
+
UNLOCK(statisticsMutex);
if(!goForward)
- return;
+ return;
countGotUpdate=0;
LOCK(frameBufferMutex);
@@ -250,10 +233,6 @@ static void idle(rfbScreenInfo* server)
}
rfbMarkRectAsModified(server,x1,y1,x2,y2);
- lastUpdateRect.x1=x1;
- lastUpdateRect.y1=y1;
- lastUpdateRect.x2=x2;
- lastUpdateRect.y2=y2;
#ifdef VERY_VERBOSE
rfbLog("Sent update (%d,%d)-(%d,%d)\n",x1,y1,x2,y2);
#endif
@@ -298,6 +277,8 @@ int main(int argc,char** argv)
/* Initialize server */
server=rfbGetScreen(&argc,argv,width,height,8,3,4);
+ if(!server)
+ return 0;
server->frameBuffer=malloc(400*300*4);
server->cursor=NULL;
@@ -336,10 +317,14 @@ int main(int argc,char** argv)
}
#endif
- rfbScreenCleanup(server);
+ /* shut down server, disconnecting all clients */
+ rfbShutdownServer(server, TRUE);
+
for(i=0;i<thread_counter;i++)
pthread_join(all_threads[i], NULL);
+
free(server->frameBuffer);
+ rfbScreenCleanup(server);
rfbLog("Statistics:\n");
for(i=0;i<NUMBER_OF_ENCODINGS_TO_TEST;i++)