diff --git a/client/build.sh b/client/build.sh index c77d2e7..4b5566c 100755 --- a/client/build.sh +++ b/client/build.sh @@ -28,7 +28,7 @@ EXPORTED_FUNCS="${EXPORTED_FUNCS:1}" #compile options RUNTIME_METHODS="addFunction,removeFunction,allocate,ALLOC_NORMAL" COMPILER_OPTIONS="-o $MODULE_FILE -lcurl -lssl -lcrypto -lcjson -lz -lbrotlidec -lbrotlicommon -lnghttp2 -I $INCLUDE_DIR -L $LIB_DIR" -EMSCRIPTEN_OPTIONS="-lwebsocket.js -sASSERTIONS=1 -sLLD_REPORT_UNDEFINED -sALLOW_TABLE_GROWTH -sALLOW_MEMORY_GROWTH -sEXPORTED_FUNCTIONS=$EXPORTED_FUNCS -sEXPORTED_RUNTIME_METHODS=$RUNTIME_METHODS" +EMSCRIPTEN_OPTIONS="-lwebsocket.js -sENVIRONMENT=worker,web -sASSERTIONS=1 -sLLD_REPORT_UNDEFINED -sALLOW_TABLE_GROWTH -sALLOW_MEMORY_GROWTH -sEXPORTED_FUNCTIONS=$EXPORTED_FUNCS -sEXPORTED_RUNTIME_METHODS=$RUNTIME_METHODS" #clean output dir rm -rf $OUT_DIR @@ -94,4 +94,4 @@ python3 tools/patch_js.py $FRAGMENTS_DIR $OUT_FILE #generate es6 module cp $OUT_FILE $ES6_FILE -sed -i 's/window.libcurl/export const libcurl/' $ES6_FILE \ No newline at end of file +sed -i 's/const libcurl = /export const libcurl = /' $ES6_FILE \ No newline at end of file diff --git a/client/javascript/main.js b/client/javascript/main.js index 3110e53..a8436f5 100644 --- a/client/javascript/main.js +++ b/client/javascript/main.js @@ -16,12 +16,8 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -if (typeof window === "undefined") { - throw new Error("NodeJS is not supported. This only works inside the browser."); -} - //everything is wrapped in a function to prevent emscripten from polluting the global scope -window.libcurl = (function() { +const libcurl = (function() { //emscripten compiled code is inserted here /* __emscripten_output__ */ diff --git a/client/libcurl/main.c b/client/libcurl/main.c index ebb04f4..7725ad3 100644 --- a/client/libcurl/main.c +++ b/client/libcurl/main.c @@ -19,9 +19,10 @@ void finish_request(CURLMsg *curl_msg); CURLM *multi_handle; int request_active = 0; +struct curl_blob cacert_blob; -int write_function(void *data, size_t size, size_t nmemb, DataCallback data_callback) { - long real_size = size * nmemb; +size_t write_function(void *data, size_t size, size_t nmemb, DataCallback data_callback) { + size_t real_size = size * nmemb; char* chunk = malloc(real_size); memcpy(chunk, data, real_size); data_callback(chunk, real_size); @@ -53,8 +54,7 @@ CURL* start_request(const char* url, const char* json_params, DataCallback data_ int prevent_cleanup = 0; curl_easy_setopt(http_handle, CURLOPT_URL, url); - curl_easy_setopt(http_handle, CURLOPT_CAINFO, "/cacert.pem"); - curl_easy_setopt(http_handle, CURLOPT_CAPATH, "/cacert.pem"); + curl_easy_setopt(http_handle, CURLOPT_CAINFO_BLOB , cacert_blob); //callbacks to pass the response data back to js curl_easy_setopt(http_handle, CURLOPT_WRITEFUNCTION, &write_function); @@ -199,8 +199,10 @@ void finish_request(CURLMsg *curl_msg) { void init_curl() { curl_global_init(CURL_GLOBAL_DEFAULT); multi_handle = curl_multi_init(); + curl_multi_setopt(multi_handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, 50L); + curl_multi_setopt(multi_handle, CURLMOPT_MAXCONNECTS, 40L); - FILE* file = fopen("/cacert.pem", "wb"); - fwrite(_cacert_pem, 1, _cacert_pem_len, file); - fclose(file); + cacert_blob.data = _cacert_pem; + cacert_blob.len = _cacert_pem_len; + cacert_blob.flags = CURL_BLOB_NOCOPY; } \ No newline at end of file diff --git a/client/tools/brotli.sh b/client/tools/brotli.sh index 1210f4b..c9cba4a 100755 --- a/client/tools/brotli.sh +++ b/client/tools/brotli.sh @@ -10,7 +10,7 @@ PREFIX=$(realpath build/brotli-wasm) cd build rm -rf brotli -git clone -b master --depth=1 https://github.com/google/brotli +git clone -b v1.1.0 --depth=1 https://github.com/google/brotli cd brotli emcmake cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed diff --git a/client/tools/cjson.sh b/client/tools/cjson.sh index acf7290..5cdfc1e 100755 --- a/client/tools/cjson.sh +++ b/client/tools/cjson.sh @@ -11,7 +11,7 @@ mkdir -p $PREFIX cd build rm -rf cjson -git clone -b master --depth=1 https://github.com/DaveGamble/cJSON cjson +git clone -b v1.7.17 --depth=1 https://github.com/DaveGamble/cJSON cjson cd cjson sed -i 's/-fstack-protector-strong//' Makefile diff --git a/client/tools/curl.sh b/client/tools/curl.sh index 7f4afa0..cf286a5 100755 --- a/client/tools/curl.sh +++ b/client/tools/curl.sh @@ -14,7 +14,7 @@ NGHTTP2_PREFIX=$(realpath build/nghttp2-wasm) cd build rm -rf curl -git clone -b master --depth=1 https://github.com/curl/curl +git clone -b curl-8_6_0 --depth=1 https://github.com/curl/curl cd curl autoreconf -fi diff --git a/client/tools/nghttp2.sh b/client/tools/nghttp2.sh index e9c86eb..58a5aba 100755 --- a/client/tools/nghttp2.sh +++ b/client/tools/nghttp2.sh @@ -10,7 +10,7 @@ PREFIX=$(realpath build/nghttp2-wasm) cd build rm -rf nghttp2 -git clone -b master --depth=1 https://github.com/nghttp2/nghttp2 +git clone -b v1.59.0 --depth=1 https://github.com/nghttp2/nghttp2 cd nghttp2 rm -rf $PREFIX diff --git a/client/tools/openssl.sh b/client/tools/openssl.sh index dc8a041..014f5c3 100755 --- a/client/tools/openssl.sh +++ b/client/tools/openssl.sh @@ -11,7 +11,7 @@ mkdir -p $PREFIX cd build rm -rf openssl -git clone -b master --depth=1 https://github.com/openssl/openssl +git clone -b openssl-3.2.1 --depth=1 https://github.com/openssl/openssl cd openssl export CFLAGS="-Wall -Oz" diff --git a/client/tools/zlib.sh b/client/tools/zlib.sh index 624246e..10c7bd1 100755 --- a/client/tools/zlib.sh +++ b/client/tools/zlib.sh @@ -10,7 +10,7 @@ PREFIX=$(realpath build/zlib-wasm) cd build rm -rf zlib -git clone -b master --depth=1 https://github.com/madler/zlib +git clone -b v1.3.1 --depth=1 https://github.com/madler/zlib cd zlib emconfigure ./configure --static