diff --git a/bin/nodejs/Makefile.am b/bin/nodejs/Makefile.am index 5923b9f2150129c04b04af9df8639e3b33893780..58f510cfa90309688cc71a11e19184c8f0d70e52 100644 --- a/bin/nodejs/Makefile.am +++ b/bin/nodejs/Makefile.am @@ -1,17 +1,17 @@ include $(top_srcdir)/globals.mk BUILT_SOURCES= \ - ring_wrapper.cpp \ + jami_wrapper.cpp \ build/Makefile \ build/Release/obj.target/dring.node -ring_wrapper.cpp: nodejs_interface.i configurationmanager.i managerimpl.i - $(SWIG) -v -c++ -javascript -node -o ring_wrapper.cpp nodejs_interface.i +jami_wrapper.cpp: nodejs_interface.i configurationmanager.i managerimpl.i + $(SWIG) -v -c++ -javascript -node -o jami_wrapper.cpp nodejs_interface.i -build/Makefile: ring_wrapper.cpp binding.gyp - node-gyp configure --target=1.6.2 --arch=x64 +build/Makefile: jami_wrapper.cpp binding.gyp + node-gyp configure --target=v12.18.2 --arch=x64 -build/Release/obj.target/dring.node: build/Makefile ring_wrapper.cpp callback.h +build/Release/obj.target/dring.node: build/Makefile jami_wrapper.cpp callback.h node-gyp build CLEANFILES= \ diff --git a/bin/nodejs/binding.gyp b/bin/nodejs/binding.gyp index dcdb13ebc411ed51fccb53a97865d64396ad5a9f..245129b0a5e5d3ede6c4bfc25c850ae3f516ce9c 100644 --- a/bin/nodejs/binding.gyp +++ b/bin/nodejs/binding.gyp @@ -2,9 +2,9 @@ "targets": [ { "target_name": "dring", - "sources": [ "ring_wrapper.cpp" ], + "sources": [ "jami_wrapper.cpp" ], 'include_dirs': ['../../src/'], - 'libraries': ['-L<(module_root_dir)/../../src/.libs/', '-lring'], + 'libraries': ['-L<(module_root_dir)/../../src/.libs', '-lring'], 'cflags!': [ '-fno-exceptions' ], 'cflags_cc!': [ '-fno-exceptions' ] } diff --git a/bin/nodejs/callback.h b/bin/nodejs/callback.h index b74390471a011292466254a0cb78c526c82daeae..b6936287e0ccfedbf178f45205f26d07b9cf25d3 100755 --- a/bin/nodejs/callback.h +++ b/bin/nodejs/callback.h @@ -1,6 +1,7 @@ #pragma once -#define V8_STRING_NEW(str) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str.data(), v8::String::kNormalString, str.size()) +#define V8_STRING_NEW(str) v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), str.data(), v8::NewStringType::kNormal, str.size()) +#define V8_STRING_NEW_LOCAL(str) V8_STRING_NEW(str).ToLocalChecked() #include <uv.h> #include <queue> @@ -66,12 +67,12 @@ Persistent<Function>* getPresistentCb(const std::string &signal) { void intVectToJsArray(const std::vector<uint8_t>& intVect, const Local<Array>& jsArray) { for (unsigned int i = 0; i < intVect.size(); i++) - jsArray->Set(SWIGV8_INTEGER_NEW_UNS(i), SWIGV8_INTEGER_NEW(intVect[i])); + jsArray->Set(SWIGV8_CURRENT_CONTEXT(), SWIGV8_INTEGER_NEW_UNS(i), SWIGV8_INTEGER_NEW(intVect[i])); } void stringMapToJsMap(const std::map<std::string, std::string>& strmap, const Local<Object> &jsMap) { for (auto& kvpair : strmap) - jsMap->Set(V8_STRING_NEW(std::get<0>(kvpair)), V8_STRING_NEW(std::get<1>(kvpair))); + jsMap->Set(SWIGV8_CURRENT_CONTEXT(), V8_STRING_NEW_LOCAL(std::get<0>(kvpair)), V8_STRING_NEW_LOCAL(std::get<1>(kvpair))); } void setCallback(const std::string& signal, Local<Function>& func) { @@ -87,12 +88,12 @@ void setCallback(const std::string& signal, Local<Function>& func) { } void parseCbMap(const Local<Value>& callbackMap) { - Local<Object> cbAssocArray = callbackMap->ToObject(); - Local<Array> props = cbAssocArray->GetOwnPropertyNames(); + Local<Object> cbAssocArray = callbackMap->ToObject(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); + Local<Array> props = cbAssocArray->GetOwnPropertyNames(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); for (uint32_t i = 0; i < props->Length(); ++i) { - const Local<Value> key_local = props->Get(i); - std::string key = *String::Utf8Value(key_local); - Handle<Object> buffer = cbAssocArray->Get(V8_STRING_NEW(key))->ToObject(); + const Local<Value> key_local = props->Get(SWIGV8_CURRENT_CONTEXT(), i).ToLocalChecked(); + std::string key = *String::Utf8Value(Isolate::GetCurrent(), key_local); + Local<Object> buffer = cbAssocArray->Get(SWIGV8_CURRENT_CONTEXT(), V8_STRING_NEW_LOCAL(key)).ToLocalChecked()->ToObject(SWIGV8_CURRENT_CONTEXT()).ToLocalChecked(); Local<Function> func = Local<Function>::Cast(buffer); setCallback(key, func); } @@ -113,8 +114,12 @@ void registrationStateChanged(const std::string& account_id, const std::string& pendingSignals.emplace([account_id, state, code, detail_str]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), registrationStateChangedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), V8_STRING_NEW(state), SWIGV8_INTEGER_NEW(code), V8_STRING_NEW(detail_str)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 4, callback_args); + Local<Value> callback_args[] = { + V8_STRING_NEW_LOCAL(account_id), + V8_STRING_NEW_LOCAL(state), + SWIGV8_INTEGER_NEW(code), + V8_STRING_NEW_LOCAL(detail_str)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); @@ -129,8 +134,8 @@ void volatileDetailsChanged(const std::string& account_id, const std::map<std::s if (!func.IsEmpty()) { Local<Object> jsMap = SWIGV8_OBJECT_NEW(); stringMapToJsMap(details, jsMap); - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), jsMap}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 2, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), jsMap}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 2, callback_args); } }); @@ -144,7 +149,7 @@ void accountsChanged() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), accountsChangedCb); if (!func.IsEmpty()) { Local<Value> callback_args[] = {}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 0, callback_args); + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 0, callback_args); } }); @@ -157,8 +162,8 @@ void contactAdded(const std::string& account_id, const std::string& uri, bool co pendingSignals.emplace([account_id, uri, confirmed]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), contactAddedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), V8_STRING_NEW(uri), SWIGV8_BOOLEAN_NEW(confirmed)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), V8_STRING_NEW_LOCAL(uri), SWIGV8_BOOLEAN_NEW(confirmed)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -171,8 +176,8 @@ void contactRemoved(const std::string& account_id, const std::string& uri, bool pendingSignals.emplace([account_id, uri, banned]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), contactRemovedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), V8_STRING_NEW(uri), SWIGV8_BOOLEAN_NEW(banned)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), V8_STRING_NEW_LOCAL(uri), SWIGV8_BOOLEAN_NEW(banned)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -185,8 +190,8 @@ void exportOnRingEnded(const std::string& account_id, int state, const std::stri pendingSignals.emplace([account_id, state, pin]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), exportOnRingEndedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), SWIGV8_INTEGER_NEW(state), V8_STRING_NEW(pin)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW(state), V8_STRING_NEW_LOCAL(pin)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -199,8 +204,8 @@ void nameRegistrationEnded(const std::string& account_id, int state, const std:: pendingSignals.emplace([account_id, state, name]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), nameRegistrationEndedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), SWIGV8_INTEGER_NEW(state), V8_STRING_NEW(name)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW(state), V8_STRING_NEW_LOCAL(name)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -213,8 +218,8 @@ void registeredNameFound(const std::string& account_id, int state, const std::st pendingSignals.emplace([account_id, state, address, name]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), registeredNameFoundCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), SWIGV8_INTEGER_NEW(state), V8_STRING_NEW(address), V8_STRING_NEW(name)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 4, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW(state), V8_STRING_NEW_LOCAL(address), V8_STRING_NEW_LOCAL(name)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); @@ -227,8 +232,8 @@ void accountMessageStatusChanged(const std::string& account_id, uint64_t message pendingSignals.emplace([account_id, message_id, to, state]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), accountMessageStatusChangedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), SWIGV8_INTEGER_NEW_UNS(message_id), V8_STRING_NEW(to), SWIGV8_INTEGER_NEW(state)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 4, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW_UNS(message_id), V8_STRING_NEW_LOCAL(to), SWIGV8_INTEGER_NEW(state)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); @@ -243,8 +248,8 @@ void incomingAccountMessage(const std::string& account_id, const std::string& me if (!func.IsEmpty()) { Local<Object> jsMap = SWIGV8_OBJECT_NEW(); stringMapToJsMap(payloads, jsMap); - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), V8_STRING_NEW(from), jsMap}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), V8_STRING_NEW_LOCAL(from), jsMap}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -259,8 +264,8 @@ void knownDevicesChanged(const std::string& account_id, const std::map<std::stri if (!func.IsEmpty()) { Local<Object> jsMap = SWIGV8_OBJECT_NEW(); stringMapToJsMap(devices, jsMap); - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), jsMap}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 2, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), jsMap}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 2, callback_args); } }); @@ -276,8 +281,8 @@ void incomingTrustRequest(const std::string& account_id, const std::string& from if (!func.IsEmpty()) { Local<Array> jsArray = SWIGV8_ARRAY_NEW(payload.size()); intVectToJsArray(payload, jsArray); - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), V8_STRING_NEW(from), jsArray, SWIGV8_NUMBER_NEW(received)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 4, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), V8_STRING_NEW_LOCAL(from), jsArray, SWIGV8_NUMBER_NEW(received)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); uv_async_send(&signalAsync); @@ -289,8 +294,8 @@ void callStateChanged(const std::string& call_id, const std::string& state, int pendingSignals.emplace([call_id, state, detail_code]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), callStateChangedCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(call_id), V8_STRING_NEW(state), SWIGV8_INTEGER_NEW(detail_code)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(call_id), V8_STRING_NEW_LOCAL(state), SWIGV8_INTEGER_NEW(detail_code)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); @@ -305,8 +310,8 @@ void incomingMessage(const std::string& id, const std::string& from, const std:: if (!func.IsEmpty()) { Local<Object> jsMap = SWIGV8_OBJECT_NEW(); stringMapToJsMap(messages, jsMap); - Local<Value> callback_args[] = {V8_STRING_NEW(id), V8_STRING_NEW(from), jsMap}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 4, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(id), V8_STRING_NEW_LOCAL(from), jsMap}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args); } }); @@ -319,8 +324,8 @@ void incomingCall(const std::string& account_id, const std::string& call_id, con pendingSignals.emplace([account_id, call_id, from]() { Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), incomingCallCb); if (!func.IsEmpty()) { - Local<Value> callback_args[] = {V8_STRING_NEW(account_id), V8_STRING_NEW(call_id), V8_STRING_NEW(from)}; - func->Call(SWIGV8_CURRENT_CONTEXT()->Global(), 3, callback_args); + Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), V8_STRING_NEW_LOCAL(call_id), V8_STRING_NEW_LOCAL(from)}; + func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args); } }); diff --git a/bin/nodejs/index.js b/bin/nodejs/index.js index e9004bbabebe2ffc48ba50643fb6ef89765a3126..94176fc04e00b0dd5bebc3671abbc98a7982a140 100755 --- a/bin/nodejs/index.js +++ b/bin/nodejs/index.js @@ -21,7 +21,7 @@ class JamiDaemon { constructor(callbackMap) { - if(callbackMap){ + if (callbackMap){ this.dring = require("./build/Release/dring.node"); this.dring.init(callbackMap); } diff --git a/bin/nodejs/meson.build b/bin/nodejs/meson.build index df48ccec4b1031e1f892d8bb09ab54becb31202c..14b339c2030db445fe9defa64218912cda8c49ee 100644 --- a/bin/nodejs/meson.build +++ b/bin/nodejs/meson.build @@ -5,7 +5,7 @@ nodejs_wrapper_target = custom_target('nodejs.wrapper', ) nodejs_makefile_target = custom_target('nodejs.makefile', - command: [prognodegyp, 'configure', '--target=1.6.2', '--arch=x64'], + command: [prognodegyp, 'configure', '--target=v12.18.2', '--arch=x64'], output: 'build/Makefile', depends: nodejs_wrapper_target ) diff --git a/bin/nodejs/nodejs_interface.i b/bin/nodejs/nodejs_interface.i index 3915d19ca7a0690dcb3cd04647e4ec1b0697cb2e..5ec434ade90048fb4271fa6e9836f3de5d720cfe 100644 --- a/bin/nodejs/nodejs_interface.i +++ b/bin/nodejs/nodejs_interface.i @@ -20,7 +20,7 @@ */ /* File : nodejs_interface.i */ -%module (directors="1") Ringservice +%module (directors="1") JamiService #define SWIG_JAVA_ATTACH_CURRENT_THREAD_AS_DAEMON %include "typemaps.i" @@ -88,9 +88,18 @@ namespace std { } //typemap for handling map of functions -%typemap(in) const v8::Handle<v8::Value> { +%typemap(in) SWIGV8_VALUE { $1 = $input; } +%typemap(in) const SWIGV8_VALUE { + $1 = $input; +} +%typemap(varin) SWIGV8_VALUE { + $result = $input; +} +%typemap(varin) const SWIGV8_VALUE { + $result = $input; +} %inline %{ @@ -98,7 +107,7 @@ namespace std { * that are not declared elsewhere in the c++ code */ -void init(const v8::Handle<v8::Value> &funcMap){ +void init(const SWIGV8_VALUE& funcMap){ parseCbMap(funcMap); uv_async_init(uv_default_loop(), &signalAsync, handlePendingSignals); @@ -129,7 +138,7 @@ void init(const v8::Handle<v8::Value> &funcMap){ exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&incomingTrustRequest, _1, _2, _3, _4 )), }; - if (!DRing::init(static_cast<DRing::InitFlag>(DRing::DRING_FLAG_DEBUG))) + if (!DRing::init(static_cast<DRing::InitFlag>(DRing::DRING_FLAG_DEBUG | DRing::DRING_FLAG_CONSOLE_LOG))) return; registerSignalHandlers(configEvHandlers);