From 04521670efd91a8a2009cf946386f7992ed30f7b Mon Sep 17 00:00:00 2001 From: Parithosh Jayanthi Date: Wed, 6 Nov 2019 06:24:18 +0000 Subject: [PATCH 1/7] fixed typo --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6a004bc56..e81da37cb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -405,7 +405,7 @@ release_mac_and_wasm: - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "Mac release:" $IPFS_HASH >> in3-mac-wasm/mac_release_ipfs_hash.txt - - ghr -u slockIt -r in3-c $CI_COMMIT_TAG ${CI_COMMIT_TAG} in3_${CI_COMMIT_TAG}_wasm.tar.gz + - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_wasm.tar.gz - cd in3-mac-wasm artifacts: paths: From 156b434ba7bb6829787b845417a87b6f8e78a18a Mon Sep 17 00:00:00 2001 From: Parithosh Jayanthi Date: Wed, 6 Nov 2019 06:25:22 +0000 Subject: [PATCH 2/7] fixed typo --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e81da37cb..5b8852ae6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -400,7 +400,7 @@ release_mac_and_wasm: - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_mac.tar.gz in3-mac-wasm/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_mac.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - - ghr -u slockIt -r in3-c $CI_COMMIT_TAG ${CI_COMMIT_TAG} in3_${CI_COMMIT_TAG}_mac.tar.gz + - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_mac.tar.gz - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/bin --exclude=in3-mac-wasm/lib --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_wasm.tar.gz in3-mac-wasm/ - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" From 4de8c0b436736e519c223e8ac4983684e141db66 Mon Sep 17 00:00:00 2001 From: pari Date: Wed, 6 Nov 2019 12:37:09 +0530 Subject: [PATCH 3/7] fixed ipfs credential formatting error --- .gitlab-ci.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5b8852ae6..cb02a18ee 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -398,11 +398,11 @@ release_mac_and_wasm: - cp -r ../wasm_build/module js - cd .. - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_mac.tar.gz in3-mac-wasm/ - - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_mac.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') + - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_mac.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_mac.tar.gz - tar -zcv --exclude=in3-mac-wasm/src --exclude=in3-mac-wasm/include --exclude=in3-mac-wasm/bin --exclude=in3-mac-wasm/lib --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_wasm.tar.gz in3-mac-wasm/ - - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') + - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_wasm.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_wasm.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "Mac release:" $IPFS_HASH >> in3-mac-wasm/mac_release_ipfs_hash.txt - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_wasm.tar.gz @@ -435,7 +435,7 @@ release_x64: - cp -r ../wasm_build/module js - cd .. - tar -zcv --exclude=in3-x64/src --exclude=in3-x64/include --exclude=in3-x64/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x64.tar.gz in3-x64/ - - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_x64.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') + - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_x64.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_mac.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "x64 release:" $IPFS_HASH >> in3-x64/x64_release_ipfs_hash.txt - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_x64.tar.gz @@ -469,7 +469,7 @@ release_x86: - cp -r ../wasm_build/module js - cd .. - tar -zcv --exclude=in3-x86/src --exclude=in3-x86/include --exclude=in3-x86/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_x86.tar.gz in3-x86/ - - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_x86.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_x86.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') + - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_x86.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_x86.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "x86 release:" $IPFS_HASH >> in3-x86/x86_release_ipfs_hash.txt - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_x86.tar.gz @@ -504,7 +504,7 @@ release_arm7: - cp -r ../wasm_build/module js - cd .. - tar -zcv --exclude=in3-arm7/src --exclude=in3-arm7/include --exclude=in3-arm7/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_arm7.tar.gz in3-arm7/ - - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_arm7.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_arm7.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') + - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_arm7.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_arm7.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "arm7 release:" $IPFS_HASH >> in3-arm7/arm7_release_ipfs_hash.txt - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_arm7.tar.gz @@ -543,7 +543,7 @@ release_win: - cp -r ../wasm_build/module js - cd .. - tar -zcv --exclude=in3-win/src --exclude=in3-win/include --exclude=in3-win/js --exclude=*cmake* -f in3_${CI_COMMIT_TAG}_windows.tar.gz in3-win/ - - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:$PINATA_API_KEY' -H 'pinata_secret_api_key:$PINATA_SECRET_API_KEY' -F file=@in3_${CI_COMMIT_TAG}_windows.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_windows.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') + - IPFS_RESPONSE=$(curl -X POST https://api.pinata.cloud/pinning/pinFileToIPFS -H 'Content-Type:multipart/form-data' -H 'pinata_api_key:'"$PINATA_API_KEY" -H 'pinata_secret_api_key:'"$PINATA_SECRET_API_KEY" -F file=@in3_${CI_COMMIT_TAG}_windows.tar.gz -F 'pinataMetadata={"name":"in3_${CI_COMMIT_TAG}_windows.tar.gz","keyValues":{"version":"${CI_COMMIT_TAG}"}}' -F 'pinataOptions={"cidVersion":0}') - "IPFS_HASH=$(echo $IPFS_RESPONSE | sed -e 's/[{}]/''/g' | awk -v RS=',' -F: '/IpfsHash/ {print $2}')" - echo "windows release:" $IPFS_HASH >> in3-win/win_release_ipfs_hash.txt - ghr -u slockIt -r in3-c $CI_COMMIT_TAG in3_${CI_COMMIT_TAG}_windows.tar.gz @@ -740,3 +740,4 @@ github_body_release: - cat in3-arm7/arm7_release_ipfs_hash.txt >> release_ipfs_hash.txt - cat in3-win/win_release_ipfs_hash.txt >> release_ipfs_hash.txt - ghr -u slockIt -r in3-c -b $(cat release_ipfs_hash.txt) $CI_COMMIT_TAG release_ipfs_hash.txt + From 2398e615d774e0e7a23b3c10dd67202510859bd8 Mon Sep 17 00:00:00 2001 From: Simon Jentzsch Date: Wed, 6 Nov 2019 23:23:36 +0100 Subject: [PATCH 4/7] first fix --- scripts/build_wasm.sh | 5 +++-- src/bindings/wasm/CMakeLists.txt | 8 ++++++-- src/bindings/wasm/in3.js | 15 +++++++++++++- src/bindings/wasm/wasm.c | 35 ++++++++++++++++++++------------ 4 files changed, 45 insertions(+), 18 deletions(-) diff --git a/scripts/build_wasm.sh b/scripts/build_wasm.sh index 507c262e0..7877de706 100755 --- a/scripts/build_wasm.sh +++ b/scripts/build_wasm.sh @@ -2,8 +2,9 @@ cd ..; rm -rf build/* docker run \ --rm \ - -v $(pwd):/src \ + -v $(pwd):$(pwd) \ docker.slock.it/build-images/cmake:clang10 \ - /bin/bash -c "cd /src/build; emconfigure cmake -DWASM=true -DWASM_EMBED=false -DTRANSPORTS=false -DBUILD_DOC=false -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DCMAKE_BUILD_TYPE=MINSIZEREL .. && make -j8 in3w" + /bin/bash -c "cd /$(pwd)/build; emconfigure cmake -DWASM=true -DWASM_EMBED=false -DTRANSPORTS=false -DBUILD_DOC=false -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DCMAKE_BUILD_TYPE=MINSIZEREL .. && make -j8 in3w" cd scripts +# /bin/bash -c "cd /$(pwd)/build; emconfigure cmake -DWASM=true -DWASM_EMBED=false -DTRANSPORTS=false -DBUILD_DOC=false -DIN3API=true -DIN3_LIB=false -DCMD=false -DUSE_CURL=false -DCMAKE_BUILD_TYPE=MINSIZEREL .. && make -j8 in3w" diff --git a/src/bindings/wasm/CMakeLists.txt b/src/bindings/wasm/CMakeLists.txt index 787eeb36a..c34cc71de 100644 --- a/src/bindings/wasm/CMakeLists.txt +++ b/src/bindings/wasm/CMakeLists.txt @@ -35,8 +35,12 @@ include(${PROJECT_SOURCE_DIR}/compiler.cmake) -set(EMC_PROPS "-O3 -s ASSERTIONS=1 -s TOTAL_MEMORY=524288 -s TOTAL_STACK=262144 -s EXPORT_NAME=in3w -s WASM=1 -s ENVIRONMENT_MAY_BE_SHELL=0 -s FILESYSTEM=0 -s ASYNCIFY=1 -s 'ASYNCIFY_IMPORTS=[\"transport_send\",\"sign_send\"]' -s 'EXTRA_EXPORTED_RUNTIME_METHODS=[\"ccall\", \"cwrap\"]'") -#set(EMC_PROPS "${EMC_PROPS} -s ASSERTIONS=1") +set(EMC_PROPS "-Oz -s TOTAL_MEMORY=1048576 -s TOTAL_STACK=262144 -s EXPORT_NAME=in3w -s WASM=1 -s ENVIRONMENT_MAY_BE_SHELL=0 -s FILESYSTEM=0 -s ASYNCIFY=1 -s 'ASYNCIFY_IMPORTS=[\"transport_send\",\"sign_send\"]' -s 'EXTRA_EXPORTED_RUNTIME_METHODS=[\"ccall\", \"cwrap\"]'") +IF (CMAKE_BUILD_TYPE MATCHES Debug) + set(EMC_PROPS "${EMC_PROPS} -g -s ASSERTIONS=1") +# set(EMC_PROPS "${EMC_PROPS} --source-map-base 'http://localhost/build/bin/' --emit-symbol-map -g -s ASSERTIONS=1 ") +ENDIF (CMAKE_BUILD_TYPE MATCHES Debug) + if (WASM_EMBED) set(EMC_PROPS "${EMC_PROPS} -s SUPPORT_BASE64_EMBEDDING=0 -s SINGLE_FILE=1") diff --git a/src/bindings/wasm/in3.js b/src/bindings/wasm/in3.js index f3e565cef..227d8f742 100644 --- a/src/bindings/wasm/in3.js +++ b/src/bindings/wasm/in3.js @@ -109,6 +109,18 @@ else { } } +let response_counter = 1 +const responses = {} +function add_response(s) { + responses['' + response_counter] = s + return response_counter++ +} +function get_response(n) { + const r = responses['' + n] + delete responses['' + n] + return r +} + // signer-delegate in3w.sign_js = async (clientPtr, type, message, account) => { const c = clients['' + clientPtr] @@ -232,7 +244,8 @@ class IN3 { } // send the request. - in3w.ccall('in3_send_request', 'void', ['number'], [r], { async: true }); + const sendPromise = in3w.ccall('in3_send_request', 'void', ['number'], [r], { async: true }); + // todo take response from promise. }) } diff --git a/src/bindings/wasm/wasm.c b/src/bindings/wasm/wasm.c index e41204097..c18ea537c 100644 --- a/src/bindings/wasm/wasm.c +++ b/src/bindings/wasm/wasm.c @@ -93,17 +93,11 @@ void storage_set_item(void* cptr, char* key, bytes_t* content) { } // clang-format off -EM_JS(void, transport_send, (in3_response_t* result, char* url, char* payload), { - Asyncify.handleSleep(function(wakeUp) { +EM_JS(int, transport_send, (in3_response_t* result, char* url, char* payload), { + return Asyncify.handleSleep(function(wakeUp) { Module.transport(UTF8ToString(url),UTF8ToString(payload)) - .then(res => { - Module.ccall('request_set_result','void',['number','string'],[result,res]); - wakeUp(); - }) - .catch(res => { - Module.ccall('request_set_error','void',['number','string'],[result,res.message || res]); - wakeUp(); - }) + .then(res => wakeUp(add_response(res))) + .catch(res => wakeUp(add_response('Error: '+ (res.message || res)))) }); }); @@ -126,6 +120,11 @@ EM_JS(void, in3_req_done, (in3_ctx_t* ctx), { Module.pendingRequests[ctx+""](); }); +EM_JS(char*, get_c_response, (int n), { + const s = get_response(n); + return s ? allocateUTF8(s) : NULL; +}); + in3_ret_t in3_sign_msg(void* ctx, d_signature_type_t type, bytes_t message, bytes_t account, uint8_t* dst) { char message_hex[(message.len<<1)+3],account_hex[(account.len<<1)+3]; message_hex[0]=account_hex[0]='0'; @@ -140,9 +139,19 @@ in3_ret_t in3_sign_msg(void* ctx, d_signature_type_t type, bytes_t message, byte // clang-format on int in3_fetch(in3_request_t* req) { - for (int i = 0; i < req->urls_len; i++) - transport_send(req->results + i, req->urls[i], req->payload); - return IN3_OK; + int ret = -1; + for (int i = 0; i < req->urls_len; i++) { + char* resp = get_c_response(transport_send(req->results + i, req->urls[i], req->payload)); + if (resp && *resp == *req->payload) { + ret = IN3_OK; + sb_add_chars(&req->results[i].result, resp); + } else if (resp) + sb_add_chars(&req->results[i].error, resp); + else + sb_add_chars(&req->results[i].error, "Unknown error fetching the response"); + if (resp) free(resp); + } + return ret; } in3_t* EMSCRIPTEN_KEEPALIVE in3_create() { From a20d4435d1385e3b0ba6fe02ed64ce4f5adc1c5e Mon Sep 17 00:00:00 2001 From: Simon Jentzsch Date: Wed, 6 Nov 2019 23:34:43 +0100 Subject: [PATCH 5/7] use promise from asyncify --- src/bindings/wasm/in3.js | 50 ++++++++++++++++------------------------ src/bindings/wasm/wasm.c | 4 ---- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/src/bindings/wasm/in3.js b/src/bindings/wasm/in3.js index 227d8f742..2d4909888 100644 --- a/src/bindings/wasm/in3.js +++ b/src/bindings/wasm/in3.js @@ -143,8 +143,7 @@ in3w.onRuntimeInitialized = _ => { o.forEach(_ => _(true)) } -// for all pending Requests we hold the finalize function which will be called by the wasm when done. -in3w.pendingRequests = {} + function throwLastError() { const er = in3w.ccall('in3_last_error', 'string', [], []); @@ -217,36 +216,27 @@ class IN3 { if (!r) throwLastError(); // now send - return new Promise((resolve, reject) => { - // we add the pending request with pointer as key. - in3w.pendingRequests[r + ''] = () => { - // check if it was an error... - const er = in3w.ccall('request_get_error', 'string', ['number'], [r]) - // if not we ask for the result. - const res = er ? '' : in3w.ccall('request_get_result', 'string', ['number'], [r]) - - // we always need to cleanup - in3w.ccall('in3_free_request', 'void', ['number'], [r]) - delete in3w.pendingRequests[r + ''] - - // resolve or reject the promise. - if (er) reject(new Error(er)) - else { - try { - const r = JSON.parse(res) - if (r) delete r.in3 - resolve(r) - } - catch (ex) { - reject(ex) - } - } + // we add the pending request with pointer as key. + function checkResponse(error) { + // check if it was an error... + const er = error || in3w.ccall('request_get_error', 'string', ['number'], [r]) + // if not we ask for the result. + const res = er ? '' : in3w.ccall('request_get_result', 'string', ['number'], [r]) + + // we always need to cleanup + in3w.ccall('in3_free_request', 'void', ['number'], [r]) + + // resolve or reject the promise. + if (er) throw new Error(er) + else { + const r = JSON.parse(res) + if (r) delete r.in3 + return r } + } - // send the request. - const sendPromise = in3w.ccall('in3_send_request', 'void', ['number'], [r], { async: true }); - // todo take response from promise. - }) + // send the request. + return in3w.ccall('in3_send_request', 'void', ['number'], [r], { async: true }).then(checkResponse, checkResponse) } async sendRPC(method, params) { diff --git a/src/bindings/wasm/wasm.c b/src/bindings/wasm/wasm.c index c18ea537c..4d4fa9814 100644 --- a/src/bindings/wasm/wasm.c +++ b/src/bindings/wasm/wasm.c @@ -116,9 +116,6 @@ EM_JS(int, sign_send, (void* wallet, d_signature_type_t type, char* message, cha }); }); -EM_JS(void, in3_req_done, (in3_ctx_t* ctx), { - Module.pendingRequests[ctx+""](); -}); EM_JS(char*, get_c_response, (int n), { const s = get_response(n); @@ -202,7 +199,6 @@ void EMSCRIPTEN_KEEPALIVE in3_send_request(in3_ctx_t* ctx) { in3_set_error(NULL); in3_send_ctx(ctx); ctx->client = NULL; - in3_req_done(ctx); } void EMSCRIPTEN_KEEPALIVE in3_free_request(in3_ctx_t* ctx) { From 37b679bc1bae93c53adf4e2272edcdea2c79dc02 Mon Sep 17 00:00:00 2001 From: Simon Jentzsch Date: Wed, 6 Nov 2019 23:35:39 +0100 Subject: [PATCH 6/7] add comment --- src/bindings/wasm/in3.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bindings/wasm/in3.js b/src/bindings/wasm/in3.js index 2d4909888..736409919 100644 --- a/src/bindings/wasm/in3.js +++ b/src/bindings/wasm/in3.js @@ -109,6 +109,7 @@ else { } } +// we have to store the resultstring in this special map since we cannot call a c-function while unwinded let response_counter = 1 const responses = {} function add_response(s) { From d326e355835c4c232981e784a5e75c87577bb09d Mon Sep 17 00:00:00 2001 From: Simon Jentzsch Date: Wed, 6 Nov 2019 23:38:58 +0100 Subject: [PATCH 7/7] clean up --- src/bindings/wasm/wasm.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/bindings/wasm/wasm.c b/src/bindings/wasm/wasm.c index 4d4fa9814..55d85f7a0 100644 --- a/src/bindings/wasm/wasm.c +++ b/src/bindings/wasm/wasm.c @@ -198,7 +198,6 @@ in3_ctx_t* EMSCRIPTEN_KEEPALIVE in3_create_request(in3_t* c, char* payload) { void EMSCRIPTEN_KEEPALIVE in3_send_request(in3_ctx_t* ctx) { in3_set_error(NULL); in3_send_ctx(ctx); - ctx->client = NULL; } void EMSCRIPTEN_KEEPALIVE in3_free_request(in3_ctx_t* ctx) { @@ -206,10 +205,6 @@ void EMSCRIPTEN_KEEPALIVE in3_free_request(in3_ctx_t* ctx) { free_ctx(ctx); } -bool EMSCRIPTEN_KEEPALIVE request_is_done(in3_ctx_t* r) { - return r->client == NULL; -} - char* EMSCRIPTEN_KEEPALIVE request_get_result(in3_ctx_t* r) { if (r->error) return NULL; // we have a result and copy it @@ -222,14 +217,6 @@ char* EMSCRIPTEN_KEEPALIVE request_get_error(in3_ctx_t* r) { return r->error; } -void EMSCRIPTEN_KEEPALIVE request_set_result(in3_response_t* r, char* data) { - sb_add_chars(&r->result, data); -} - -void EMSCRIPTEN_KEEPALIVE request_set_error(in3_response_t* r, char* data) { - sb_add_chars(&r->error, data); -} - uint8_t* EMSCRIPTEN_KEEPALIVE keccak(uint8_t* data, int len) { bytes_t src = bytes(data, len); uint8_t* result = malloc(32);