Merge branch 'main' into v0.4

This commit is contained in:
ading2210 2024-02-28 10:38:12 -08:00
commit 832a73d1a8
9 changed files with 18 additions and 20 deletions

View file

@ -28,7 +28,7 @@ EXPORTED_FUNCS="${EXPORTED_FUNCS:1}"
#compile options #compile options
RUNTIME_METHODS="addFunction,removeFunction,allocate,ALLOC_NORMAL" 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" 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 #clean output dir
rm -rf $OUT_DIR rm -rf $OUT_DIR
@ -94,4 +94,4 @@ python3 tools/patch_js.py $FRAGMENTS_DIR $OUT_FILE
#generate es6 module #generate es6 module
cp $OUT_FILE $ES6_FILE cp $OUT_FILE $ES6_FILE
sed -i 's/window.libcurl/export const libcurl/' $ES6_FILE sed -i 's/const libcurl = /export const libcurl = /' $ES6_FILE

View file

@ -16,12 +16,8 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
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 //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 compiled code is inserted here
/* __emscripten_output__ */ /* __emscripten_output__ */

View file

@ -19,9 +19,10 @@ void finish_request(CURLMsg *curl_msg);
CURLM *multi_handle; CURLM *multi_handle;
int request_active = 0; int request_active = 0;
struct curl_blob cacert_blob;
int write_function(void *data, size_t size, size_t nmemb, DataCallback data_callback) { size_t write_function(void *data, size_t size, size_t nmemb, DataCallback data_callback) {
long real_size = size * nmemb; size_t real_size = size * nmemb;
char* chunk = malloc(real_size); char* chunk = malloc(real_size);
memcpy(chunk, data, real_size); memcpy(chunk, data, real_size);
data_callback(chunk, 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; int prevent_cleanup = 0;
curl_easy_setopt(http_handle, CURLOPT_URL, url); curl_easy_setopt(http_handle, CURLOPT_URL, url);
curl_easy_setopt(http_handle, CURLOPT_CAINFO, "/cacert.pem"); curl_easy_setopt(http_handle, CURLOPT_CAINFO_BLOB , cacert_blob);
curl_easy_setopt(http_handle, CURLOPT_CAPATH, "/cacert.pem");
//callbacks to pass the response data back to js //callbacks to pass the response data back to js
curl_easy_setopt(http_handle, CURLOPT_WRITEFUNCTION, &write_function); curl_easy_setopt(http_handle, CURLOPT_WRITEFUNCTION, &write_function);
@ -199,8 +199,10 @@ void finish_request(CURLMsg *curl_msg) {
void init_curl() { void init_curl() {
curl_global_init(CURL_GLOBAL_DEFAULT); curl_global_init(CURL_GLOBAL_DEFAULT);
multi_handle = curl_multi_init(); 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"); cacert_blob.data = _cacert_pem;
fwrite(_cacert_pem, 1, _cacert_pem_len, file); cacert_blob.len = _cacert_pem_len;
fclose(file); cacert_blob.flags = CURL_BLOB_NOCOPY;
} }

View file

@ -10,7 +10,7 @@ PREFIX=$(realpath build/brotli-wasm)
cd build cd build
rm -rf brotli 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 cd brotli
emcmake cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed emcmake cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./installed

View file

@ -11,7 +11,7 @@ mkdir -p $PREFIX
cd build cd build
rm -rf cjson 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 cd cjson
sed -i 's/-fstack-protector-strong//' Makefile sed -i 's/-fstack-protector-strong//' Makefile

View file

@ -14,7 +14,7 @@ NGHTTP2_PREFIX=$(realpath build/nghttp2-wasm)
cd build cd build
rm -rf curl 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 cd curl
autoreconf -fi autoreconf -fi

View file

@ -10,7 +10,7 @@ PREFIX=$(realpath build/nghttp2-wasm)
cd build cd build
rm -rf nghttp2 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 cd nghttp2
rm -rf $PREFIX rm -rf $PREFIX

View file

@ -11,7 +11,7 @@ mkdir -p $PREFIX
cd build cd build
rm -rf openssl 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 cd openssl
export CFLAGS="-Wall -Oz" export CFLAGS="-Wall -Oz"

View file

@ -10,7 +10,7 @@ PREFIX=$(realpath build/zlib-wasm)
cd build cd build
rm -rf zlib 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 cd zlib
emconfigure ./configure --static emconfigure ./configure --static