From a282734c1305b82552edbbf41e586c8cfbdd47f0 Mon Sep 17 00:00:00 2001 From: ading2210 Date: Wed, 13 Mar 2024 14:18:56 -0400 Subject: [PATCH] remove emscripten socket file descriptor limit --- client/exported_funcs.txt | 2 ++ client/fragments/fix_socket_limit.js | 3 ++ client/javascript/ftp.js | 44 ++++++++++++++++++++++++++++ client/libcurl/ftp.c | 9 ++++++ client/libcurl/main.c | 5 ---- client/libcurl/ws.c | 0 6 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 client/fragments/fix_socket_limit.js create mode 100644 client/javascript/ftp.js create mode 100644 client/libcurl/ftp.c delete mode 100644 client/libcurl/ws.c diff --git a/client/exported_funcs.txt b/client/exported_funcs.txt index 6fb892d..32955b5 100644 --- a/client/exported_funcs.txt +++ b/client/exported_funcs.txt @@ -27,4 +27,6 @@ tls_socket_set_options recv_from_socket send_to_socket +ftp_set_options + free \ No newline at end of file diff --git a/client/fragments/fix_socket_limit.js b/client/fragments/fix_socket_limit.js new file mode 100644 index 0000000..e3af9ae --- /dev/null +++ b/client/fragments/fix_socket_limit.js @@ -0,0 +1,3 @@ +/* DELETE +assert\(sock\.stream\.fd ?< ?64\); +*/ diff --git a/client/javascript/ftp.js b/client/javascript/ftp.js new file mode 100644 index 0000000..40f74b4 --- /dev/null +++ b/client/javascript/ftp.js @@ -0,0 +1,44 @@ +//unfinished! + +class FTPSession { + constructor(url, options={}) { + if (!url.startsWith("ftp://") || !url.startsWith("ftps://")) { + throw "invalid url protocol"; + } + + this.url = url; + this.cwd = new URL(url).pathname; + this.options = options; + this.http_handle = null; + } + + do_request(url) { + return new Promise((resolve, reject) => { + let http_handle; + let data_callback = (data) => {this.data_callback(data)}; + let finish_callback = (error) => { + _cleanup_handle(http_handle); + if (error) { + reject(); + } + else { + resolve(); + } + }; + let headers_callback = () => {this.headers_callback()}; + + http_handle = create_handle(url, data_callback, finish_callback, headers_callback); + _ftp_set_options(http_handle, url, 1); + start_request(http_handle); + }); + } + + async download(path) { + let url = new URL(path, this.url); + _ftp_set_options(this.http_handle, url, 0); + } + + cleanup() { + + } +} \ No newline at end of file diff --git a/client/libcurl/ftp.c b/client/libcurl/ftp.c new file mode 100644 index 0000000..a1cdacb --- /dev/null +++ b/client/libcurl/ftp.c @@ -0,0 +1,9 @@ +#include "curl/curl.h" + +#include "types.h" +#include "util.h" + +void ftp_set_options(CURL* http_handle, const char* url, int no_body) { + curl_easy_setopt(http_handle, CURLOPT_NOBODY, (long) no_body); + curl_easy_setopt(http_handle, CURLOPT_URL, url); +} \ No newline at end of file diff --git a/client/libcurl/main.c b/client/libcurl/main.c index b1cc4f5..e01a2e3 100644 --- a/client/libcurl/main.c +++ b/client/libcurl/main.c @@ -119,11 +119,6 @@ void init_curl() { curl_global_init(CURL_GLOBAL_DEFAULT); multi_handle = curl_multi_init(); - //emscripten has a fairly low file descriptor limit which means - //we must limit the total number of active tcp connections - curl_multi_setopt(multi_handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, 50L); - curl_multi_setopt(multi_handle, CURLMOPT_MAXCONNECTS, 40L); - cacert_blob.data = _cacert_pem; cacert_blob.len = _cacert_pem_len; cacert_blob.flags = CURL_BLOB_NOCOPY; diff --git a/client/libcurl/ws.c b/client/libcurl/ws.c deleted file mode 100644 index e69de29..0000000