diff options
Diffstat (limited to 'libvncserver')
| -rw-r--r-- | libvncserver/Makefile.am | 4 | ||||
| -rw-r--r-- | libvncserver/httpd.c | 30 | ||||
| -rw-r--r-- | libvncserver/rfbserver.c | 31 |
3 files changed, 23 insertions, 42 deletions
diff --git a/libvncserver/Makefile.am b/libvncserver/Makefile.am index 287f1c9..fce398d 100644 --- a/libvncserver/Makefile.am +++ b/libvncserver/Makefile.am @@ -47,10 +47,6 @@ if HAVE_LIBZ ZLIBSRCS = zlib.c zrle.c zrleoutstream.c zrlepalettehelper.c ../common/zywrletemplate.c if HAVE_LIBJPEG TIGHTSRCS = tight.c -else -if HAVE_LIBPNG -TIGHTSRCS = tight.c -endif endif endif diff --git a/libvncserver/httpd.c b/libvncserver/httpd.c index ad2a51b..3025aae 100644 --- a/libvncserver/httpd.c +++ b/libvncserver/httpd.c @@ -59,20 +59,6 @@ #include <tcpd.h> #endif -#define connection_close -#ifndef connection_close - -#define NOT_FOUND_STR "HTTP/1.0 404 Not found\r\n\r\n" \ - "<HEAD><TITLE>File Not Found</TITLE></HEAD>\n" \ - "<BODY><H1>File Not Found</H1></BODY>\n" - -#define INVALID_REQUEST_STR "HTTP/1.0 400 Invalid Request\r\n\r\n" \ - "<HEAD><TITLE>Invalid Request</TITLE></HEAD>\n" \ - "<BODY><H1>Invalid request</H1></BODY>\n" - -#define OK_STR "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n" - -#else #define NOT_FOUND_STR "HTTP/1.0 404 Not found\r\nConnection: close\r\n\r\n" \ "<HEAD><TITLE>File Not Found</TITLE></HEAD>\n" \ @@ -82,9 +68,10 @@ "<HEAD><TITLE>Invalid Request</TITLE></HEAD>\n" \ "<BODY><H1>Invalid request</H1></BODY>\n" -#define OK_STR "HTTP/1.0 200 OK\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n" +#define OK_STR "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n" +#define OK_STR_HTML "HTTP/1.0 200 OK\r\nConnection: close\r\nContent-Type: text/html\r\n\r\n" + -#endif static void httpProcessInput(rfbScreenInfoPtr screen); static rfbBool compareAndSkip(char **ptr, const char *str); @@ -346,12 +333,6 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen) return; } - if (strchr(fname+1, '/') != NULL) { - rfbErr("httpd: asking for file in other directory\n"); - rfbWriteExact(&cl, NOT_FOUND_STR, strlen(NOT_FOUND_STR)); - httpCloseSock(rfbScreen); - return; - } getpeername(rfbScreen->httpSock, (struct sockaddr *)&addr, &addrlen); rfbLog("httpd: get '%s' for %s\n", fname+1, @@ -392,7 +373,10 @@ httpProcessInput(rfbScreenInfoPtr rfbScreen) return; } - rfbWriteExact(&cl, OK_STR, strlen(OK_STR)); + if(performSubstitutions) /* is the 'index.vnc' file */ + rfbWriteExact(&cl, OK_STR_HTML, strlen(OK_STR_HTML)); + else + rfbWriteExact(&cl, OK_STR, strlen(OK_STR)); while (1) { int n = fread(buf, 1, BUF_SIZE-1, fd); diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c index 63f21db..b42a5ea 100644 --- a/libvncserver/rfbserver.c +++ b/libvncserver/rfbserver.c @@ -494,6 +494,21 @@ rfbClientConnectionGone(rfbClientPtr cl) if (cl->next) cl->next->prev = cl->prev; + UNLOCK(rfbClientListMutex); + +#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD + if(cl->screen->backgroundLoop != FALSE) { + int i; + do { + LOCK(cl->refCountMutex); + i=cl->refCount; + if(i>0) + WAIT(cl->deleteCond,cl->refCountMutex); + UNLOCK(cl->refCountMutex); + } while(i>0); + } +#endif + if(cl->sock>=0) close(cl->sock); @@ -510,21 +525,6 @@ rfbClientConnectionGone(rfbClientPtr cl) free(cl->beforeEncBuf); free(cl->afterEncBuf); -#ifdef LIBVNCSERVER_HAVE_LIBPTHREAD - if(cl->screen->backgroundLoop != FALSE) { - int i; - do { - LOCK(cl->refCountMutex); - i=cl->refCount; - if(i>0) - WAIT(cl->deleteCond,cl->refCountMutex); - UNLOCK(cl->refCountMutex); - } while(i>0); - } -#endif - - UNLOCK(rfbClientListMutex); - if(cl->sock>=0) FD_CLR(cl->sock,&(cl->screen->allFds)); @@ -569,6 +569,7 @@ rfbClientConnectionGone(rfbClientPtr cl) TINI_MUTEX(cl->sendMutex); rfbPrintStats(cl); + rfbResetStats(cl); free(cl); } |
