OpenHarmony深度解读之分布式软总线:authmanager模块(6)/设备身份认证过程

一、概述

本文将继续分析设备之间的身份认证过程的相关细节,主要是针对数据包类型为MODULE_CONNECTION的处理过程。主要源代码在wifi_auth_manager.c文件的函数OnModuleMessageReceived()中。

二、源码分析

  1. 如果数据包类型为MODULE_CONNECTION,首先调用OnMessageReceived()函数。处理接收到的消息,解析并按规则回复给对端。
arduino 复制代码
/*
函数功能:处理接收到的消息,解析并按规则回复给对端
函数参数:
    conn:设备连接信息
    seq:数据包序列号
    msg:cJSON格式的数据包负载消息
函数返回值:无
详细:
*/
void OnMessageReceived(AuthConn *conn, long long seq, const cJSON *msg)
{
    if (conn == NULL || msg == NULL) {
        return;
    }
    SOFTBUS_PRINT("[AUTH] OnMessageReceived begin\n");
    cJSON *codeJson = cJSON_GetObjectItem(msg, "CODE");//获取json指定的对象成员"CODE"
    if ((codeJson == NULL) || (!cJSON_IsNumber(codeJson))) {//判断codeJson是否为数字类型的成员,如果不是,就直接返回
        return;
    }
    int code = codeJson->valueint;//取出json中的值
    switch (code) {
        case CODE_VERIFY_IP: {
            OnVerifyIp(conn, seq, msg);//处理"验证IP"请求消息并回复对端
            break;
        }
        case CODE_VERIFY_DEVID: {
            OnVerifyDeviceId(conn, seq, msg);//处理"验证DeviceId"请求消息并回复对端
            break;
        }
        default:
            break;
    }
}
  1. 然后在函数OnMessageReceived中,根据解析出来的json数据的CODE字段继续进行处理。如果CODE字段为CODE_VERIFY_IP,则调用OnVerifyIp()函数进行处理。
ini 复制代码
/*
函数功能:处理"验证IP"请求消息并回复对端
函数参数:
    conn:认证连接信息
    seq:数据包序列号
    request:请求消息的内容
函数返回值:无
详细:
*/
void OnVerifyIp(AuthConn *conn, long long seq, const cJSON *request)
{
    if (conn == NULL || request == NULL) {
        return;
    }
    DeviceInfo *localDevInfo = BusGetLocalDeviceInfo();//获取本地设备信息
    if (localDevInfo == NULL) {
        return;
    }
    ConnInfo connInfo = {0};
    connInfo.maxVersion = BUS_V2;//总线版本
    connInfo.minVersion = BUS_V2;
    int ret = MsgVerifyIpUnPack(request, &connInfo, conn);//解析请求消息,更新普通连接信息结构体和认证连接结构体
    if (ret != 0) {
        return;
    }
    cJSON *reply = MsgVerifyIpPack(&connInfo, localDevInfo, g_authPort, g_sessionPort);//构造回复验证IP的消息
    if (reply == NULL) {
        return;
    }
    ret = AuthConnPostMessage(conn->fd, MODULE_CONNECTION, FLAG_REPLY, seq, reply);//构造/封装身份认证Post消息并发送给对端,MODULE_CONNECTION表示请求认证连接(暂定)
    cJSON_Delete(reply);
    reply = NULL;
    if (ret != 0) {
        return;
    }
    conn->onlineState = ONLINE_YES;//将该认证连接的在线状态改为:在线
    SOFTBUS_PRINT("[AUTH] OnVerifyIp ok\n");
}

DD一下: 欢迎大家关注公众号<程序猿百晓生>,可以了解到一下知识点。

erlang 复制代码
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......
  1. 如果CODE字段为CODE_VERIFY_DEVID,则调用OnVerifyDeviceId()函数进行处理。
ini 复制代码
/*
函数功能:处理"验证DeviceId"请求消息并回复对端
函数参数:
    conn:认证连接信息
    seq:数据包序列号
    request:请求消息的内容
函数返回值:无
详细:
*/
void OnVerifyDeviceId(const AuthConn *conn, long long seq, const cJSON *request)
{
    if (conn == NULL || request == NULL) {
        return;
    }
    char *deviceId = GetJsonString(request, "DEVICE_ID");//获取消息中的设备id
    if (deviceId == NULL) {
        return;
    }
    DeviceInfo *info = BusGetLocalDeviceInfo();//获取本地设备信息
    if (info == NULL) {
        return;
    }
    cJSON *reply = MsgVerifyDeviceIdPack(info);//打包"验证DeviceId"回复消息,封装成cJSON格式的回复消息
    if (reply == NULL) {
        return;
    }
    (void)AuthConnPostMessage(conn->fd, MODULE_CONNECTION, FLAG_REPLY, seq, reply);//构造/封装身份认证Post消息并发送给对端,MODULE_CONNECTION表示请求认证连接(暂定)
    cJSON_Delete(reply);
    reply = NULL;
    SOFTBUS_PRINT("[AUTH] OnVerifyDeviceId ok\n");
    return;
}

至此,设备之间的身份可信认证过程基本结束。

相关推荐
北京阿尔泰科技厂家2 小时前
从数据采集到智能诊断:阿尔泰科技实时高精度远距离管道状态监测全流程
物联网·安全·能源·信号采集·数据采集器·工业测试·管道监测
鸿蒙小白龙5 小时前
OpenHarmony Location Kit技术详解:定位、地理围栏与编码转换
华为·harmonyos·open harmony
我先去打把游戏先9 小时前
ESP32开发指南(基于IDF):连接AWS,乐鑫官方esp-aws-iot-master例程实验、跑通
开发语言·笔记·单片机·物联网·学习·云计算·aws
星释10 小时前
鸿蒙Flutter三方库适配指南:10.插件测试
flutter·华为·harmonyos
那年窗外下的雪.10 小时前
鸿蒙ArkUI布局与样式进阶(十五)—— 模块化 · 自定义组件 · 泛型机制深度解析
javascript·华为·typescript·harmonyos·鸿蒙·arkui
爱笑的眼睛1111 小时前
深入解析 HarmonyOS 中 NavDestination 导航目标页的生命周期
华为·harmonyos
小马哥编程14 小时前
【软考架构】案例分析-分布式锁
分布式·架构
necessary65314 小时前
从工行“余额归零”事件看CAP定理:当金融系统在一致性与可用性之间做出选择
分布式·金融·wpf·可用性测试
维尔切14 小时前
Kafka 概述与安装部署整理
运维·分布式·kafka
罗不俷15 小时前
【Hadoop】Hadoop 起源与核心组件解析 —— 大数据时代的分布式基石
大数据·hadoop·分布式