From 3f42c61ead715884ac6b1f85c0b6054ff437646d Mon Sep 17 00:00:00 2001 From: Javier Date: Thu, 1 Nov 2018 13:01:39 +0100 Subject: Initial import --- app/libs/LibVNCServer-0.9.11.tar.gz | Bin 0 -> 1413739 bytes app/libs/build-openssl.sh | 31 ++++ app/libs/cmake/FindJPEG.cmake | 9 + app/libs/cmake/FindOpenSSL.cmake | 12 ++ app/libs/cmake/FindPNG.cmake | 1 + app/libs/libjpeg-turbo-2.0.0.tar.gz | Bin 0 -> 2158457 bytes app/libs/libvncserver-LibVNCServer-0.9.11.patch | 236 ++++++++++++++++++++++++ app/libs/openssl-1.1.1.tar.gz | Bin 0 -> 8337920 bytes app/libs/prepare.sh | 13 ++ 9 files changed, 302 insertions(+) create mode 100644 app/libs/LibVNCServer-0.9.11.tar.gz create mode 100755 app/libs/build-openssl.sh create mode 100644 app/libs/cmake/FindJPEG.cmake create mode 100644 app/libs/cmake/FindOpenSSL.cmake create mode 100644 app/libs/cmake/FindPNG.cmake create mode 100644 app/libs/libjpeg-turbo-2.0.0.tar.gz create mode 100644 app/libs/libvncserver-LibVNCServer-0.9.11.patch create mode 100644 app/libs/openssl-1.1.1.tar.gz create mode 100755 app/libs/prepare.sh (limited to 'app/libs') diff --git a/app/libs/LibVNCServer-0.9.11.tar.gz b/app/libs/LibVNCServer-0.9.11.tar.gz new file mode 100644 index 0000000..c33564a Binary files /dev/null and b/app/libs/LibVNCServer-0.9.11.tar.gz differ diff --git a/app/libs/build-openssl.sh b/app/libs/build-openssl.sh new file mode 100755 index 0000000..5e32899 --- /dev/null +++ b/app/libs/build-openssl.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +set -e + +case $ANDROID_ABI in +armeabi*) + target=android-arm + ;; +arm64-v8a) + target=android-arm64 + ;; +x86) + target=android-x86 + ;; +x86_64) + target=android-x86_64 + ;; +*) + target=android + ;; +esac + +export PATH="$ANDROID_LLVM_TOOLCHAIN_PREFIX:$PATH" + +perl $SOURCE_DIR/Configure shared $target + +make -j$(nproc) SHLIB_EXT=.so + +cp libcrypto.so $OUTPUT_DIR/libcrypto.so +cp libssl.so $OUTPUT_DIR/libssl.so + diff --git a/app/libs/cmake/FindJPEG.cmake b/app/libs/cmake/FindJPEG.cmake new file mode 100644 index 0000000..b3d7778 --- /dev/null +++ b/app/libs/cmake/FindJPEG.cmake @@ -0,0 +1,9 @@ + +set(JPEG_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/libjpeg-turbo ${CMAKE_BINARY_DIR}/libjpeg-turbo) +set(JPEG_LIBRARIES jpeg) + +find_package_handle_standard_args(JPEG "Could NOT find JPEG" + JPEG_LIBRARIES + JPEG_INCLUDE_DIR + ) + diff --git a/app/libs/cmake/FindOpenSSL.cmake b/app/libs/cmake/FindOpenSSL.cmake new file mode 100644 index 0000000..c9ea679 --- /dev/null +++ b/app/libs/cmake/FindOpenSSL.cmake @@ -0,0 +1,12 @@ + +set(OPENSSL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libs/openssl/include) +set(OPENSSL_SSL_LIBRARY libssl) +set(OPENSSL_CRYPTO_LIBRARY libcrypto) + +set(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) + +find_package_handle_standard_args(OpenSSL "Could NOT find OpenSSL" + OPENSSL_LIBRARIES + OPENSSL_INCLUDE_DIR + ) + diff --git a/app/libs/cmake/FindPNG.cmake b/app/libs/cmake/FindPNG.cmake new file mode 100644 index 0000000..42900e8 --- /dev/null +++ b/app/libs/cmake/FindPNG.cmake @@ -0,0 +1 @@ +message(STATUS PNG) diff --git a/app/libs/libjpeg-turbo-2.0.0.tar.gz b/app/libs/libjpeg-turbo-2.0.0.tar.gz new file mode 100644 index 0000000..89fcfba Binary files /dev/null and b/app/libs/libjpeg-turbo-2.0.0.tar.gz differ diff --git a/app/libs/libvncserver-LibVNCServer-0.9.11.patch b/app/libs/libvncserver-LibVNCServer-0.9.11.patch new file mode 100644 index 0000000..71adf2a --- /dev/null +++ b/app/libs/libvncserver-LibVNCServer-0.9.11.patch @@ -0,0 +1,236 @@ +diff -rup a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2016-12-30 14:01:28.000000000 +0100 ++++ b/CMakeLists.txt 2018-11-03 23:17:24.323450995 +0100 +@@ -18,7 +18,6 @@ set(VERSION_PATCHLEVEL "11") + set(VERSION_SO "0") + set(PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCHLEVEL}") + set(PROJECT_BUGREPORT_PATH "http://sourceforge.net/projects/libvncserver") +-set(CMAKE_C_FLAGS "-O2 -W -Wall -g") + set(LIBVNCSERVER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libvncserver) + set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common) + set(LIBVNCCLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libvncclient) +@@ -192,7 +191,7 @@ TEST_BIG_ENDIAN(LIBVNCSERVER_WORDS_BIGEN + # LIBVNCSERVER_ENOENT_WORKAROUND + # inline + +-configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbconfig.h.cmake ${CMAKE_BINARY_DIR}/rfb/rfbconfig.h) ++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/rfb/rfbconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/rfb/rfbconfig.h) + + set(LIBVNCSERVER_SOURCES + ${LIBVNCSERVER_DIR}/main.c +@@ -315,6 +314,11 @@ target_link_libraries(vncserver + ${WEBSOCKET_LIBRARIES} + ) + ++target_include_directories(vncserver ++ INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} ++ INTERFACE ${CMAKE_CURRENT_BINARY_DIR} ++ ) ++ + SET_TARGET_PROPERTIES(vncclient vncserver + PROPERTIES SOVERSION "${VERSION_SO}" VERSION "${PACKAGE_VERSION}" + ) +@@ -378,19 +382,6 @@ if(HAVE_FFMPEG) + ) + endif(HAVE_FFMPEG) + +- +-file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/examples) +-foreach(test ${LIBVNCSERVER_TESTS}) +- add_executable(examples_${test} ${LIBVNCSRVTEST_DIR}/${test}.c) +- target_link_libraries(examples_${test} vncserver ${CMAKE_THREAD_LIBS_INIT}) +-endforeach(test ${LIBVNCSERVER_TESTS}) +- +-file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/client_examples) +-foreach(test ${LIBVNCCLIENT_TESTS}) +- 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} ${X11_LIBRARIES} ${SDL_LIBRARY} ${FFMPEG_LIBRARIES}) +-endforeach(test ${LIBVNCCLIENT_TESTS}) +- + install_targets(/lib vncserver) + install_targets(/lib vncclient) + install_files(/include/rfb FILES +diff -rup a/libvncclient/listen.c b/libvncclient/listen.c +--- a/libvncclient/listen.c 2016-12-30 14:01:28.000000000 +0100 ++++ b/libvncclient/listen.c 2018-11-03 23:17:24.318450981 +0100 +@@ -85,7 +85,7 @@ listenForIncomingConnections(rfbClient* + int r; + /* reap any zombies */ + int status, pid; +- while ((pid= wait3(&status, WNOHANG, (struct rusage *)0))>0); ++ while ((pid = waitpid(-1, &status, WNOHANG))>0); + + /* TODO: callback for discard any events (like X11 events) */ + +diff -rup a/libvncclient/tls_openssl.c b/libvncclient/tls_openssl.c +--- a/libvncclient/tls_openssl.c 2016-12-30 14:01:28.000000000 +0100 ++++ b/libvncclient/tls_openssl.c 2018-11-03 23:17:24.318450981 +0100 +@@ -189,7 +189,7 @@ ssl_verify (int ok, X509_STORE_CTX *ctx) + + ssl = X509_STORE_CTX_get_ex_data (ctx, SSL_get_ex_data_X509_STORE_CTX_idx ()); + +- client = SSL_CTX_get_app_data (ssl->ctx); ++ client = SSL_CTX_get_app_data (SSL_get_SSL_CTX (ssl)); + + cert = X509_STORE_CTX_get_current_cert (ctx); + err = X509_STORE_CTX_get_error (ctx); +@@ -287,11 +287,10 @@ open_ssl_connection (rfbClient *client, + { + if (wait_for_data(ssl, n, 1) != 1) + { +- finished = 1; +- if (ssl->ctx) +- SSL_CTX_free (ssl->ctx); +- SSL_free(ssl); ++ finished = 1; + SSL_shutdown (ssl); ++ SSL_free(ssl); ++ SSL_CTX_free (ssl_ctx); + + return NULL; + } +@@ -365,10 +364,11 @@ return TRUE; + static rfbBool + ReadVeNCryptSecurityType(rfbClient* client, uint32_t *result) + { ++ static const unsigned int max_auth = 256; + uint8_t count=0; + uint8_t loop=0; + uint8_t flag=0; +- uint32_t tAuth[256], t; ++ uint32_t tAuth[max_auth], t; + char buf1[500],buf2[10]; + uint32_t authScheme; + +@@ -380,9 +380,9 @@ ReadVeNCryptSecurityType(rfbClient* clie + return FALSE; + } + +- if (count>sizeof(tAuth)) ++ if (count>=max_auth) + { +- rfbClientLog("%d security types are too many; maximum is %d\n", count, sizeof(tAuth)); ++ rfbClientLog("%d security types are too many; maximum is %d\n", count, max_auth); + return FALSE; + } + +diff -rup a/libvncserver/main.c b/libvncserver/main.c +--- a/libvncserver/main.c 2016-12-30 14:01:28.000000000 +0100 ++++ b/libvncserver/main.c 2018-11-03 23:17:24.320450987 +0100 +@@ -561,6 +561,7 @@ clientInput(void *data) + } + } + ++ rfbLog("input: waiting for output thread"); + /* Get rid of the output thread. */ + LOCK(cl->updateMutex); + TSIGNAL(cl->updateCond); +@@ -569,6 +570,8 @@ clientInput(void *data) + + rfbClientConnectionGone(cl); + ++ rfbLog("input: exit thread"); ++ + return NULL; + } + +@@ -945,7 +948,7 @@ rfbScreenInfoPtr rfbGetScreen(int* argc, + void rfbNewFramebuffer(rfbScreenInfoPtr screen, char *framebuffer, + int width, int height, + int bitsPerSample, int samplesPerPixel, +- int bytesPerPixel) ++ int bytesPerPixel, int bytesPerRow) + { + rfbPixelFormat old_format; + rfbBool format_changed = FALSE; +@@ -962,7 +965,7 @@ void rfbNewFramebuffer(rfbScreenInfoPtr + screen->width = width; + screen->height = height; + screen->bitsPerPixel = screen->depth = 8*bytesPerPixel; +- screen->paddedWidthInBytes = width*bytesPerPixel; ++ screen->paddedWidthInBytes = bytesPerRow; + + rfbInitServerFormat(screen, bitsPerSample); + +@@ -1062,22 +1065,30 @@ void rfbInitServer(rfbScreenInfoPtr scre + #endif + } + +-void rfbShutdownServer(rfbScreenInfoPtr screen,rfbBool disconnectClients) { ++void rfbShutdownServer(rfbScreenInfoPtr screen, rfbBool disconnectClients) { ++ rfbShutdownSockets(screen); ++ rfbHttpShutdownSockets(screen); ++ + if(disconnectClients) { + rfbClientPtr cl; +- rfbClientIteratorPtr iter = rfbGetClientIterator(screen); +- while( (cl = rfbClientIteratorNext(iter)) ) { +- if (cl->sock > -1) { +- /* we don't care about maxfd here, because the server goes away */ +- rfbCloseClient(cl); +- rfbClientConnectionGone(cl); +- } ++ ++ cl = screen->clientHead; ++ ++ while (cl) { ++ rfbClientPtr next = cl->next; ++ if (cl->sock != -1) { ++ rfbCloseClient(cl); ++ if (screen->backgroundLoop) { ++ pthread_join(cl->client_thread, NULL); ++ } else { ++ rfbClientConnectionGone(cl); ++ } ++ } ++ cl = next; + } +- rfbReleaseClientIterator(iter); + } + +- rfbShutdownSockets(screen); +- rfbHttpShutdownSockets(screen); ++ + } + + #ifndef LIBVNCSERVER_HAVE_GETTIMEOFDAY +diff -rup a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c +--- a/libvncserver/rfbserver.c 2016-12-30 14:01:28.000000000 +0100 ++++ b/libvncserver/rfbserver.c 2018-11-03 23:17:24.320450987 +0100 +@@ -552,8 +552,10 @@ rfbClientConnectionGone(rfbClientPtr cl) + do { + LOCK(cl->refCountMutex); + i=cl->refCount; +- if(i>0) +- WAIT(cl->deleteCond,cl->refCountMutex); ++ if(i>0) { ++ rfbLog("Client %s still has %d refs\n",cl->host, i); ++ WAIT(cl->deleteCond, cl->refCountMutex); ++ } + UNLOCK(cl->refCountMutex); + } while(i>0); + } +diff -rup a/libvncserver/rfbssl_openssl.c b/libvncserver/rfbssl_openssl.c +--- a/libvncserver/rfbssl_openssl.c 2016-12-30 14:01:28.000000000 +0100 ++++ b/libvncserver/rfbssl_openssl.c 2018-11-03 23:17:24.320450987 +0100 +@@ -56,7 +56,7 @@ int rfbssl_init(rfbClientPtr cl) + rfbErr("OOM\n"); + } else if (!cl->screen->sslcertfile || !cl->screen->sslcertfile[0]) { + rfbErr("SSL connection but no cert specified\n"); +- } else if (NULL == (ctx->ssl_ctx = SSL_CTX_new(TLSv1_server_method()))) { ++ } else if (NULL == (ctx->ssl_ctx = SSL_CTX_new(TLS_server_method()))) { + rfbssl_error(); + } else if (SSL_CTX_use_PrivateKey_file(ctx->ssl_ctx, keyfile, SSL_FILETYPE_PEM) <= 0) { + rfbErr("Unable to load private key file %s\n", keyfile); +diff -rup a/rfb/rfb.h b/rfb/rfb.h +--- a/rfb/rfb.h 2016-12-30 14:01:28.000000000 +0100 ++++ b/rfb/rfb.h 2018-11-03 23:17:24.320450987 +0100 +@@ -1034,7 +1034,7 @@ extern void rfbInitServer(rfbScreenInfoP + extern void rfbShutdownServer(rfbScreenInfoPtr rfbScreen,rfbBool disconnectClients); + extern void rfbNewFramebuffer(rfbScreenInfoPtr rfbScreen,char *framebuffer, + int width,int height, int bitsPerSample,int samplesPerPixel, +- int bytesPerPixel); ++ int bytesPerPixel, int bytesPerRow); + + extern void rfbScreenCleanup(rfbScreenInfoPtr screenInfo); + extern void rfbSetServerVersionIdentity(rfbScreenInfoPtr screen, char *fmt, ...); diff --git a/app/libs/openssl-1.1.1.tar.gz b/app/libs/openssl-1.1.1.tar.gz new file mode 100644 index 0000000..8f743ea Binary files /dev/null and b/app/libs/openssl-1.1.1.tar.gz differ diff --git a/app/libs/prepare.sh b/app/libs/prepare.sh new file mode 100755 index 0000000..820e17e --- /dev/null +++ b/app/libs/prepare.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +set -ve + +tar xvf openssl-1.1.1.tar.gz +ln -sf openssl-1.1.1 openssl + +tar xvf libjpeg-turbo-2.0.0.tar.gz +ln -sf libjpeg-turbo-2.0.0 libjpeg-turbo + +tar xvf LibVNCServer-0.9.11.tar.gz +ln -sf libvncserver-LibVNCServer-0.9.11 libvncserver +(cd libvncserver && patch -p1 < ../libvncserver-LibVNCServer-0.9.11.patch) -- cgit v1.2.3