Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
communication_ipc
提交
411197d9
C
communication_ipc
项目概览
OpenHarmony
/
communication_ipc
9 个月 前同步成功
通知
20
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
communication_ipc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
411197d9
编写于
8月 24, 2023
作者:
L
lishengming14
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
napi中处理数据argv数组使用时使用了魔数,进行修改
Signed-off-by:
N
lishengming14
<
lishengming14@huawei.com
>
上级
1d3db610
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
278 addition
and
267 deletion
+278
-267
ipc/native/src/napi/src/napi_ipc_skeleton.cpp
ipc/native/src/napi/src/napi_ipc_skeleton.cpp
+7
-7
ipc/native/src/napi/src/napi_message_option.cpp
ipc/native/src/napi/src/napi_message_option.cpp
+16
-14
ipc/native/src/napi/src/napi_remote_proxy.cpp
ipc/native/src/napi/src/napi_remote_proxy.cpp
+34
-33
ipc/native/src/napi_common/source/napi_ashmem.cpp
ipc/native/src/napi_common/source/napi_ashmem.cpp
+53
-49
ipc/native/src/napi_common/source/napi_message_parcel.cpp
ipc/native/src/napi_common/source/napi_message_parcel.cpp
+128
-125
ipc/native/src/napi_common/source/napi_remote_object.cpp
ipc/native/src/napi_common/source/napi_remote_object.cpp
+40
-39
未找到文件。
ipc/native/src/napi/src/napi_ipc_skeleton.cpp
浏览文件 @
411197d9
...
...
@@ -143,10 +143,10 @@ napi_value NAPI_IPCSkeleton_flushCommands(napi_env env, napi_callback_info info)
NAPI_ASSERT
(
env
,
argc
==
1
,
"requires 1 parameter"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 1"
);
sptr
<
IRemoteObject
>
target
=
NAPI_ohos_rpc_getNativeRemoteObject
(
env
,
argv
[
0
]);
sptr
<
IRemoteObject
>
target
=
NAPI_ohos_rpc_getNativeRemoteObject
(
env
,
argv
[
ARGV_INDEX_
0
]);
int32_t
result
=
IPCSkeleton
::
FlushCommands
(
target
);
napi_value
napiValue
=
nullptr
;
NAPI_CALL
(
env
,
napi_create_int32
(
env
,
result
,
&
napiValue
));
...
...
@@ -166,13 +166,13 @@ napi_value NAPI_IPCSkeleton_flushCmdBuffer(napi_env env, napi_callback_info info
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_object
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
sptr
<
IRemoteObject
>
target
=
NAPI_ohos_rpc_getNativeRemoteObject
(
env
,
argv
[
0
]);
sptr
<
IRemoteObject
>
target
=
NAPI_ohos_rpc_getNativeRemoteObject
(
env
,
argv
[
ARGV_INDEX_
0
]);
IPCSkeleton
::
FlushCommands
(
target
);
napi_value
napiValue
=
nullptr
;
napi_get_undefined
(
env
,
&
napiValue
);
...
...
@@ -288,15 +288,15 @@ napi_value NAPI_IPCSkeleton_setCallingIdentity(napi_env env, napi_callback_info
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT_BASE
(
env
,
argc
==
expectedArgc
,
"requires 1 parameters"
,
retValue
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT_BASE
(
env
,
valueType
==
napi_string
,
"type mismatch for parameter 1"
,
retValue
);
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
nullptr
,
0
,
&
bufferSize
);
NAPI_ASSERT_BASE
(
env
,
bufferSize
<
maxLen
,
"string length too large"
,
retValue
);
char
stringValue
[
bufferSize
+
1
];
size_t
jsStringLength
=
0
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
NAPI_ASSERT_BASE
(
env
,
jsStringLength
==
bufferSize
,
"string length wrong"
,
retValue
);
std
::
string
identity
=
stringValue
;
...
...
ipc/native/src/napi/src/napi_message_option.cpp
浏览文件 @
411197d9
...
...
@@ -22,7 +22,9 @@
namespace
OHOS
{
static
constexpr
OHOS
::
HiviewDFX
::
HiLogLabel
LOG_LABEL
=
{
LOG_CORE
,
LOG_ID_IPC
,
"NapiMessageOption"
};
static
const
size_t
ARGV_INDEX_0
=
0
;
static
const
size_t
ARGV_INDEX_1
=
1
;
/*
* Get flags field from ohos.rpc.MessageOption.
*/
...
...
@@ -52,10 +54,10 @@ static napi_value NapiOhosRpcMessageOptionSetFlags(napi_env env, napi_callback_i
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_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
int32_t
flags
=
0
;
napi_status
status
=
napi_get_value_int32
(
env
,
argv
[
0
],
&
flags
);
napi_status
status
=
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
flags
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get int32 value"
);
MessageOption
*
option
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
option
);
...
...
@@ -95,10 +97,10 @@ static napi_value NapiOhosRpcMessageOptionSetAsync(napi_env env, napi_callback_i
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_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_boolean
,
"type mismatch for parameter 1"
);
bool
flags
=
false
;
napi_status
status
=
napi_get_value_bool
(
env
,
argv
[
0
],
&
flags
);
napi_status
status
=
napi_get_value_bool
(
env
,
argv
[
ARGV_INDEX_
0
],
&
flags
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get boolean value"
);
MessageOption
*
option
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
option
);
...
...
@@ -138,10 +140,10 @@ static napi_value NapiOhosRpcMessageOptionSetWaittime(napi_env env, napi_callbac
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_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
int32_t
waittime
=
0
;
napi_status
status
=
napi_get_value_int32
(
env
,
argv
[
0
],
&
waittime
);
napi_status
status
=
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
waittime
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get int32 value"
);
MessageOption
*
option
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
option
);
...
...
@@ -166,28 +168,28 @@ static napi_value NAPIMessageOption_JS_Constructor(napi_env env, napi_callback_i
waittime
=
MessageOption
::
TF_WAIT_TIME
;
}
else
if
(
argc
==
1
)
{
napi_valuetype
valueType
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
||
valueType
==
napi_boolean
,
"type mismatch for parameter 1"
);
if
(
valueType
==
napi_boolean
)
{
bool
jsBoolFlags
=
false
;
napi_get_value_bool
(
env
,
argv
[
0
],
&
jsBoolFlags
);
napi_get_value_bool
(
env
,
argv
[
ARGV_INDEX_
0
],
&
jsBoolFlags
);
flags
=
jsBoolFlags
?
MessageOption
::
TF_ASYNC
:
MessageOption
::
TF_SYNC
;
}
else
{
int32_t
jsFlags
=
0
;
napi_get_value_int32
(
env
,
argv
[
0
],
&
jsFlags
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
jsFlags
);
flags
=
jsFlags
==
0
?
MessageOption
::
TF_SYNC
:
MessageOption
::
TF_ASYNC
;
}
waittime
=
MessageOption
::
TF_WAIT_TIME
;
}
else
{
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 2"
);
int32_t
jsFlags
=
0
;
napi_get_value_int32
(
env
,
argv
[
0
],
&
jsFlags
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
jsFlags
);
int32_t
jsWaittime
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
jsWaittime
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
jsWaittime
);
flags
=
jsFlags
==
0
?
MessageOption
::
TF_SYNC
:
MessageOption
::
TF_ASYNC
;
waittime
=
jsWaittime
;
}
...
...
ipc/native/src/napi/src/napi_remote_proxy.cpp
浏览文件 @
411197d9
...
...
@@ -41,6 +41,7 @@ static const size_t ARGV_INDEX_0 = 0;
static
const
size_t
ARGV_INDEX_1
=
1
;
static
const
size_t
ARGV_INDEX_2
=
2
;
static
const
size_t
ARGV_INDEX_3
=
3
;
static
const
size_t
ARGV_INDEX_4
=
4
;
void
ExecuteSendRequest
(
napi_env
env
,
void
*
data
)
{
...
...
@@ -122,11 +123,11 @@ napi_value SendRequestAsync(napi_env env, sptr<IRemoteObject> target, uint32_t c
StartAsyncTrace
(
HITRACE_TAG_RPC
,
(
sendRequestParam
->
traceValue
).
c_str
(),
sendRequestParam
->
traceId
);
}
}
napi_create_reference
(
env
,
argv
[
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_create_reference
(
env
,
argv
[
4
],
1
,
&
sendRequestParam
->
callback
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
4
],
1
,
&
sendRequestParam
->
callback
);
napi_value
resourceName
=
nullptr
;
NAPI_CALL
(
env
,
napi_create_string_utf8
(
env
,
__func__
,
NAPI_AUTO_LENGTH
,
&
resourceName
));
NAPI_CALL
(
env
,
napi_create_async_work
(
env
,
nullptr
,
resourceName
,
ExecuteSendRequest
,
...
...
@@ -169,10 +170,10 @@ napi_value SendRequestPromise(napi_env env, sptr<IRemoteObject> target, uint32_t
StartAsyncTrace
(
HITRACE_TAG_RPC
,
(
sendRequestParam
->
traceValue
).
c_str
(),
sendRequestParam
->
traceId
);
}
}
napi_create_reference
(
env
,
argv
[
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_value
resourceName
=
nullptr
;
NAPI_CALL
(
env
,
napi_create_string_utf8
(
env
,
__func__
,
NAPI_AUTO_LENGTH
,
&
resourceName
));
NAPI_CALL
(
env
,
napi_create_async_work
(
env
,
nullptr
,
resourceName
,
ExecuteSendRequest
,
...
...
@@ -191,26 +192,26 @@ napi_value NAPI_RemoteProxy_sendRequest(napi_env env, napi_callback_info info)
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
argcPromise
||
argc
==
argcCallback
,
"requires 4 or 5 parameters"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 2"
);
napi_typeof
(
env
,
argv
[
2
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
2
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 3"
);
napi_typeof
(
env
,
argv
[
3
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
3
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 4"
);
NAPI_MessageParcel
*
data
=
nullptr
;
napi_status
status
=
napi_unwrap
(
env
,
argv
[
1
],
(
void
**
)
&
data
);
napi_status
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
1
],
(
void
**
)
&
data
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get data message parcel"
);
NAPI_MessageParcel
*
reply
=
nullptr
;
status
=
napi_unwrap
(
env
,
argv
[
2
],
(
void
**
)
&
reply
);
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
2
],
(
void
**
)
&
reply
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get reply message parcel"
);
MessageOption
*
option
=
nullptr
;
status
=
napi_unwrap
(
env
,
argv
[
3
],
(
void
**
)
&
option
);
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
3
],
(
void
**
)
&
option
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get message option"
);
int32_t
code
=
0
;
napi_get_value_int32
(
env
,
argv
[
0
],
&
code
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
code
);
NAPIRemoteProxyHolder
*
proxyHolder
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
proxyHolder
);
...
...
@@ -298,7 +299,7 @@ napi_value NAPI_RemoteProxy_sendMessageRequest(napi_env env, napi_callback_info
return
checkArgsResult
;
}
int32_t
code
=
0
;
napi_get_value_int32
(
env
,
argv
[
0
],
&
code
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
code
);
napi_value
result
=
nullptr
;
napi_get_undefined
(
env
,
&
result
);
...
...
@@ -350,15 +351,15 @@ napi_value NAPI_RemoteProxy_addDeathRecipient(napi_env env, napi_callback_info i
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
&
data
);
NAPI_ASSERT
(
env
,
argc
==
expectedArgc
,
"requires 2 parameter"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 2"
);
int32_t
flag
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
flag
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
flag
);
napi_value
result
;
if
(
argv
[
0
]
==
nullptr
)
{
if
(
argv
[
ARGV_INDEX_
0
]
==
nullptr
)
{
napi_get_boolean
(
env
,
false
,
&
result
);
return
result
;
}
...
...
@@ -377,7 +378,7 @@ napi_value NAPI_RemoteProxy_addDeathRecipient(napi_env env, napi_callback_info i
return
result
;
}
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
new
NAPIDeathRecipient
(
env
,
argv
[
0
]);
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
new
NAPIDeathRecipient
(
env
,
argv
[
ARGV_INDEX_
0
]);
if
(
target
->
AddDeathRecipient
(
nativeRecipient
))
{
NAPIDeathRecipientList
*
list
=
proxyHolder
->
list_
;
if
(
list
->
Add
(
nativeRecipient
))
{
...
...
@@ -426,9 +427,9 @@ napi_value NAPI_RemoteProxy_registerDeathRecipient(napi_env env, napi_callback_i
return
checkArgsResult
;
}
int32_t
flag
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
flag
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
flag
);
if
(
argv
[
0
]
==
nullptr
)
{
if
(
argv
[
ARGV_INDEX_
0
]
==
nullptr
)
{
ZLOGE
(
LOG_LABEL
,
"invalid parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
...
...
@@ -449,7 +450,7 @@ napi_value NAPI_RemoteProxy_registerDeathRecipient(napi_env env, napi_callback_i
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
PROXY_OR_REMOTE_OBJECT_INVALID_ERROR
);
}
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
new
NAPIDeathRecipient
(
env
,
argv
[
0
]);
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
new
NAPIDeathRecipient
(
env
,
argv
[
ARGV_INDEX_
0
]);
if
(
target
->
AddDeathRecipient
(
nativeRecipient
))
{
NAPIDeathRecipientList
*
list
=
proxyHolder
->
list_
;
if
(
list
->
Add
(
nativeRecipient
))
{
...
...
@@ -472,17 +473,17 @@ napi_value NAPI_RemoteProxy_removeDeathRecipient(napi_env env, napi_callback_inf
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
&
data
);
NAPI_ASSERT
(
env
,
argc
==
expectedArgc
,
"requires 2 parameter"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 2"
);
napi_value
result
;
if
(
argv
[
0
]
==
nullptr
)
{
if
(
argv
[
ARGV_INDEX_
0
]
==
nullptr
)
{
napi_get_boolean
(
env
,
false
,
&
result
);
return
result
;
}
int32_t
flag
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
flag
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
flag
);
NAPIRemoteProxyHolder
*
proxyHolder
=
nullptr
;
napi_status
status
=
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
proxyHolder
);
...
...
@@ -498,7 +499,7 @@ napi_value NAPI_RemoteProxy_removeDeathRecipient(napi_env env, napi_callback_inf
return
result
;
}
sptr
<
NAPIDeathRecipientList
>
list
=
proxyHolder
->
list_
;
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
list
->
Find
(
argv
[
0
]);
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
list
->
Find
(
argv
[
ARGV_INDEX_
0
]);
if
(
nativeRecipient
==
nullptr
)
{
ZLOGE
(
LOG_LABEL
,
"recipient not found"
);
napi_get_boolean
(
env
,
false
,
&
result
);
...
...
@@ -554,7 +555,7 @@ napi_value NAPI_RemoteProxy_unregisterDeathRecipient(napi_env env, napi_callback
return
checkArgsResult
;
}
int32_t
flag
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
flag
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
flag
);
NAPIRemoteProxyHolder
*
proxyHolder
=
nullptr
;
napi_status
status
=
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
proxyHolder
);
...
...
@@ -574,7 +575,7 @@ napi_value NAPI_RemoteProxy_unregisterDeathRecipient(napi_env env, napi_callback
napi_value
result
=
nullptr
;
napi_get_undefined
(
env
,
&
result
);
sptr
<
NAPIDeathRecipientList
>
list
=
proxyHolder
->
list_
;
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
list
->
Find
(
argv
[
0
]);
sptr
<
NAPIDeathRecipient
>
nativeRecipient
=
list
->
Find
(
argv
[
ARGV_INDEX_
0
]);
if
(
nativeRecipient
==
nullptr
)
{
ZLOGE
(
LOG_LABEL
,
"recipient not found"
);
return
result
;
...
...
ipc/native/src/napi_common/source/napi_ashmem.cpp
浏览文件 @
411197d9
...
...
@@ -29,6 +29,10 @@ constexpr size_t BYTE_SIZE_32 = 4;
NapiError
NAPIAshmem
::
napiErr
;
static
const
size_t
ARGV_INDEX_0
=
0
;
static
const
size_t
ARGV_INDEX_1
=
1
;
static
const
size_t
ARGV_INDEX_2
=
2
;
NAPIAshmem
::
NAPIAshmem
(
sptr
<
Ashmem
>
&
ashmem
)
:
ashmem_
(
ashmem
)
{
if
(
ashmem
==
nullptr
)
{
...
...
@@ -57,24 +61,24 @@ napi_value NAPIAshmem::CreateAshmem(napi_env env, napi_callback_info info)
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
2
,
"requires 2 parameter"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_string
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
nullptr
;
}
size_t
bufferSize
=
0
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
nullptr
,
0
,
&
bufferSize
);
if
(
bufferSize
==
0
)
{
ZLOGE
(
LOG_LABEL
,
"invalid ashmem name"
);
return
nullptr
;
}
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 2"
);
return
nullptr
;
}
int32_t
ashmemSize
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
ashmemSize
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
ashmemSize
);
if
(
ashmemSize
<=
0
)
{
ZLOGE
(
LOG_LABEL
,
"invalid ashmem size"
);
return
nullptr
;
...
...
@@ -104,10 +108,10 @@ napi_value NAPIAshmem::CreateAshmemFromExisting(napi_env env, napi_callback_info
status
=
napi_get_named_property
(
env
,
global
,
"AshmemConstructor_"
,
&
constructor
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"get Ashmem constructor failed"
);
bool
isAshmem
=
false
;
napi_instanceof
(
env
,
argv
[
0
],
constructor
,
&
isAshmem
);
napi_instanceof
(
env
,
argv
[
ARGV_INDEX_
0
],
constructor
,
&
isAshmem
);
NAPI_ASSERT
(
env
,
isAshmem
==
true
,
"parameter is not instanceof Ashmem"
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
argv
[
0
],
(
void
**
)
&
napiAshmem
);
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
0
],
(
void
**
)
&
napiAshmem
);
NAPI_ASSERT
(
env
,
napiAshmem
!=
nullptr
,
"napiAshmem is null"
);
int32_t
fd
=
napiAshmem
->
GetAshmem
()
->
GetAshmemFd
();
uint32_t
size
=
(
uint32_t
)(
napiAshmem
->
GetAshmem
()
->
GetAshmemSize
());
...
...
@@ -142,26 +146,26 @@ napi_value NAPIAshmem::Create(napi_env env, napi_callback_info info)
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_string
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
size_t
bufferSize
=
0
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
nullptr
,
0
,
&
bufferSize
);
if
(
bufferSize
==
0
)
{
ZLOGE
(
LOG_LABEL
,
"invalid ashmem name"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 2"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
int32_t
ashmemSize
=
0
;
napi_get_value_int32
(
env
,
argv
[
1
],
&
ashmemSize
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
ashmemSize
);
if
(
ashmemSize
<=
0
)
{
ZLOGE
(
LOG_LABEL
,
"invalid ashmem size"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
...
...
@@ -211,13 +215,13 @@ napi_value NAPIAshmem::GetAshmemFromExisting(napi_env env, napi_callback_info in
return
nullptr
;
}
bool
isAshmem
=
false
;
napi_instanceof
(
env
,
argv
[
0
],
constructor
,
&
isAshmem
);
napi_instanceof
(
env
,
argv
[
ARGV_INDEX_
0
],
constructor
,
&
isAshmem
);
if
(
isAshmem
==
false
)
{
ZLOGE
(
LOG_LABEL
,
"parameter is not instanceof Ashmem"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
argv
[
0
],
(
void
**
)
&
napiAshmem
);
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
0
],
(
void
**
)
&
napiAshmem
);
if
(
napiAshmem
==
nullptr
)
{
ZLOGE
(
LOG_LABEL
,
"napiAshmem is null"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
...
...
@@ -277,10 +281,10 @@ napi_value NAPIAshmem::MapAshmem(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_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
uint32_t
mapType
=
0
;
napi_get_value_uint32
(
env
,
argv
[
0
],
&
mapType
);
napi_get_value_uint32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
mapType
);
NAPI_ASSERT
(
env
,
mapType
<=
MMAP_PROT_MAX
,
"napiAshmem mapType error"
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
...
...
@@ -302,13 +306,13 @@ napi_value NAPIAshmem::MapTypedAshmem(napi_env env, napi_callback_info info)
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
uint32_t
mapType
=
0
;
napi_get_value_uint32
(
env
,
argv
[
0
],
&
mapType
);
napi_get_value_uint32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
mapType
);
if
(
mapType
>
MMAP_PROT_MAX
)
{
ZLOGE
(
LOG_LABEL
,
"napiAshmem mapType error"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
...
...
@@ -391,14 +395,14 @@ napi_value NAPIAshmem::ReadFromAshmem(napi_env env, napi_callback_info info)
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
2
,
"requires 2 parameter"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 2"
);
int64_t
size
=
0
;
napi_get_value_int64
(
env
,
argv
[
0
],
&
size
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
0
],
&
size
);
int64_t
offset
=
0
;
napi_get_value_int64
(
env
,
argv
[
1
],
&
offset
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
1
],
&
offset
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
NAPI_ASSERT
(
env
,
napiAshmem
!=
nullptr
,
"napiAshmem is null"
);
...
...
@@ -446,20 +450,20 @@ napi_value NAPIAshmem::ReadAshmem(napi_env env, napi_callback_info info)
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 2"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
int64_t
size
=
0
;
napi_get_value_int64
(
env
,
argv
[
0
],
&
size
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
0
],
&
size
);
int64_t
offset
=
0
;
napi_get_value_int64
(
env
,
argv
[
1
],
&
offset
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
1
],
&
offset
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
if
(
napiAshmem
==
nullptr
)
{
...
...
@@ -517,10 +521,10 @@ napi_value NAPIAshmem::SetProtection(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_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
uint32_t
protectionType
=
0
;
napi_get_value_uint32
(
env
,
argv
[
0
],
&
protectionType
);
napi_get_value_uint32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
protectionType
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
NAPI_ASSERT
(
env
,
napiAshmem
!=
nullptr
,
"napiAshmem is null"
);
...
...
@@ -542,13 +546,13 @@ napi_value NAPIAshmem::SetProtectionType(napi_env env, napi_callback_info info)
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
uint32_t
protectionType
=
0
;
napi_get_value_uint32
(
env
,
argv
[
0
],
&
protectionType
);
napi_get_value_uint32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
protectionType
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
if
(
napiAshmem
==
nullptr
)
{
...
...
@@ -582,25 +586,25 @@ napi_value NAPIAshmem::WriteToAshmem(napi_env env, napi_callback_info info)
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
3
,
"requires 1 parameter"
);
bool
isArray
=
false
;
napi_is_array
(
env
,
argv
[
0
],
&
isArray
);
napi_is_array
(
env
,
argv
[
ARGV_INDEX_
0
],
&
isArray
);
NAPI_ASSERT
(
env
,
isArray
==
true
,
"type mismatch for parameter 1"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 2"
);
napi_typeof
(
env
,
argv
[
2
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
2
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 3"
);
std
::
vector
<
int32_t
>
array
;
uint32_t
arrayLength
=
0
;
napi_get_array_length
(
env
,
argv
[
0
],
&
arrayLength
);
napi_get_array_length
(
env
,
argv
[
ARGV_INDEX_
0
],
&
arrayLength
);
for
(
size_t
i
=
0
;
i
<
arrayLength
;
i
++
)
{
bool
hasElement
=
false
;
napi_has_element
(
env
,
argv
[
0
],
i
,
&
hasElement
);
napi_has_element
(
env
,
argv
[
ARGV_INDEX_
0
],
i
,
&
hasElement
);
NAPI_ASSERT
(
env
,
hasElement
==
true
,
"parameter check error"
);
napi_value
element
=
nullptr
;
napi_get_element
(
env
,
argv
[
0
],
i
,
&
element
);
napi_get_element
(
env
,
argv
[
ARGV_INDEX_
0
],
i
,
&
element
);
int32_t
value
=
0
;
napi_get_value_int32
(
env
,
element
,
&
value
);
...
...
@@ -608,9 +612,9 @@ napi_value NAPIAshmem::WriteToAshmem(napi_env env, napi_callback_info info)
}
int64_t
size
=
0
;
napi_get_value_int64
(
env
,
argv
[
1
],
&
size
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
1
],
&
size
);
int64_t
offset
=
0
;
napi_get_value_int64
(
env
,
argv
[
2
],
&
offset
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
2
],
&
offset
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
NAPI_ASSERT
(
env
,
napiAshmem
!=
nullptr
,
"napiAshmem is null"
);
...
...
@@ -644,18 +648,18 @@ napi_value NAPIAshmem::WriteAshmem(napi_env env, napi_callback_info info)
std
::
vector
<
int32_t
>
array
;
uint32_t
arrayLength
=
0
;
napi_get_array_length
(
env
,
argv
[
0
],
&
arrayLength
);
napi_get_array_length
(
env
,
argv
[
ARGV_INDEX_
0
],
&
arrayLength
);
for
(
size_t
i
=
0
;
i
<
arrayLength
;
i
++
)
{
bool
hasElement
=
false
;
napi_has_element
(
env
,
argv
[
0
],
i
,
&
hasElement
);
napi_has_element
(
env
,
argv
[
ARGV_INDEX_
0
],
i
,
&
hasElement
);
if
(
hasElement
==
false
)
{
ZLOGE
(
LOG_LABEL
,
"parameter check error"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_value
element
=
nullptr
;
napi_get_element
(
env
,
argv
[
0
],
i
,
&
element
);
napi_get_element
(
env
,
argv
[
ARGV_INDEX_
0
],
i
,
&
element
);
int32_t
value
=
0
;
napi_get_value_int32
(
env
,
element
,
&
value
);
...
...
@@ -663,9 +667,9 @@ napi_value NAPIAshmem::WriteAshmem(napi_env env, napi_callback_info info)
}
int64_t
size
=
0
;
napi_get_value_int64
(
env
,
argv
[
1
],
&
size
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
1
],
&
size
);
int64_t
offset
=
0
;
napi_get_value_int64
(
env
,
argv
[
2
],
&
offset
);
napi_get_value_int64
(
env
,
argv
[
ARGV_INDEX_
2
],
&
offset
);
NAPIAshmem
*
napiAshmem
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
**
)
&
napiAshmem
);
if
(
napiAshmem
==
nullptr
)
{
...
...
@@ -695,18 +699,18 @@ napi_value NAPIAshmem::CheckWriteAshmemParams(napi_env env, size_t argc, napi_va
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
bool
isArray
=
false
;
napi_is_array
(
env
,
argv
[
0
],
&
isArray
);
napi_is_array
(
env
,
argv
[
ARGV_INDEX_
0
],
&
isArray
);
if
(
isArray
==
false
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 2"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_typeof
(
env
,
argv
[
2
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
2
],
&
valueType
);
if
(
valueType
!=
napi_number
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 4"
);
return
napiErr
.
ThrowError
(
env
,
OHOS
::
errorDesc
::
CHECK_PARAM_ERROR
);
...
...
@@ -775,21 +779,21 @@ napi_value NAPIAshmem::Ashmem_JS_Constructor(napi_env env, napi_callback_info in
}
else
{
NAPI_ASSERT
(
env
,
argc
==
2
,
"requires 2 parameter"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_string
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 2"
);
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
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
,
argv
[
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
NAPI_ASSERT
(
env
,
jsStringLength
==
bufferSize
,
"string length wrong"
);
std
::
string
ashmemName
=
stringValue
;
uint32_t
ashmemSize
=
0
;
napi_get_value_uint32
(
env
,
argv
[
1
],
&
ashmemSize
);
napi_get_value_uint32
(
env
,
argv
[
ARGV_INDEX_
1
],
&
ashmemSize
);
// new napi Ashmem
sptr
<
Ashmem
>
nativeAshmem
=
Ashmem
::
CreateAshmem
(
ashmemName
.
c_str
(),
ashmemSize
);
NAPI_ASSERT
(
env
,
nativeAshmem
!=
nullptr
,
"invalid parameters"
);
...
...
ipc/native/src/napi_common/source/napi_message_parcel.cpp
浏览文件 @
411197d9
此差异已折叠。
点击以展开。
ipc/native/src/napi_common/source/napi_remote_object.cpp
浏览文件 @
411197d9
...
...
@@ -39,6 +39,7 @@ static const size_t ARGV_INDEX_0 = 0;
static
const
size_t
ARGV_INDEX_1
=
1
;
static
const
size_t
ARGV_INDEX_2
=
2
;
static
const
size_t
ARGV_INDEX_3
=
3
;
static
const
size_t
ARGV_INDEX_4
=
4
;
static
const
uint64_t
HITRACE_TAG_RPC
=
(
1ULL
<<
46
);
// RPC and IPC tag.
static
std
::
atomic
<
int32_t
>
bytraceId
=
1000
;
...
...
@@ -191,15 +192,15 @@ 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 at least 1 parameters"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_string
,
"type mismatch for parameter 1"
);
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
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
,
argv
[
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
NAPI_ASSERT
(
env
,
jsStringLength
==
bufferSize
,
"string length wrong"
);
std
::
string
descriptor
=
stringValue
;
auto
holder
=
new
NAPIRemoteObjectHolder
(
env
,
Str8ToStr16
(
descriptor
),
thisVar
);
...
...
@@ -356,7 +357,7 @@ napi_value NAPIRemoteObject::ThenCallback(napi_env env, napi_callback_info info)
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
nullptr
,
&
data
);
CallbackParam
*
param
=
static_cast
<
CallbackParam
*>
(
data
);
bool
result
=
false
;
napi_get_value_bool
(
param
->
env
,
argv
[
0
],
&
result
);
napi_get_value_bool
(
param
->
env
,
argv
[
ARGV_INDEX_
0
],
&
result
);
if
(
!
result
)
{
ZLOGE
(
LOG_LABEL
,
"OnRemoteRequest res:%{public}s"
,
result
?
"true"
:
"false"
);
param
->
result
=
ERR_UNKNOWN_TRANSACTION
;
...
...
@@ -796,15 +797,15 @@ static napi_value NAPI_RemoteObject_queryLocalInterface(napi_env env, napi_callb
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
expectedArgc
,
"requires 1 parameters"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_string
,
"type mismatch for parameter 1"
);
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
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
,
argv
[
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
NAPI_ASSERT
(
env
,
jsStringLength
==
bufferSize
,
"string length wrong"
);
std
::
string
descriptor
=
stringValue
;
NAPIRemoteObjectHolder
*
holder
=
nullptr
;
...
...
@@ -826,21 +827,21 @@ static napi_value NAPI_RemoteObject_getLocalInterface(napi_env env, napi_callbac
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
if
(
valueType
!=
napi_string
)
{
ZLOGE
(
LOG_LABEL
,
"type mismatch for parameter 1"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
nullptr
,
0
,
&
bufferSize
);
if
(
bufferSize
>=
maxLen
)
{
ZLOGE
(
LOG_LABEL
,
"string length too large"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
char
stringValue
[
bufferSize
+
1
];
size_t
jsStringLength
=
0
;
napi_get_value_string_utf8
(
env
,
argv
[
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
0
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
if
(
jsStringLength
!=
bufferSize
)
{
ZLOGE
(
LOG_LABEL
,
"string length wrong"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
...
...
@@ -997,11 +998,11 @@ napi_value StubSendRequestAsync(napi_env env, sptr<IRemoteObject> target, uint32
StartAsyncTrace
(
HITRACE_TAG_RPC
,
(
sendRequestParam
->
traceValue
).
c_str
(),
sendRequestParam
->
traceId
);
}
}
napi_create_reference
(
env
,
argv
[
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_create_reference
(
env
,
argv
[
4
],
1
,
&
sendRequestParam
->
callback
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
4
],
1
,
&
sendRequestParam
->
callback
);
std
::
thread
t
(
StubExecuteSendRequest
,
env
,
sendRequestParam
);
t
.
detach
();
napi_value
result
=
nullptr
;
...
...
@@ -1041,10 +1042,10 @@ napi_value StubSendRequestPromise(napi_env env, sptr<IRemoteObject> target, uint
StartAsyncTrace
(
HITRACE_TAG_RPC
,
(
sendRequestParam
->
traceValue
).
c_str
(),
sendRequestParam
->
traceId
);
}
}
napi_create_reference
(
env
,
argv
[
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
0
],
1
,
&
sendRequestParam
->
jsCodeRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
1
],
1
,
&
sendRequestParam
->
jsDataRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
2
],
1
,
&
sendRequestParam
->
jsReplyRef
);
napi_create_reference
(
env
,
argv
[
ARGV_INDEX_
3
],
1
,
&
sendRequestParam
->
jsOptionRef
);
std
::
thread
t
(
StubExecuteSendRequest
,
env
,
sendRequestParam
);
t
.
detach
();
return
promise
;
...
...
@@ -1060,26 +1061,26 @@ static napi_value NAPI_RemoteObject_sendRequest(napi_env env, napi_callback_info
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
argcPromise
||
argc
==
argcCallback
,
"requires 4 or 5 parameters"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_number
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 2"
);
napi_typeof
(
env
,
argv
[
2
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
2
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 3"
);
napi_typeof
(
env
,
argv
[
3
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
3
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 4"
);
NAPI_MessageParcel
*
data
=
nullptr
;
napi_status
status
=
napi_unwrap
(
env
,
argv
[
1
],
(
void
**
)
&
data
);
napi_status
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
1
],
(
void
**
)
&
data
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get data message parcel"
);
NAPI_MessageParcel
*
reply
=
nullptr
;
status
=
napi_unwrap
(
env
,
argv
[
2
],
(
void
**
)
&
reply
);
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
2
],
(
void
**
)
&
reply
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get reply message parcel"
);
MessageOption
*
option
=
nullptr
;
status
=
napi_unwrap
(
env
,
argv
[
3
],
(
void
**
)
&
option
);
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
3
],
(
void
**
)
&
option
);
NAPI_ASSERT
(
env
,
status
==
napi_ok
,
"failed to get message option"
);
int32_t
code
=
0
;
napi_get_value_int32
(
env
,
argv
[
0
],
&
code
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
code
);
sptr
<
IRemoteObject
>
target
=
NAPI_ohos_rpc_getNativeRemoteObject
(
env
,
thisVar
);
if
(
argc
==
argcCallback
)
{
...
...
@@ -1145,25 +1146,25 @@ static napi_value NAPI_RemoteObject_sendMessageRequest(napi_env env, napi_callba
return
checkArgsResult
;
}
NAPI_MessageSequence
*
data
=
nullptr
;
napi_status
status
=
napi_unwrap
(
env
,
argv
[
1
],
(
void
**
)
&
data
);
napi_status
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
1
],
(
void
**
)
&
data
);
if
(
status
!=
napi_ok
)
{
ZLOGE
(
LOG_LABEL
,
"failed to get data message sequence"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
NAPI_MessageSequence
*
reply
=
nullptr
;
status
=
napi_unwrap
(
env
,
argv
[
2
],
(
void
**
)
&
reply
);
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
2
],
(
void
**
)
&
reply
);
if
(
status
!=
napi_ok
)
{
ZLOGE
(
LOG_LABEL
,
"failed to get data message sequence"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
MessageOption
*
option
=
nullptr
;
status
=
napi_unwrap
(
env
,
argv
[
3
],
(
void
**
)
&
option
);
status
=
napi_unwrap
(
env
,
argv
[
ARGV_INDEX_
3
],
(
void
**
)
&
option
);
if
(
status
!=
napi_ok
)
{
ZLOGE
(
LOG_LABEL
,
"failed to get message option"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
int32_t
code
=
0
;
napi_get_value_int32
(
env
,
argv
[
0
],
&
code
);
napi_get_value_int32
(
env
,
argv
[
ARGV_INDEX_
0
],
&
code
);
sptr
<
IRemoteObject
>
target
=
NAPI_ohos_rpc_getNativeRemoteObject
(
env
,
thisVar
);
if
(
argc
==
argcCallback
)
{
...
...
@@ -1188,24 +1189,24 @@ static napi_value NAPI_RemoteObject_attachLocalInterface(napi_env env, napi_call
napi_get_cb_info
(
env
,
info
,
&
argc
,
argv
,
&
thisVar
,
nullptr
);
NAPI_ASSERT
(
env
,
argc
==
expectedArgc
,
"requires 2 parameters"
);
napi_valuetype
valueType
=
napi_null
;
napi_typeof
(
env
,
argv
[
0
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
0
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_object
,
"type mismatch for parameter 1"
);
napi_typeof
(
env
,
argv
[
1
],
&
valueType
);
napi_typeof
(
env
,
argv
[
ARGV_INDEX_
1
],
&
valueType
);
NAPI_ASSERT
(
env
,
valueType
==
napi_string
,
"type mismatch for parameter 2"
);
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
1
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
1
],
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
,
argv
[
1
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
1
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
NAPI_ASSERT
(
env
,
jsStringLength
==
bufferSize
,
"string length wrong"
);
std
::
string
descriptor
=
stringValue
;
NAPIRemoteObjectHolder
*
holder
=
nullptr
;
napi_unwrap
(
env
,
thisVar
,
(
void
*
*
)
&
holder
);
NAPI_ASSERT
(
env
,
holder
!=
nullptr
,
"failed to get napi remote object holder"
);
holder
->
attachLocalInterface
(
argv
[
0
],
descriptor
);
holder
->
attachLocalInterface
(
argv
[
ARGV_INDEX_
0
],
descriptor
);
napi_value
result
=
nullptr
;
napi_get_undefined
(
env
,
&
result
);
...
...
@@ -1248,14 +1249,14 @@ static napi_value NAPI_RemoteObject_modifyLocalInterface(napi_env env, napi_call
}
size_t
bufferSize
=
0
;
size_t
maxLen
=
40960
;
napi_get_value_string_utf8
(
env
,
argv
[
1
],
nullptr
,
0
,
&
bufferSize
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
1
],
nullptr
,
0
,
&
bufferSize
);
if
(
bufferSize
>=
maxLen
)
{
ZLOGE
(
LOG_LABEL
,
"string length too large"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
}
char
stringValue
[
bufferSize
+
1
];
size_t
jsStringLength
=
0
;
napi_get_value_string_utf8
(
env
,
argv
[
1
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
napi_get_value_string_utf8
(
env
,
argv
[
ARGV_INDEX_
1
],
stringValue
,
bufferSize
+
1
,
&
jsStringLength
);
if
(
jsStringLength
!=
bufferSize
)
{
ZLOGE
(
LOG_LABEL
,
"string length wrong"
);
return
napiErr
.
ThrowError
(
env
,
errorDesc
::
CHECK_PARAM_ERROR
);
...
...
@@ -1268,7 +1269,7 @@ static napi_value NAPI_RemoteObject_modifyLocalInterface(napi_env env, napi_call
ZLOGE
(
LOG_LABEL
,
"failed to get napi remote object holder"
);
return
nullptr
;
}
holder
->
attachLocalInterface
(
argv
[
0
],
descriptor
);
holder
->
attachLocalInterface
(
argv
[
ARGV_INDEX_
0
],
descriptor
);
napi_value
result
=
nullptr
;
napi_get_undefined
(
env
,
&
result
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录