OpenHarmony解读之设备认证:数据接收管理-消息解析

一、概述

从本文开始,将介绍在HiChain机制中如何处理本端接收到的数据及其响应对端的过程。这个过程的入口函数为receive_data,在receive_data函数中,主要分为三个阶段:消息解析阶段消息处理阶段通知对端阶段,本文的重点是总体分析receive_data函数,然后对消息解析阶段的部分内容进行分析。

二、源码分析

这一模块的源码位于:/base/security/deviceauth。

  1. receive_data函数的整体分析:
/*
函数功能:HiChain处理接收到的消息数据
函数参数:
    handle:HiChain实例对象,这里其实是void *类型
    data:待处理的的消息数据
函数返回值:
    成功:返回0
    失败:返回其他
*/
DLL_API_PUBLIC int32_t receive_data(hc_handle handle, struct uint8_buff *data)
{
   
    LOGI("Begin receive data");
    check_ptr_return_val(handle, HC_INPUT_ERROR);//检查实例对象是否为空
    check_ptr_return_val(data, HC_INPUT_ERROR);//检查数据是否为空
    check_ptr_return_val(data->val, HC_INPUT_ERROR);//检查数据地址是否为空

    LOGI("Receive data from peer");
    struct hichain *hichain = (struct hichain *)handle;//定义局部变量接收该hichain实例
    struct message receive = {
    0, 0, 0 };//初始化接收消息体
    struct message send = {
    INFORM_MESSAGE, 0, 0 };//初始化发送消息体
    void *send_data = NULL;//声明发送消息的地址
    uint32_t send_data_len = 0;
    int32_t ret = deserialize_message(data, &receive);//反序列化/无序化消息,即解析data原始消息内容,封装成格式化的消息保存在receive指向的地址空间中,通过执行对应消息码类型的解析函数进行解析
    if (ret != HC_OK) {
   
        goto inform;
    }
    
    struct header_analysis nav = navigate_message(receive.msg_code);//导航消息,根据消息码查表,得到 "消息模块-消息类型(消息码低四位)-是否请求消息" 一一对应的格式
    ret = check_message_support(hichain, &nav, &receive);//检查消息是否可支持,解析出操作码,并与消息码进行对应,检查是否一致
    if (ret != HC_OK) {
   
        goto inform;
    }
    //若消息合法且系统可支持,则继续

    ret = build_object(hichain, nav.modular, !nav.is_request_msg, NULL);//构建HC子对象,根据nav.is_request_msg判断是否属于客户端
    if (ret != HC_OK) {
   
        goto inform;
    }
    ret = proc_message(hichain, &nav, &receive, &send);//根据modular和is_request_msg查询全局分布式消息表,找到对应的消息处理函数并执行
    if (ret != HC_OK) {
   
        goto inform;
    }
    ret = connect_message(hichain, &nav, &send);//连接消息

inform:<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值