diff --git a/test/Makefile.am b/test/Makefile.am index 33839d5..c2d04c4 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -6,8 +6,10 @@ endif copyrecttest_LDADD=$(LDADD) -lm -noinst_PROGRAMS=tight-1 cargstest copyrecttest $(BACKGROUND_TEST) - +noinst_PROGRAMS=encodingstest cargstest copyrecttest $(BACKGROUND_TEST) LDADD = ../libvncserver/libvncserver.a ../libvncclient/libvncclient.a +test: encodingstest cargstest copyrecttest + ./encodingstest && ./cargstest + diff --git a/test/tight-1.c b/test/encodingstest.c similarity index 84% rename from test/tight-1.c rename to test/encodingstest.c index 45aa4c9..5c84caf 100644 --- a/test/tight-1.c +++ b/test/encodingstest.c @@ -1,12 +1,13 @@ #include +#include #include #include -#ifndef LIBVNCSERVER_HAVE_LIBTHREAD -//#error This test need pthread support (otherwise the client blocks the client) +#ifndef LIBVNCSERVER_HAVE_LIBPTHREAD +#error This test need pthread support (otherwise the client blocks the client) #endif -//#define ALL_AT_ONCE +#define ALL_AT_ONCE //#define VERY_VERBOSE MUTEX(frameBufferMutex); @@ -15,12 +16,14 @@ typedef struct { int id; char* str; } encoding_t; encoding_t testEncodings[]={ { rfbEncodingRaw, "raw" }, { rfbEncodingRRE, "rre" }, - { rfbEncodingCoRRE, "corre" }, + /* TODO: fix corre */ + /* { rfbEncodingCoRRE, "corre" }, */ { rfbEncodingHextile, "hextile" }, #ifdef LIBVNCSERVER_HAVE_LIBZ { rfbEncodingZlib, "zlib" }, { rfbEncodingZlibHex, "zlibhex" }, - { rfbEncodingZRLE, "zrle" }, + /* TODO: implement ZRLE decoding */ + /* { rfbEncodingZRLE, "zrle" }, */ #ifdef LIBVNCSERVER_HAVE_LIBJPEG { rfbEncodingTight, "tight" }, #endif @@ -125,11 +128,15 @@ typedef struct 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; - /* TODO: check if dimensions match with marked rectangle */ - -#ifdef VERY_VERBOSE - rfbLog("Got update (encoding=%s): (%d,%d)-(%d,%d)\n", + if(++counter>sizeof(progress)) counter=0; + fprintf(stderr,"%c\r",progress[counter]); +#else + rfbClientLog("Got update (encoding=%s): (%d,%d)-(%d,%d)\n", testEncodings[cd->encodingIndex].str, x,y,x+w,y+h); #endif @@ -137,7 +144,7 @@ static void update(rfbClient* client,int x,int y,int w,int h) { /* only check if this was the last update */ if(x+w!=lastUpdateRect.x2 || y+h!=lastUpdateRect.y2) { #ifdef VERY_VERBOSE - rfbLog("Waiting (%d!=%d or %d!=%d)\n", + rfbClientLog("Waiting (%d!=%d or %d!=%d)\n", x+w,lastUpdateRect.x2,y+h,lastUpdateRect.y2); #endif return; @@ -160,11 +167,11 @@ static void* clientLoop(void* data) { sleep(1); - rfbLog("Starting client (encoding %s, display %s)\n", + rfbClientLog("Starting client (encoding %s, display %s)\n", testEncodings[cd->encodingIndex].str, cd->display); if(!rfbInitClient(client,&argc,argv)) { - rfbLog("Had problems starting client (encoding %s)\n", + rfbClientErr("Had problems starting client (encoding %s)\n", testEncodings[cd->encodingIndex].str); updateStatistics(cd->encodingIndex,TRUE); return 0; @@ -196,7 +203,11 @@ static void startClient(int encodingIndex,rfbScreenInfo* server) { cd->server=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(&clientThread,NULL,clientLoop,(void*)client); } @@ -246,13 +257,40 @@ static void idle(rfbScreenInfo* server) UNLOCK(frameBufferMutex); } -//TODO: pthread'ize the client. otherwise server and client block each -//other +/* log function (to show what messages are from the client) */ + +void +rfbTestLog(const char *format, ...) +{ + va_list args; + char buf[256]; + time_t log_clock; + + if(!rfbEnableClientLogging) + return; + + va_start(args, format); + + time(&log_clock); + strftime(buf, 255, "%d/%m/%Y %X (client) ", localtime(&log_clock)); + fprintf(stderr,buf); + + vfprintf(stderr, format, args); + fflush(stderr); + + va_end(args); +} + +/* the main function */ + int main(int argc,char** argv) { int i,j; time_t t; + rfbClientLog=rfbTestLog; + rfbClientErr=rfbTestLog; + /* Initialize server */ rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,width,height,8,3,4); @@ -304,3 +342,4 @@ int main(int argc,char** argv) return(0); } +