mirror of
https://gitee.com/openharmony/communication_ipc
synced 2024-11-27 01:51:13 +00:00
fix ipc js interfaces bug
Signed-off-by: liangshenglin1 <liangshenglin1@huawei.com>
This commit is contained in:
parent
1cdfa196a3
commit
001df61dd8
@ -15,26 +15,57 @@
|
||||
|
||||
const rpcSo = requireInternal("rpc");
|
||||
|
||||
const EXC_INSECURITY = -1;
|
||||
const EXC_ILLEGAL_ARGUMENT = -3;
|
||||
const EXC_NULL_POINTER = -4;
|
||||
const EXC_ILLEGAL_STATE = -5;
|
||||
const EXC_UNSUPPORTED_OPERATION = -7;
|
||||
const EXC_INDEX_OUTOF_BOUNDS = -10;
|
||||
const EXC_NEGATIVE_ARRAY_SIZE = -11;
|
||||
const EXC_ARRAY_STORE = -12;
|
||||
const EXC_CLASS_CAST = -13;
|
||||
const EXC_PARCEL_CAPACITY_ERROR = -14;
|
||||
const EXC_REMOTE_TRANSACTION_FAILED = -200;
|
||||
|
||||
let MessageParcel = rpcSo.MessageParcel;
|
||||
let IPCSkeleton = rpcSo.IPCSkeleton;
|
||||
let RemoteObject = rpcSo.RemoteObject;
|
||||
let NAPIMessageParcel = rpcSo.MessageParcel;
|
||||
let NAPIIPCSkeleton = rpcSo.IPCSkeleton;
|
||||
let NAPIRemoteObject = rpcSo.RemoteObject;
|
||||
let RemoteProxy = rpcSo.RemoteProxy;
|
||||
let MessageOption = rpcSo.MessageOption;
|
||||
|
||||
class RemoteObject extends NAPIRemoteObject {
|
||||
constructor(descriptor) {
|
||||
if (typeof descriptor === 'string' && descriptor.length > 0) {
|
||||
super(descriptor, descriptor.length);
|
||||
this.descriptor = descriptor;
|
||||
} else {
|
||||
throw new NullPointerException("invalid descriptor");
|
||||
}
|
||||
}
|
||||
|
||||
addDeathRecipient(recipient, flags) {
|
||||
return false;
|
||||
}
|
||||
|
||||
removeDeathRecipient(recipient, flags) {
|
||||
return false;
|
||||
}
|
||||
|
||||
isObjectDead() {
|
||||
return false;
|
||||
}
|
||||
|
||||
attachLocalInterface(localInterface, descriptor) {
|
||||
this.descriptor = descriptor;
|
||||
this.interface = localInterface;
|
||||
}
|
||||
|
||||
queryLocalInterface(descriptor) {
|
||||
if (this.descriptor === descriptor) {
|
||||
return this.interface;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class IPCSkeleton extends NAPIIPCSkeleton {
|
||||
static setCallingIdentity(identity) {
|
||||
if (typeof identity === 'string') {
|
||||
return NAPIIPCSkeleton.setCallingIdentity(identity, identity.length);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class Exception {
|
||||
message;
|
||||
constructor(msg) {
|
||||
this.message = msg;
|
||||
}
|
||||
@ -57,101 +88,110 @@ class RemoteException extends Exception {}
|
||||
class ParcelException extends Exception {}
|
||||
class RuntimeException extends Exception {}
|
||||
|
||||
class MessageParcel extends NAPIMessageParcel {
|
||||
static EXC_INSECURITY = -1;
|
||||
static EXC_ILLEGAL_ARGUMENT = -3;
|
||||
static EXC_NULL_POINTER = -4;
|
||||
static EXC_ILLEGAL_STATE = -5;
|
||||
static EXC_UNSUPPORTED_OPERATION = -7;
|
||||
static EXC_INDEX_OUTOF_BOUNDS = -10;
|
||||
static EXC_NEGATIVE_ARRAY_SIZE = -11;
|
||||
static EXC_ARRAY_STORE = -12;
|
||||
static EXC_CLASS_CAST = -13;
|
||||
static EXC_PARCEL_CAPACITY_ERROR = -14;
|
||||
static EXC_REMOTE_TRANSACTION_FAILED = -200;
|
||||
|
||||
MessageParcel.prototype.createException = function(code, msg) {
|
||||
switch (code) {
|
||||
case EXC_INSECURITY: {
|
||||
return new SecurityException(msg);
|
||||
}
|
||||
case EXC_ILLEGAL_ARGUMENT: {
|
||||
return new IllegalArgumentException(msg);
|
||||
}
|
||||
case EXC_NULL_POINTER: {
|
||||
return new NullPointerException(msg);
|
||||
}
|
||||
case EXC_ILLEGAL_STATE: {
|
||||
return new IllegalStateException(msg);
|
||||
}
|
||||
case EXC_UNSUPPORTED_OPERATION: {
|
||||
return new UnsupportedOperationException(msg);
|
||||
}
|
||||
case EXC_INDEX_OUTOF_BOUNDS: {
|
||||
return new IndexOutOfBoundsException(msg);
|
||||
}
|
||||
case EXC_NEGATIVE_ARRAY_SIZE: {
|
||||
return new NegativeArraySizeException(msg);
|
||||
}
|
||||
case EXC_ARRAY_STORE: {
|
||||
return new ArrayStoreException(msg);
|
||||
}
|
||||
case EXC_CLASS_CAST: {
|
||||
return new ClassCastException(msg);
|
||||
}
|
||||
case EXC_REMOTE_TRANSACTION_FAILED: {
|
||||
return new RemoteException(msg);
|
||||
}
|
||||
case EXC_PARCEL_CAPACITY_ERROR: {
|
||||
return new ParcelException(msg);
|
||||
}
|
||||
default: {
|
||||
return new RuntimeException("Unknown exception code: " + code + " msg " + msg);
|
||||
createException(code, msg) {
|
||||
switch (code) {
|
||||
case MessageParcel.EXC_INSECURITY: {
|
||||
return new SecurityException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_ILLEGAL_ARGUMENT: {
|
||||
return new IllegalArgumentException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_NULL_POINTER: {
|
||||
return new NullPointerException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_ILLEGAL_STATE: {
|
||||
return new IllegalStateException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_UNSUPPORTED_OPERATION: {
|
||||
return new UnsupportedOperationException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_INDEX_OUTOF_BOUNDS: {
|
||||
return new IndexOutOfBoundsException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_NEGATIVE_ARRAY_SIZE: {
|
||||
return new NegativeArraySizeException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_ARRAY_STORE: {
|
||||
return new ArrayStoreException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_CLASS_CAST: {
|
||||
return new ClassCastException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_REMOTE_TRANSACTION_FAILED: {
|
||||
return new RemoteException(msg);
|
||||
}
|
||||
case MessageParcel.EXC_PARCEL_CAPACITY_ERROR: {
|
||||
return new ParcelException(msg);
|
||||
}
|
||||
default: {
|
||||
return new RuntimeException("Unknown exception code: " + code + " msg " + msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MessageParcel.prototype.writeException = function(exception) {
|
||||
let code = 0;
|
||||
if (exception instanceof SecurityException) {
|
||||
code = EXC_INSECURITY;
|
||||
} else if (exception instanceof IllegalArgumentException) {
|
||||
code = EXC_ILLEGAL_ARGUMENT;
|
||||
} else if (exception instanceof NullPointerException) {
|
||||
code = EXC_NULL_POINTER;
|
||||
} else if (exception instanceof IllegalStateException) {
|
||||
code = EXC_ILLEGAL_STATE;
|
||||
} else if (exception instanceof UnsupportedOperationException) {
|
||||
code = EXC_UNSUPPORTED_OPERATION;
|
||||
} else if (exception instanceof IndexOutOfBoundsException) {
|
||||
code = EXC_INDEX_OUTOF_BOUNDS;
|
||||
} else if (exception instanceof NegativeArraySizeException) {
|
||||
code = EXC_NEGATIVE_ARRAY_SIZE;
|
||||
} else if (exception instanceof ArrayStoreException) {
|
||||
code = EXC_ARRAY_STORE;
|
||||
} else if (exception instanceof ClassCastException) {
|
||||
code = EXC_CLASS_CAST;
|
||||
} else if (exception instanceof RemoteException) {
|
||||
code = EXC_REMOTE_TRANSACTION_FAILED;
|
||||
} else if (exception instanceof ParcelException) {
|
||||
code = EXC_PARCEL_CAPACITY_ERROR;
|
||||
} else {
|
||||
code = 0;
|
||||
}
|
||||
this.writeInt(code);
|
||||
if (code === 0) {
|
||||
if (exception instanceof RuntimeException) {
|
||||
writeException(exception) {
|
||||
let code = 0;
|
||||
if (exception instanceof SecurityException) {
|
||||
code = MessageParcel.EXC_INSECURITY;
|
||||
} else if (exception instanceof IllegalArgumentException) {
|
||||
code = MessageParcel.EXC_ILLEGAL_ARGUMENT;
|
||||
} else if (exception instanceof NullPointerException) {
|
||||
code = MessageParcel.EXC_NULL_POINTER;
|
||||
} else if (exception instanceof IllegalStateException) {
|
||||
code = MessageParcel.EXC_ILLEGAL_STATE;
|
||||
} else if (exception instanceof UnsupportedOperationException) {
|
||||
code = MessageParcel.EXC_UNSUPPORTED_OPERATION;
|
||||
} else if (exception instanceof IndexOutOfBoundsException) {
|
||||
code = MessageParcel.EXC_INDEX_OUTOF_BOUNDS;
|
||||
} else if (exception instanceof NegativeArraySizeException) {
|
||||
code = MessageParcel.EXC_NEGATIVE_ARRAY_SIZE;
|
||||
} else if (exception instanceof ArrayStoreException) {
|
||||
code = MessageParcel.EXC_ARRAY_STORE;
|
||||
} else if (exception instanceof ClassCastException) {
|
||||
code = MessageParcel.EXC_CLASS_CAST;
|
||||
} else if (exception instanceof RemoteException) {
|
||||
code = MessageParcel.EXC_REMOTE_TRANSACTION_FAILED;
|
||||
} else if (exception instanceof ParcelException) {
|
||||
code = MessageParcel.EXC_PARCEL_CAPACITY_ERROR;
|
||||
} else {
|
||||
code = 0;
|
||||
}
|
||||
this.writeInt(code);
|
||||
if (code === 0) {
|
||||
throw new RuntimeException(exception.getMessage());
|
||||
}
|
||||
throw new RuntimeException(exception.getMessage());
|
||||
this.writeString(exception.getMessage());
|
||||
}
|
||||
this.writeString(exception.getMessage());
|
||||
}
|
||||
|
||||
MessageParcel.prototype.writeNoException = function() {
|
||||
this.writeInt(0);
|
||||
}
|
||||
writeNoException() {
|
||||
this.writeInt(0);
|
||||
}
|
||||
|
||||
MessageParcel.prototype.readException = function() {
|
||||
let code = this.readInt();
|
||||
readException() {
|
||||
let code = this.readInt();
|
||||
if (code === 0) {
|
||||
return;
|
||||
}
|
||||
let msg = this.readString();
|
||||
let exception = this.createException(code, msg);
|
||||
return exception;
|
||||
}
|
||||
throw exception;
|
||||
}
|
||||
|
||||
MessageParcel.prototype.createRemoteObjectArray = function() {
|
||||
let num = this.readInt();
|
||||
createRemoteObjectArray() {
|
||||
let num = this.readInt();
|
||||
if (num <= 0) {
|
||||
return null;
|
||||
}
|
||||
@ -160,46 +200,35 @@ MessageParcel.prototype.createRemoteObjectArray = function() {
|
||||
list[i] = this.readRemoteObject();
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
MessageParcel.prototype.writeRemoteObjectArray = function(objects) {
|
||||
if (objects === null || objects.length <= 0 ) {
|
||||
this.writeInt(-1);
|
||||
return false;
|
||||
}
|
||||
|
||||
let num = objects.length;
|
||||
this.writeInt(num);
|
||||
for (let i = 0; i < num; i ++) {
|
||||
this.writeRemoteObject(objects[i]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
writeRemoteObjectArray(objects) {
|
||||
if (objects === null || objects.length <= 0) {
|
||||
this.writeInt(-1);
|
||||
return false;
|
||||
}
|
||||
|
||||
MessageParcel.prototype.readRemoteObjectArray = function(objects) {
|
||||
if (objects === null) {
|
||||
return;
|
||||
let num = objects.length;
|
||||
this.writeInt(num);
|
||||
for (let i = 0; i < num; i++) {
|
||||
this.writeRemoteObject(objects[i]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
let num = this.readInt();
|
||||
if (num !== objects.length) {
|
||||
return;
|
||||
readRemoteObjectArray(objects) {
|
||||
if (objects === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
let num = this.readInt();
|
||||
if (num !== objects.length) {
|
||||
return;
|
||||
}
|
||||
for (let i = 0; i < num; i++) {
|
||||
objects[i] = this.readRemoteObject();
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < num; i ++) {
|
||||
objects[i] = this.readRemoteObject();
|
||||
}
|
||||
}
|
||||
|
||||
RemoteObject.prototype.addDeathRecipient = function(recipient, flags) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RemoteObject.prototype.removeDeathRecipient = function(recipient, flags) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RemoteObject.prototype.isObjectDead = function() {
|
||||
return false;
|
||||
}
|
||||
|
||||
export default {
|
||||
|
@ -55,6 +55,8 @@ EXTERN_C_END
|
||||
napi_value NAPI_IPCSkeleton_setCallingIdentity(napi_env env, napi_callback_info info);
|
||||
|
||||
// RemoteObject napi methods
|
||||
napi_value NAPI_RemoteObject_getInterfaceDescriptor(napi_env env, napi_callback_info info);
|
||||
|
||||
napi_value NAPI_RemoteObject_getCallingPid(napi_env env, napi_callback_info info);
|
||||
|
||||
napi_value NAPI_RemoteObject_getCallingUid(napi_env env, napi_callback_info info);
|
||||
@ -67,6 +69,8 @@ EXTERN_C_END
|
||||
|
||||
napi_value NAPI_RemoteProxy_sendRequest(napi_env env, napi_callback_info info);
|
||||
|
||||
napi_value NAPI_RemoteProxy_queryLocalInterface(napi_env env, napi_callback_info info);
|
||||
|
||||
napi_value NAPI_RemoteProxy_addDeathRecipient(napi_env env, napi_callback_info info);
|
||||
|
||||
napi_value NAPI_RemoteProxy_removeDeathRecipient(napi_env env, napi_callback_info info);
|
||||
|
@ -42,11 +42,11 @@ napi_value NapiOhosRpcMessageOptionGetFlags(napi_env env, napi_callback_info inf
|
||||
napi_value NapiOhosRpcMessageOptionSetFlags(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value thisVar = nullptr;
|
||||
size_t argc;
|
||||
size_t argc = 1;
|
||||
napi_value argv[1] = { 0 };
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, thisVar != nullptr, "failed to get js message option object");
|
||||
napi_valuetype valueType;
|
||||
NAPI_ASSERT(env, thisVar != nullptr && argv[0] != nullptr, "failed to get js message option object");
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
int32_t flags = 0;
|
||||
@ -85,11 +85,11 @@ napi_value NapiOhosRpcMessageOptionGetWaittime(napi_env env, napi_callback_info
|
||||
napi_value NapiOhosRpcMessageOptionSetWaittime(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value thisVar = nullptr;
|
||||
size_t argc;
|
||||
size_t argc = 1;
|
||||
napi_value argv[1] = { 0 };
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, thisVar != nullptr, "failed to get js message option object");
|
||||
napi_valuetype valueType;
|
||||
NAPI_ASSERT(env, thisVar != nullptr && argv[0] != nullptr, "failed to get js message option object");
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
int32_t waittime = 0;
|
||||
@ -98,7 +98,7 @@ napi_value NapiOhosRpcMessageOptionSetWaittime(napi_env env, napi_callback_info
|
||||
MessageOption *option = nullptr;
|
||||
status = napi_unwrap(env, thisVar, (void **)&option);
|
||||
NAPI_ASSERT(env, option != nullptr, "failed to get native message option");
|
||||
option->SetFlags(waittime);
|
||||
option->SetWaitTime(waittime);
|
||||
napi_value result = nullptr;
|
||||
napi_get_undefined(env, &result);
|
||||
return result;
|
||||
|
@ -97,7 +97,7 @@ napi_value NAPI_MessageParcel::JS_writeByte(napi_env env, napi_callback_info inf
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -122,7 +122,7 @@ napi_value NAPI_MessageParcel::JS_writeShort(napi_env env, napi_callback_info in
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -147,7 +147,7 @@ napi_value NAPI_MessageParcel::JS_writeInt(napi_env env, napi_callback_info info
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -172,7 +172,7 @@ napi_value NAPI_MessageParcel::JS_writeLong(napi_env env, napi_callback_info inf
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -197,7 +197,7 @@ napi_value NAPI_MessageParcel::JS_writeFloat(napi_env env, napi_callback_info in
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -222,7 +222,7 @@ napi_value NAPI_MessageParcel::JS_writeDouble(napi_env env, napi_callback_info i
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -247,7 +247,7 @@ napi_value NAPI_MessageParcel::JS_writeBoolean(napi_env env, napi_callback_info
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_boolean, "type mismatch for parameter 1");
|
||||
|
||||
@ -272,7 +272,7 @@ napi_value NAPI_MessageParcel::JS_writeChar(napi_env env, napi_callback_info inf
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_string, "type mismatch for parameter 1");
|
||||
|
||||
@ -309,7 +309,7 @@ napi_value NAPI_MessageParcel::JS_writeStringWithLength(napi_env env, napi_callb
|
||||
napi_unwrap(env, thisVar, (void **)&napiParcel);
|
||||
NAPI_ASSERT(env, napiParcel != nullptr, "napiParcel is null");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_string, "type mismatch for parameter 1");
|
||||
|
||||
@ -343,11 +343,11 @@ napi_value NAPI_MessageParcel::JS_writeByteArray(napi_env env, napi_callback_inf
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isTypedArray;
|
||||
bool isTypedArray = false;
|
||||
napi_is_typedarray(env, argv[0], &isTypedArray);
|
||||
NAPI_ASSERT(env, isTypedArray == true, "type mismatch for parameter 1");
|
||||
|
||||
napi_typedarray_type typedarrayType;
|
||||
napi_typedarray_type typedarrayType = napi_uint8_array;
|
||||
size_t typedarrayLength = 0;
|
||||
void *typedarrayBufferPtr = nullptr;
|
||||
napi_value tmpArrayBuffer = nullptr;
|
||||
@ -361,7 +361,7 @@ napi_value NAPI_MessageParcel::JS_writeByteArray(napi_env env, napi_callback_inf
|
||||
NAPI_MessageParcel *napiParcel = nullptr;
|
||||
napi_unwrap(env, thisVar, (void **)&napiParcel);
|
||||
NAPI_ASSERT(env, napiParcel != nullptr, "napiParcel is null");
|
||||
size_t len = (typedarrayLength / BYTE_SIZE_32) + (typedarrayLength % BYTE_SIZE_32 == 0 ? 0 : 1);
|
||||
size_t len = ((typedarrayLength / BYTE_SIZE_32) + (typedarrayLength % BYTE_SIZE_32 == 0 ? 0 : 1));
|
||||
DBINDER_LOGI("messageparcel WriteBuffer len = %{public}d", (int)(len));
|
||||
CHECK_WRITE_CAPACITY(env, BYTE_SIZE_32 * (len + 1), napiParcel);
|
||||
napiParcel->nativeParcel_->WriteUint32(typedarrayLength);
|
||||
@ -380,7 +380,7 @@ napi_value NAPI_MessageParcel::JS_writeShortArray(napi_env env, napi_callback_in
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -426,7 +426,7 @@ napi_value NAPI_MessageParcel::JS_writeIntArray(napi_env env, napi_callback_info
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -476,7 +476,7 @@ napi_value NAPI_MessageParcel::JS_writeLongArray(napi_env env, napi_callback_inf
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -524,7 +524,7 @@ napi_value NAPI_MessageParcel::JS_writeFloatArray(napi_env env, napi_callback_in
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -571,7 +571,7 @@ napi_value NAPI_MessageParcel::JS_writeDoubleArray(napi_env env, napi_callback_i
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -618,7 +618,7 @@ napi_value NAPI_MessageParcel::JS_writeBooleanArray(napi_env env, napi_callback_
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -665,7 +665,7 @@ napi_value NAPI_MessageParcel::JS_writeCharArray(napi_env env, napi_callback_inf
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -722,7 +722,7 @@ napi_value NAPI_MessageParcel::JS_writeString(napi_env env, napi_callback_info i
|
||||
napi_unwrap(env, thisVar, (void **)&napiParcel);
|
||||
NAPI_ASSERT(env, napiParcel != nullptr, "napiParcel is null");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_string, "type mismatch for parameter 1");
|
||||
|
||||
@ -754,7 +754,7 @@ napi_value NAPI_MessageParcel::JS_writeStringArray(napi_env env, napi_callback_i
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -845,7 +845,7 @@ napi_value NAPI_MessageParcel::JS_writeSequenceableArray(napi_env env, napi_call
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1068,7 +1068,7 @@ napi_value NAPI_MessageParcel::JS_setSize(napi_env env, napi_callback_info info)
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -1094,7 +1094,7 @@ napi_value NAPI_MessageParcel::JS_setCapacity(napi_env env, napi_callback_info i
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -1171,7 +1171,7 @@ napi_value NAPI_MessageParcel::JS_rewindRead(napi_env env, napi_callback_info in
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -1213,7 +1213,7 @@ napi_value NAPI_MessageParcel::JS_rewindWrite(napi_env env, napi_callback_info i
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
|
||||
@ -1243,7 +1243,7 @@ napi_value NAPI_MessageParcel::JS_readByteArray(napi_env env, napi_callback_info
|
||||
uint32_t maxBytesLen = 40960;
|
||||
uint32_t arrayBufferLength = napiParcel->nativeParcel_->ReadUint32();
|
||||
NAPI_ASSERT(env, arrayBufferLength < maxBytesLen, "byte array length too large");
|
||||
size_t len = (arrayBufferLength / BYTE_SIZE_32) + (arrayBufferLength % BYTE_SIZE_32 == 0 ? 0 : 1);
|
||||
size_t len = ((arrayBufferLength / BYTE_SIZE_32) + (arrayBufferLength % BYTE_SIZE_32 == 0 ? 0 : 1));
|
||||
DBINDER_LOGI("messageparcel WriteBuffer typedarrayLength = %{public}d", (int)(len));
|
||||
|
||||
if (argc > 0) {
|
||||
@ -1253,7 +1253,7 @@ napi_value NAPI_MessageParcel::JS_readByteArray(napi_env env, napi_callback_info
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isTypedArray;
|
||||
bool isTypedArray = false;
|
||||
napi_is_typedarray(env, argv[0], &isTypedArray);
|
||||
NAPI_ASSERT(env, isTypedArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1312,7 +1312,7 @@ napi_value NAPI_MessageParcel::JS_readShortArray(napi_env env, napi_callback_inf
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1363,7 +1363,7 @@ napi_value NAPI_MessageParcel::JS_readIntArray(napi_env env, napi_callback_info
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1414,7 +1414,7 @@ napi_value NAPI_MessageParcel::JS_readLongArray(napi_env env, napi_callback_info
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1465,7 +1465,7 @@ napi_value NAPI_MessageParcel::JS_readFloatArray(napi_env env, napi_callback_inf
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1516,7 +1516,7 @@ napi_value NAPI_MessageParcel::JS_readDoubleArray(napi_env env, napi_callback_in
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1567,7 +1567,7 @@ napi_value NAPI_MessageParcel::JS_readBooleanArray(napi_env env, napi_callback_i
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1619,7 +1619,7 @@ napi_value NAPI_MessageParcel::JS_readCharArray(napi_env env, napi_callback_info
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1670,7 +1670,7 @@ napi_value NAPI_MessageParcel::JS_readStringArray(napi_env env, napi_callback_in
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
|
||||
bool isArray;
|
||||
bool isArray = false;
|
||||
napi_is_array(env, argv[0], &isArray);
|
||||
NAPI_ASSERT(env, isArray == true, "type mismatch for parameter 1");
|
||||
|
||||
@ -1816,7 +1816,7 @@ napi_value NAPI_MessageParcel::JS_writeInterfaceToken(napi_env env, napi_callbac
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_string, "type mismatch for parameter");
|
||||
|
||||
@ -1865,26 +1865,6 @@ napi_value NAPI_MessageParcel::Export(napi_env env, napi_value exports)
|
||||
napi_property_descriptor properties[] = {
|
||||
DECLARE_NAPI_STATIC_FUNCTION("create", NAPI_MessageParcel::JS_create),
|
||||
DECLARE_NAPI_FUNCTION("reclaim", NAPI_MessageParcel::JS_reclaim),
|
||||
DECLARE_NAPI_FUNCTION("writeByte", NAPI_MessageParcel::JS_writeByte),
|
||||
DECLARE_NAPI_FUNCTION("writeShort", NAPI_MessageParcel::JS_writeShort),
|
||||
DECLARE_NAPI_FUNCTION("writeInt", NAPI_MessageParcel::JS_writeInt),
|
||||
DECLARE_NAPI_FUNCTION("writeLong", NAPI_MessageParcel::JS_writeLong),
|
||||
DECLARE_NAPI_FUNCTION("writeFloat", NAPI_MessageParcel::JS_writeFloat),
|
||||
DECLARE_NAPI_FUNCTION("writeDouble", NAPI_MessageParcel::JS_writeDouble),
|
||||
DECLARE_NAPI_FUNCTION("writeBoolean", NAPI_MessageParcel::JS_writeBoolean),
|
||||
DECLARE_NAPI_FUNCTION("writeChar", NAPI_MessageParcel::JS_writeChar),
|
||||
DECLARE_NAPI_FUNCTION("writeStringWithLength", NAPI_MessageParcel::JS_writeStringWithLength),
|
||||
DECLARE_NAPI_FUNCTION("writeString", NAPI_MessageParcel::JS_writeString),
|
||||
DECLARE_NAPI_FUNCTION("writeByteArray", NAPI_MessageParcel::JS_writeByteArray),
|
||||
DECLARE_NAPI_FUNCTION("readByte", NAPI_MessageParcel::JS_readByte),
|
||||
DECLARE_NAPI_FUNCTION("readShort", NAPI_MessageParcel::JS_readShort),
|
||||
DECLARE_NAPI_FUNCTION("readInt", NAPI_MessageParcel::JS_readInt),
|
||||
DECLARE_NAPI_FUNCTION("readLong", NAPI_MessageParcel::JS_readLong),
|
||||
DECLARE_NAPI_FUNCTION("readFloat", NAPI_MessageParcel::JS_readFloat),
|
||||
DECLARE_NAPI_FUNCTION("readDouble", NAPI_MessageParcel::JS_readDouble),
|
||||
DECLARE_NAPI_FUNCTION("readBoolean", NAPI_MessageParcel::JS_readBoolean),
|
||||
DECLARE_NAPI_FUNCTION("readChar", NAPI_MessageParcel::JS_readChar),
|
||||
DECLARE_NAPI_FUNCTION("readString", NAPI_MessageParcel::JS_readString),
|
||||
DECLARE_NAPI_FUNCTION("writeRemoteObject", NAPI_MessageParcel::JS_writeRemoteObject),
|
||||
DECLARE_NAPI_FUNCTION("readRemoteObject", NAPI_MessageParcel::JS_readRemoteObject),
|
||||
DECLARE_NAPI_FUNCTION("writeInterfaceToken", NAPI_MessageParcel::JS_writeInterfaceToken),
|
||||
@ -1897,9 +1877,19 @@ napi_value NAPI_MessageParcel::Export(napi_env env, napi_value exports)
|
||||
DECLARE_NAPI_FUNCTION("getReadableBytes", NAPI_MessageParcel::JS_getReadableBytes),
|
||||
DECLARE_NAPI_FUNCTION("getReadPosition", NAPI_MessageParcel::JS_getReadPosition),
|
||||
DECLARE_NAPI_FUNCTION("getWritePosition", NAPI_MessageParcel::JS_getWritePosition),
|
||||
DECLARE_NAPI_FUNCTION("rewindWrite", NAPI_MessageParcel::JS_rewindWrite),
|
||||
DECLARE_NAPI_FUNCTION("rewindRead", NAPI_MessageParcel::JS_rewindRead),
|
||||
DECLARE_NAPI_FUNCTION("rewindWrite", NAPI_MessageParcel::JS_rewindWrite),
|
||||
DECLARE_NAPI_FUNCTION("writeByte", NAPI_MessageParcel::JS_writeByte),
|
||||
DECLARE_NAPI_FUNCTION("writeShort", NAPI_MessageParcel::JS_writeShort),
|
||||
DECLARE_NAPI_FUNCTION("writeInt", NAPI_MessageParcel::JS_writeInt),
|
||||
DECLARE_NAPI_FUNCTION("writeLong", NAPI_MessageParcel::JS_writeLong),
|
||||
DECLARE_NAPI_FUNCTION("writeFloat", NAPI_MessageParcel::JS_writeFloat),
|
||||
DECLARE_NAPI_FUNCTION("writeDouble", NAPI_MessageParcel::JS_writeDouble),
|
||||
DECLARE_NAPI_FUNCTION("writeBoolean", NAPI_MessageParcel::JS_writeBoolean),
|
||||
DECLARE_NAPI_FUNCTION("writeChar", NAPI_MessageParcel::JS_writeChar),
|
||||
DECLARE_NAPI_FUNCTION("writeString", NAPI_MessageParcel::JS_writeString),
|
||||
DECLARE_NAPI_FUNCTION("writeSequenceable", NAPI_MessageParcel::JS_writeSequenceable),
|
||||
DECLARE_NAPI_FUNCTION("writeByteArray", NAPI_MessageParcel::JS_writeByteArray),
|
||||
DECLARE_NAPI_FUNCTION("writeShortArray", NAPI_MessageParcel::JS_writeShortArray),
|
||||
DECLARE_NAPI_FUNCTION("writeIntArray", NAPI_MessageParcel::JS_writeIntArray),
|
||||
DECLARE_NAPI_FUNCTION("writeLongArray", NAPI_MessageParcel::JS_writeLongArray),
|
||||
@ -1909,6 +1899,16 @@ napi_value NAPI_MessageParcel::Export(napi_env env, napi_value exports)
|
||||
DECLARE_NAPI_FUNCTION("writeCharArray", NAPI_MessageParcel::JS_writeCharArray),
|
||||
DECLARE_NAPI_FUNCTION("writeStringArray", NAPI_MessageParcel::JS_writeStringArray),
|
||||
DECLARE_NAPI_FUNCTION("writeSequenceableArray", NAPI_MessageParcel::JS_writeSequenceableArray),
|
||||
DECLARE_NAPI_FUNCTION("writeStringWithLength", NAPI_MessageParcel::JS_writeStringWithLength),
|
||||
DECLARE_NAPI_FUNCTION("readByte", NAPI_MessageParcel::JS_readByte),
|
||||
DECLARE_NAPI_FUNCTION("readShort", NAPI_MessageParcel::JS_readShort),
|
||||
DECLARE_NAPI_FUNCTION("readInt", NAPI_MessageParcel::JS_readInt),
|
||||
DECLARE_NAPI_FUNCTION("readLong", NAPI_MessageParcel::JS_readLong),
|
||||
DECLARE_NAPI_FUNCTION("readFloat", NAPI_MessageParcel::JS_readFloat),
|
||||
DECLARE_NAPI_FUNCTION("readDouble", NAPI_MessageParcel::JS_readDouble),
|
||||
DECLARE_NAPI_FUNCTION("readBoolean", NAPI_MessageParcel::JS_readBoolean),
|
||||
DECLARE_NAPI_FUNCTION("readChar", NAPI_MessageParcel::JS_readChar),
|
||||
DECLARE_NAPI_FUNCTION("readString", NAPI_MessageParcel::JS_readString),
|
||||
DECLARE_NAPI_FUNCTION("readSequenceable", NAPI_MessageParcel::JS_readSequenceable),
|
||||
DECLARE_NAPI_FUNCTION("readByteArray", NAPI_MessageParcel::JS_readByteArray),
|
||||
DECLARE_NAPI_FUNCTION("readShortArray", NAPI_MessageParcel::JS_readShortArray),
|
||||
@ -1953,8 +1953,7 @@ napi_value NAPI_MessageParcel::JS_constructor(napi_env env, napi_callback_info i
|
||||
// connect native object to js thisVar
|
||||
status = napi_wrap(
|
||||
env, thisVar, messageParcel,
|
||||
[](napi_env env, void *data, void *hint) {
|
||||
},
|
||||
[](napi_env env, void *data, void *hint) {},
|
||||
nullptr, nullptr);
|
||||
NAPI_ASSERT(env, status == napi_ok, "napi wrap message parcel failed");
|
||||
return thisVar;
|
||||
|
@ -212,13 +212,28 @@ EXTERN_C_START
|
||||
napi_value NAPIRemoteProxyExport(napi_env env, napi_value exports)
|
||||
{
|
||||
const std::string className = "RemoteProxy";
|
||||
napi_value pingTransaction = nullptr;
|
||||
napi_create_int32(env, PING_TRANSACTION, &pingTransaction);
|
||||
napi_value dumpTransaction = nullptr;
|
||||
napi_create_int32(env, DUMP_TRANSACTION, &dumpTransaction);
|
||||
napi_value interfaceTransaction = nullptr;
|
||||
napi_create_int32(env, INTERFACE_TRANSACTION, &interfaceTransaction);
|
||||
napi_value minTransactionId = nullptr;
|
||||
napi_create_int32(env, MIN_TRANSACTION_ID, &minTransactionId);
|
||||
napi_value maxTransactionId = nullptr;
|
||||
napi_create_int32(env, MAX_TRANSACTION_ID, &maxTransactionId);
|
||||
napi_property_descriptor properties[] = {
|
||||
DECLARE_NAPI_FUNCTION("sendRequest", NAPI_RemoteProxy_sendRequest),
|
||||
DECLARE_NAPI_FUNCTION("queryLocalInterface", NAPI_RemoteProxy_queryLocalInterface),
|
||||
DECLARE_NAPI_FUNCTION("addDeathRecipient", NAPI_RemoteProxy_addDeathRecipient),
|
||||
DECLARE_NAPI_FUNCTION("removeDeathRecipient", NAPI_RemoteProxy_removeDeathRecipient),
|
||||
DECLARE_NAPI_FUNCTION("getInterfaceDescriptor", NAPI_RemoteProxy_getInterfaceDescriptor),
|
||||
DECLARE_NAPI_FUNCTION("sendRequest", NAPI_RemoteProxy_sendRequest),
|
||||
DECLARE_NAPI_FUNCTION("isObjectDead", NAPI_RemoteProxy_isObjectDead),
|
||||
DECLARE_NAPI_FUNCTION("getHandle", NAPI_RemoteProxy_getHandle),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("PING_TRANSACTION", pingTransaction),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("DUMP_TRANSACTION", dumpTransaction),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("INTERFACE_TRANSACTION", interfaceTransaction),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("MIN_TRANSACTION_ID", minTransactionId),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("MAX_TRANSACTION_ID", maxTransactionId),
|
||||
};
|
||||
napi_value constructor = nullptr;
|
||||
napi_define_class(env, className.c_str(), className.length(), RemoteProxy_JS_Constructor, nullptr,
|
||||
@ -272,6 +287,8 @@ private:
|
||||
pid_t callingUid;
|
||||
std::string callingDeviceID;
|
||||
std::string localDeviceID;
|
||||
bool isLocalCalling;
|
||||
int activeStatus;
|
||||
ThreadLockInfo *lockInfo;
|
||||
int result;
|
||||
};
|
||||
@ -339,7 +356,7 @@ napi_value RemoteObject_JS_Constructor(napi_env env, napi_callback_info info)
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == expectedArgc, "requires 2 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_string, "type mismatch for parameter 1");
|
||||
|
||||
@ -351,9 +368,9 @@ napi_value RemoteObject_JS_Constructor(napi_env env, napi_callback_info info)
|
||||
napi_get_value_uint32(env, argv[1], &stringLength);
|
||||
NAPI_ASSERT(env, stringLength < maxStrLen, "string length too large");
|
||||
|
||||
char stringValue[stringLength];
|
||||
char stringValue[stringLength + 1];
|
||||
size_t jsStringLength = 0;
|
||||
napi_get_value_string_utf8(env, argv[0], stringValue, stringLength, &jsStringLength);
|
||||
napi_get_value_string_utf8(env, argv[0], stringValue, stringLength + 1, &jsStringLength);
|
||||
NAPI_ASSERT(env, jsStringLength == stringLength, "string length wrong");
|
||||
std::string descriptor = stringValue;
|
||||
|
||||
@ -378,9 +395,10 @@ napi_value NAPIRemoteObjectExport(napi_env env, napi_value exports)
|
||||
{
|
||||
const std::string className = "RemoteObject";
|
||||
napi_property_descriptor properties[] = {
|
||||
DECLARE_NAPI_FUNCTION("getInterfaceDescriptor", NAPI_RemoteObject_getInterfaceDescriptor),
|
||||
DECLARE_NAPI_FUNCTION("sendRequest", NAPI_RemoteObject_sendRequest),
|
||||
DECLARE_NAPI_FUNCTION("getCallingPid", NAPI_RemoteObject_getCallingPid),
|
||||
DECLARE_NAPI_FUNCTION("getCallingUid", NAPI_RemoteObject_getCallingUid),
|
||||
DECLARE_NAPI_FUNCTION("sendRequest", NAPI_RemoteObject_sendRequest),
|
||||
};
|
||||
napi_value constructor = nullptr;
|
||||
napi_define_class(env, className.c_str(), className.length(), RemoteObject_JS_Constructor, nullptr,
|
||||
@ -441,8 +459,10 @@ int NAPIRemoteObject::OnRemoteRequest(uint32_t code, MessageParcel &data, Messag
|
||||
pid_t callingUid = IPCSkeleton::GetCallingUid();
|
||||
std::string callingDeviceID = IPCSkeleton::GetCallingDeviceID();
|
||||
std::string localDeviceID = IPCSkeleton::GetLocalDeviceID();
|
||||
DBINDER_LOGI("callingPid:%{public}u, callingUid:%{public}u, callingDeviceID:%{public}s, localDeviceId:%{public}s",
|
||||
callingPid, callingUid, callingDeviceID.c_str(), localDeviceID.c_str());
|
||||
bool isLocalCalling = IPCSkeleton::IsLocalCalling();
|
||||
DBINDER_LOGI("callingPid:%{public}u, callingUid:%{public}u, callingDeviceID:%{public}s,\
|
||||
localDeviceId:%{public}s, localCalling:%{public}d",
|
||||
callingPid, callingUid, callingDeviceID.c_str(), localDeviceID.c_str(), isLocalCalling);
|
||||
std::shared_ptr<struct ThreadLockInfo> lockInfo = std::make_shared<struct ThreadLockInfo>();
|
||||
CallbackParam *param = new CallbackParam {
|
||||
.env = env_,
|
||||
@ -455,6 +475,8 @@ int NAPIRemoteObject::OnRemoteRequest(uint32_t code, MessageParcel &data, Messag
|
||||
.callingUid = callingUid,
|
||||
.callingDeviceID = callingDeviceID,
|
||||
.localDeviceID = localDeviceID,
|
||||
.isLocalCalling = isLocalCalling,
|
||||
.activeStatus = IRemoteInvoker::ACTIVE_INVOKER,
|
||||
.lockInfo = lockInfo.get(),
|
||||
.result = 0
|
||||
};
|
||||
@ -604,6 +626,10 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
|
||||
napi_get_named_property(param->env, global, "callingDeviceID_", &oldCallingDeviceID);
|
||||
napi_value oldLocalDeviceID;
|
||||
napi_get_named_property(param->env, global, "localDeviceID_", &oldLocalDeviceID);
|
||||
napi_value oldIsLocalCalling;
|
||||
napi_get_named_property(param->env, global, "isLocalCalling_", &oldIsLocalCalling);
|
||||
napi_value oldActiveStatus;
|
||||
napi_get_named_property(param->env, global, "activeStatus_", &oldActiveStatus);
|
||||
|
||||
// set new calling pid, uid, device id
|
||||
napi_value newPid;
|
||||
@ -618,6 +644,12 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
|
||||
napi_value newLocalDeviceID;
|
||||
napi_create_string_utf8(param->env, param->localDeviceID.c_str(), NAPI_AUTO_LENGTH, &newLocalDeviceID);
|
||||
napi_set_named_property(param->env, global, "localDeviceID_", newLocalDeviceID);
|
||||
napi_value newIsLocalCalling;
|
||||
napi_get_boolean(param->env, param->isLocalCalling, &newIsLocalCalling);
|
||||
napi_set_named_property(param->env, global, "isLocalCalling_", newIsLocalCalling);
|
||||
napi_value newActiveStatus;
|
||||
napi_create_int32(param->env, param->activeStatus, &newActiveStatus);
|
||||
napi_set_named_property(param->env, global, "activeStatus_", newActiveStatus);
|
||||
|
||||
// start to call onRemoteRequest
|
||||
size_t argc2 = 4;
|
||||
@ -629,7 +661,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
|
||||
DBINDER_LOGE("OnRemoteRequest got exception");
|
||||
param->result = ERR_UNKNOWN_TRANSACTION;
|
||||
} else {
|
||||
bool result;
|
||||
bool result = false;
|
||||
napi_get_value_bool(param->env, return_val, &result);
|
||||
if (!result) {
|
||||
DBINDER_LOGE("OnRemoteRequest res:%{public}s", result ? "true" : "false");
|
||||
@ -643,6 +675,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
|
||||
napi_set_named_property(param->env, global, "callingUid_", oldUid);
|
||||
napi_set_named_property(param->env, global, "callingDeviceID_", oldCallingDeviceID);
|
||||
napi_set_named_property(param->env, global, "localDeviceID_", oldLocalDeviceID);
|
||||
napi_set_named_property(param->env, global, "isLocalCalling_", oldIsLocalCalling);
|
||||
napi_set_named_property(param->env, global, "activeStatus_", oldActiveStatus);
|
||||
std::unique_lock<std::mutex> lock(param->lockInfo->mutex);
|
||||
param->lockInfo->ready = true;
|
||||
param->lockInfo->condition.notify_all();
|
||||
@ -694,7 +728,7 @@ napi_value NAPI_ohos_rpc_CreateJsRemoteObject(napi_env env, const sptr<IRemoteOb
|
||||
// create a new js remote object
|
||||
size_t argc = 2;
|
||||
napi_value argv[2] = { jsDesc, len };
|
||||
napi_value jsRemoteObject;
|
||||
napi_value jsRemoteObject = nullptr;
|
||||
status = napi_new_instance(env, constructor, argc, argv, &jsRemoteObject);
|
||||
NAPI_ASSERT(env, status == napi_ok, "failed to construct js RemoteObject");
|
||||
// retrieve holder and set object
|
||||
@ -767,46 +801,104 @@ napi_value NAPI_IPCSkeleton_getContextObject(napi_env env, napi_callback_info in
|
||||
|
||||
napi_value NAPI_IPCSkeleton_getCallingPid(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value global;
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value callingPid;
|
||||
napi_get_named_property(env, global, "callingPid_", &callingPid);
|
||||
return callingPid;
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
if (napiActiveStatus != nullptr) {
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus == IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value callingPid = nullptr;
|
||||
napi_get_named_property(env, global, "callingPid_", &callingPid);
|
||||
return callingPid;
|
||||
}
|
||||
}
|
||||
pid_t pid = getpid();
|
||||
napi_value result = nullptr;
|
||||
napi_create_int32(env, static_cast<int32_t>(pid), &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
napi_value NAPI_IPCSkeleton_getCallingUid(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value global;
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value callingUid;
|
||||
napi_get_named_property(env, global, "callingUid_", &callingUid);
|
||||
return callingUid;
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
if (napiActiveStatus != nullptr) {
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus == IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value callingUid = nullptr;
|
||||
napi_get_named_property(env, global, "callingUid_", &callingUid);
|
||||
return callingUid;
|
||||
}
|
||||
}
|
||||
pid_t uid = getuid();
|
||||
napi_value result = nullptr;
|
||||
napi_create_int32(env, static_cast<int32_t>(uid), &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
napi_value NAPI_IPCSkeleton_getCallingDeviceID(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value global;
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value callingDeviceID;
|
||||
napi_get_named_property(env, global, "callingDeviceID_", &callingDeviceID);
|
||||
return callingDeviceID;
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
if (napiActiveStatus != nullptr) {
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus == IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value callingDeviceID = nullptr;
|
||||
napi_get_named_property(env, global, "callingDeviceID_", &callingDeviceID);
|
||||
return callingDeviceID;
|
||||
}
|
||||
}
|
||||
napi_value result = nullptr;
|
||||
napi_create_string_utf8(env, "", 0, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
napi_value NAPI_IPCSkeleton_getLocalDeviceID(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value global;
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value localDeviceID;
|
||||
napi_get_named_property(env, global, "localDeviceID_", &localDeviceID);
|
||||
return localDeviceID;
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
if (napiActiveStatus != nullptr) {
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus == IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value localDeviceID = nullptr;
|
||||
napi_get_named_property(env, global, "localDeviceID_", &localDeviceID);
|
||||
return localDeviceID;
|
||||
}
|
||||
}
|
||||
napi_value result = nullptr;
|
||||
napi_create_string_utf8(env, "", 0, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
napi_value NAPI_IPCSkeleton_isLocalCalling(napi_env env, napi_callback_info info)
|
||||
{
|
||||
bool isLocal = IPCSkeleton::IsLocalCalling();
|
||||
napi_value napiValue = nullptr;
|
||||
NAPI_CALL(env, napi_get_boolean(env, isLocal, &napiValue));
|
||||
return napiValue;
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
if (napiActiveStatus != nullptr) {
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus == IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value isLocalCalling = nullptr;
|
||||
napi_get_named_property(env, global, "isLocalCalling_", &isLocalCalling);
|
||||
return isLocalCalling;
|
||||
}
|
||||
}
|
||||
napi_value result = nullptr;
|
||||
napi_get_boolean(env, true, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
napi_value NAPI_IPCSkeleton_flushCommands(napi_env env, napi_callback_info info)
|
||||
@ -818,7 +910,7 @@ napi_value NAPI_IPCSkeleton_flushCommands(napi_env env, napi_callback_info info)
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == 1, "requires 1 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_object, "type mismatch for parameter 1");
|
||||
|
||||
@ -831,14 +923,87 @@ napi_value NAPI_IPCSkeleton_flushCommands(napi_env env, napi_callback_info info)
|
||||
|
||||
napi_value NAPI_IPCSkeleton_resetCallingIdentity(napi_env env, napi_callback_info info)
|
||||
{
|
||||
std::string identity = IPCSkeleton::ResetCallingIdentity();
|
||||
napi_value napiValue = nullptr;
|
||||
NAPI_CALL(env, napi_create_string_utf8(env, identity.c_str(), identity.length(), &napiValue));
|
||||
return napiValue;
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus != IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value result = nullptr;
|
||||
napi_create_string_utf8(env, "", 0, &result);
|
||||
return result;
|
||||
}
|
||||
napi_value napiCallingPid = nullptr;
|
||||
napi_get_named_property(env, global, "callingPid_", &napiCallingPid);
|
||||
int32_t callerPid;
|
||||
napi_get_value_int32(env, napiCallingPid, &callerPid);
|
||||
napi_value napiCallingUid = nullptr;
|
||||
napi_get_named_property(env, global, "callingUid_", &napiCallingUid);
|
||||
int32_t callerUid;
|
||||
napi_get_value_int32(env, napiCallingUid, &callerUid);
|
||||
napi_value napiIsLocalCalling = nullptr;
|
||||
napi_get_named_property(env, global, "isLocalCalling_", &napiIsLocalCalling);
|
||||
bool isLocalCalling = true;
|
||||
napi_get_value_bool(env, napiIsLocalCalling, &isLocalCalling);
|
||||
if (isLocalCalling) {
|
||||
int64_t identity = (static_cast<int64_t>(callerUid) << PID_LEN) | callerPid;
|
||||
callerPid = getpid();
|
||||
callerUid = getuid();
|
||||
napi_value newCallingPid;
|
||||
napi_create_int32(env, callerPid, &newCallingPid);
|
||||
napi_set_named_property(env, global, "callingPid_", newCallingPid);
|
||||
napi_value newCallingUid;
|
||||
napi_create_int32(env, callerUid, &newCallingUid);
|
||||
napi_set_named_property(env, global, "callingUid_", newCallingUid);
|
||||
napi_value result;
|
||||
napi_create_string_utf8(env, std::to_string(identity).c_str(), NAPI_AUTO_LENGTH, &result);
|
||||
return result;
|
||||
} else {
|
||||
napi_value napiCallingDeviceID = nullptr;
|
||||
napi_get_named_property(env, global, "callingDeviceID_", &napiCallingDeviceID);
|
||||
size_t bufferSize = 0;
|
||||
size_t maxLen = 4096;
|
||||
napi_get_value_string_utf8(env, napiCallingDeviceID, nullptr, 0, &bufferSize);
|
||||
NAPI_ASSERT(env, bufferSize < maxLen, "string length too large");
|
||||
char stringValue[bufferSize + 1];
|
||||
size_t jsStringLength = 0;
|
||||
napi_get_value_string_utf8(env, napiCallingDeviceID, stringValue, bufferSize + 1, &jsStringLength);
|
||||
NAPI_ASSERT(env, jsStringLength == bufferSize, "string length wrong");
|
||||
std::string callerDeviceID = stringValue;
|
||||
std::string token = std::to_string(((static_cast<int64_t>(callerUid) << PID_LEN) | callerPid));
|
||||
std::string identity = callerDeviceID + token;
|
||||
callerUid = getuid();
|
||||
napi_value newCallingUid;
|
||||
napi_create_int32(env, callerUid, &newCallingUid);
|
||||
napi_set_named_property(env, global, "callingUid_", newCallingUid);
|
||||
callerPid = getpid();
|
||||
napi_value newCallingPid;
|
||||
napi_create_int32(env, callerPid, &newCallingPid);
|
||||
napi_set_named_property(env, global, "callingPid_", newCallingPid);
|
||||
napi_value newCallingDeviceID = nullptr;
|
||||
napi_get_named_property(env, global, "localDeviceID_", &newCallingDeviceID);
|
||||
napi_set_named_property(env, global, "callingDeviceID_", newCallingDeviceID);
|
||||
|
||||
napi_value result = nullptr;
|
||||
napi_create_string_utf8(env, identity.c_str(), NAPI_AUTO_LENGTH, &result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
napi_value NAPI_IPCSkeleton_setCallingIdentity(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value global = nullptr;
|
||||
napi_get_global(env, &global);
|
||||
napi_value napiActiveStatus = nullptr;
|
||||
napi_get_named_property(env, global, "activeStatus_", &napiActiveStatus);
|
||||
int32_t activeStatus = IRemoteInvoker::IDLE_INVOKER;
|
||||
napi_get_value_int32(env, napiActiveStatus, &activeStatus);
|
||||
if (activeStatus != IRemoteInvoker::ACTIVE_INVOKER) {
|
||||
napi_value result = nullptr;
|
||||
napi_get_boolean(env, true, &result);
|
||||
return result;
|
||||
}
|
||||
size_t argc = 2;
|
||||
size_t expectedArgc = 2;
|
||||
napi_value argv[2] = {0};
|
||||
@ -847,7 +1012,7 @@ napi_value NAPI_IPCSkeleton_setCallingIdentity(napi_env env, napi_callback_info
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == expectedArgc, "requires 2 parameter");
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_string, "type mismatch for parameter 1");
|
||||
|
||||
@ -859,20 +1024,72 @@ napi_value NAPI_IPCSkeleton_setCallingIdentity(napi_env env, napi_callback_info
|
||||
napi_get_value_uint32(env, argv[1], &stringLength);
|
||||
NAPI_ASSERT(env, stringLength < maxStrLen, "string length too large");
|
||||
|
||||
char stringValue[stringLength];
|
||||
char stringValue[stringLength + 1];
|
||||
size_t jsStringLength = 0;
|
||||
napi_get_value_string_utf8(env, argv[0], stringValue, stringLength, &jsStringLength);
|
||||
napi_get_value_string_utf8(env, argv[0], stringValue, stringLength + 1, &jsStringLength);
|
||||
NAPI_ASSERT(env, jsStringLength == stringLength, "string length wrong");
|
||||
std::string identity = stringValue;
|
||||
bool result = IPCSkeleton::SetCallingIdentity(identity);
|
||||
napi_value napiValue = nullptr;
|
||||
NAPI_CALL(env, napi_get_boolean(env, result, &napiValue));
|
||||
return napiValue;
|
||||
|
||||
napi_value napiIsLocalCalling = nullptr;
|
||||
napi_get_named_property(env, global, "isLocalCalling_", &napiIsLocalCalling);
|
||||
bool isLocalCalling = true;
|
||||
napi_get_value_bool(env, napiIsLocalCalling, &isLocalCalling);
|
||||
napi_value result;
|
||||
if (isLocalCalling) {
|
||||
if (identity.empty()) {
|
||||
napi_get_boolean(env, false, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
int64_t token = std::atoll(identity.c_str());
|
||||
int callerUid = static_cast<int>(token >> PID_LEN);
|
||||
int callerPid = static_cast<int>(token);
|
||||
napi_value napiCallingPid;
|
||||
napi_create_int32(env, callerPid, &napiCallingPid);
|
||||
napi_set_named_property(env, global, "callingPid_", napiCallingPid);
|
||||
napi_value napiCallingUid;
|
||||
napi_create_int32(env, callerUid, &napiCallingUid);
|
||||
napi_set_named_property(env, global, "callingUid_", napiCallingUid);
|
||||
napi_get_boolean(env, true, &result);
|
||||
return result;
|
||||
} else {
|
||||
if (identity.empty() || identity.length() <= DEVICEID_LENGTH) {
|
||||
napi_get_boolean(env, false, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string deviceId = identity.substr(0, DEVICEID_LENGTH);
|
||||
int64_t token = std::atoll(identity.substr(DEVICEID_LENGTH, identity.length() - DEVICEID_LENGTH).c_str());
|
||||
int callerUid = static_cast<int>(token >> PID_LEN);
|
||||
int callerPid = static_cast<int>(token);
|
||||
napi_value napiCallingPid;
|
||||
napi_create_int32(env, callerPid, &napiCallingPid);
|
||||
napi_set_named_property(env, global, "callingPid_", napiCallingPid);
|
||||
napi_value napiCallingUid;
|
||||
napi_create_int32(env, callerUid, &napiCallingUid);
|
||||
napi_set_named_property(env, global, "callingUid_", napiCallingUid);
|
||||
napi_value napiCallingDeviceID = nullptr;
|
||||
napi_create_string_utf8(env, deviceId.c_str(), NAPI_AUTO_LENGTH, &napiCallingDeviceID);
|
||||
napi_set_named_property(env, global, "callingDeviceID_", napiCallingDeviceID);
|
||||
napi_get_boolean(env, true, &result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
napi_value NAPI_RemoteObject_getInterfaceDescriptor(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value result = nullptr;
|
||||
napi_value thisVar = nullptr;
|
||||
napi_get_cb_info(env, info, 0, nullptr, &thisVar, nullptr);
|
||||
sptr<IRemoteObject> nativeObject = NAPI_ohos_rpc_getNativeRemoteObject(env, thisVar);
|
||||
std::u16string descriptor = nativeObject->GetObjectDescriptor();
|
||||
napi_create_string_utf8(env, Str16ToStr8(descriptor).c_str(), NAPI_AUTO_LENGTH, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
napi_value NAPI_RemoteObject_getCallingPid(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value result;
|
||||
napi_value result = nullptr;
|
||||
napi_value thisVar = nullptr;
|
||||
napi_get_cb_info(env, info, 0, nullptr, &thisVar, nullptr);
|
||||
sptr<IRemoteObject> nativeObject = NAPI_ohos_rpc_getNativeRemoteObject(env, thisVar);
|
||||
@ -889,7 +1106,7 @@ napi_value NAPI_RemoteObject_getCallingPid(napi_env env, napi_callback_info info
|
||||
|
||||
napi_value NAPI_RemoteObject_getCallingUid(napi_env env, napi_callback_info info)
|
||||
{
|
||||
napi_value result;
|
||||
napi_value result = nullptr;
|
||||
napi_value thisVar = nullptr;
|
||||
napi_get_cb_info(env, info, 0, nullptr, &thisVar, nullptr);
|
||||
sptr<IRemoteObject> nativeObject = NAPI_ohos_rpc_getNativeRemoteObject(env, thisVar);
|
||||
@ -961,7 +1178,7 @@ napi_value NAPI_RemoteObject_sendRequest(napi_env env, napi_callback_info info)
|
||||
napi_value thisVar = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == expectedArgc, "requires 4 parameter");
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
napi_typeof(env, argv[1], &valueType);
|
||||
@ -1048,7 +1265,7 @@ napi_value NAPI_RemoteProxy_sendRequest(napi_env env, napi_callback_info info)
|
||||
napi_value thisVar = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, nullptr);
|
||||
NAPI_ASSERT(env, argc == expectedArgc, "requires 4 parameter");
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
napi_typeof(env, argv[1], &valueType);
|
||||
@ -1091,6 +1308,11 @@ napi_value NAPI_RemoteProxy_sendRequest(napi_env env, napi_callback_info info)
|
||||
return SendRequestPromise(env, target, code, data->GetMessageParcel(), reply->GetMessageParcel(), *option);
|
||||
}
|
||||
|
||||
napi_value NAPI_RemoteProxy_queryLocalInterface(napi_env env, napi_callback_info info)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
napi_value NAPI_RemoteProxy_addDeathRecipient(napi_env env, napi_callback_info info)
|
||||
{
|
||||
DBINDER_LOGI("add death recipient");
|
||||
@ -1101,7 +1323,7 @@ napi_value NAPI_RemoteProxy_addDeathRecipient(napi_env env, napi_callback_info i
|
||||
void *data = nullptr;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == expectedArgc, "requires 2 parameter");
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_object, "type mismatch for parameter 1");
|
||||
napi_typeof(env, argv[1], &valueType);
|
||||
@ -1151,7 +1373,7 @@ napi_value NAPI_RemoteProxy_removeDeathRecipient(napi_env env, napi_callback_inf
|
||||
size_t expectedArgc = 2;
|
||||
napi_get_cb_info(env, info, &argc, argv, &thisVar, &data);
|
||||
NAPI_ASSERT(env, argc == expectedArgc, "requires 2 parameter");
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_object, "type mismatch for parameter 1");
|
||||
napi_typeof(env, argv[1], &valueType);
|
||||
@ -1332,7 +1554,7 @@ napi_value NAPIMessageOption_JS_Constructor(napi_env env, napi_callback_info inf
|
||||
flags = jsFlags;
|
||||
waittime = MessageOption::TF_WAIT_TIME;
|
||||
} else {
|
||||
napi_valuetype valueType;
|
||||
napi_valuetype valueType = napi_null;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
NAPI_ASSERT(env, valueType == napi_number, "type mismatch for parameter 1");
|
||||
napi_typeof(env, argv[1], &valueType);
|
||||
@ -1365,11 +1587,23 @@ EXTERN_C_START
|
||||
napi_value NAPIMessageOptionExport(napi_env env, napi_value exports)
|
||||
{
|
||||
const std::string className = "MessageOption";
|
||||
napi_value tfSync = nullptr;
|
||||
napi_create_int32(env, MessageOption::TF_SYNC, &tfSync);
|
||||
napi_value tfAsync = nullptr;
|
||||
napi_create_int32(env, MessageOption::TF_ASYNC, &tfAsync);
|
||||
napi_value tfFds = nullptr;
|
||||
napi_create_int32(env, MessageOption::TF_ACCEPT_FDS, &tfFds);
|
||||
napi_value tfWaitTime = nullptr;
|
||||
napi_create_int32(env, MessageOption::TF_WAIT_TIME, &tfWaitTime);
|
||||
napi_property_descriptor properties[] = {
|
||||
DECLARE_NAPI_FUNCTION("getFlags", NapiOhosRpcMessageOptionGetFlags),
|
||||
DECLARE_NAPI_FUNCTION("setFlags", NapiOhosRpcMessageOptionSetFlags),
|
||||
DECLARE_NAPI_FUNCTION("getWaitTime", NapiOhosRpcMessageOptionGetWaittime),
|
||||
DECLARE_NAPI_FUNCTION("setWaitTime", NapiOhosRpcMessageOptionSetWaittime),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("TF_SYNC", tfSync),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("TF_ASYNC", tfAsync),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("TF_ACCEPT_FDS", tfFds),
|
||||
DECLARE_NAPI_STATIC_PROPERTY("TF_WAIT_TIME", tfWaitTime),
|
||||
};
|
||||
napi_value constructor = nullptr;
|
||||
napi_define_class(env, className.c_str(), className.length(), NAPIMessageOption_JS_Constructor, nullptr,
|
||||
|
Loading…
Reference in New Issue
Block a user