一、概述
本文将继续介绍HiChain本端接收数据的处理过程中的消息处理阶段的剩余内容。
二、源码分析
这一模块的源码位于:/base/security/deviceauth。
- 检查消息为系统可支持并合法之后,调用build_object函数构建HiChain子对象,具体分析如下:
/*
函数功能:构建HiChain子对象
函数参数:
hichain:HiChain实例
modular:消息模块类型
is_client:是否是client
params:构建参数
函数返回值:
成功:返回0 HC_OK
失败:返回错误码
详细:
*/
int32_t build_object(struct hichain *hichain, int32_t modular, bool is_client, const void *params)
{
//初始化HC对象表map
const struct object_map map[] = {
{
PAKE_MODULAR, true, (void **)&hichain->pake_client },//pake客户端
{
PAKE_MODULAR, false, (void **)&hichain->pake_server },//pake服务端
{
STS_MODULAR, true, (void **)&hichain->sts_client },//sts客户端
{
STS_MODULAR, false, (void **)&hichain->sts_server },//sts服务端
{
ADD_MODULAR, true, (void **)&hichain->auth_info },//认证信息
{
REMOVE_MODULAR, true, (void **)&hichain->auth_info },//认证信息
{
SEC_CLONE_MODULAR, false, (void **)&hichain->sec_clone_server } };//安全克隆服务端
void **object = get_object(map, sizeof(map) / sizeof(map[0]), modular, is_client);//根据消息模块类型获取HC对象
if ((object == NULL) || (*object != NULL)) {
//获取失败
DBG_OUT("No sub-objects need to be applied for");
return HC_OK;
}
if (check_mutex_object_is_null(map, sizeof(map) / sizeof(map[0]), modular, is_client) == false) {
//检查互斥对象是否为空???
LOGE("The mutex sub-object have been created, create %d:%d sub-object failed", modular, is_client);
return HC_REPEATED_REFERENCE;
}
if (check_depend_object_is_not_null(map, sizeof(map) / sizeof(map[0]), modular, is_client) == false) {
//检查依赖对象是否为非空???
LOGE("The depend sub-object is not created, create %d:%d sub-object failed", modular, is_client);
return HC_NEED_DEPEND;
}
*object = build_object_by_modular(hichain, modular, is_client, params);//根据消息模块类型构建子对象
if