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

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


一、概述

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

二、源码分析

  1. 如果数据包类型为MODULE_CONNECTION,首先调用OnMessageReceived() 函数。处理接收到的消息,解析并按规则回复给对端。
/*函数功能:处理接收到的消息,解析并按规则回复给对端函数参数:    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");    //获取json指定的对象成员"CODE"    cJSON *codeJson = cJSON_GetObjectItem(msg, "CODE");    //判断codeJson是否为数字类型的成员,如果不是,就直接返回    if ((codeJson == NULL) || (!cJSON_IsNumber(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() 函数进行处理。
/*函数功能:处理"验证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;    }//构造回复验证IP的消息    cJSON *reply = MsgVerifyIpPack(&connInfo, localDevInfo, g_authPort, g_sessionPort);    if (reply == NULL) { return;    }//构造/封装身份认证Post消息并发送给对端,MODULE_CONNECTION表示请求认证连接(暂定)    ret = AuthConnPostMessage(conn->fd, MODULE_CONNECTION, FLAG_REPLY, seq, reply);    cJSON_Delete(reply);    reply = NULL;    if (ret != 0) { return;    }    conn->onlineState = ONLINE_YES;//将该认证连接的在线状态改为:在线    SOFTBUS_PRINT("[AUTH] OnVerifyIp ok\n");}
  1. 如果CODE字段为CODE_VERIFY_DEVID,则调用OnVerifyDeviceId() 函数进行处理。
/*函数功能:处理"验证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;    }//打包"验证DeviceId"回复消息,封装成cJSON格式的回复消息    cJSON *reply = MsgVerifyDeviceIdPack(info);    if (reply == NULL) { return;    }//构造/封装身份认证Post消息并发送给对端,MODULE_CONNECTION表示请求认证连接(暂定)    (void)AuthConnPostMessage(conn->fd, MODULE_CONNECTION, FLAG_REPLY, seq, reply);    cJSON_Delete(reply);    reply = NULL;    SOFTBUS_PRINT("[AUTH] OnVerifyDeviceId ok\n");    return;}

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

OpenHarmony深度解读之分布式软总线:authmanager模块(6)/设备身份认证过程 创作挑战赛 OpenHarmony深度解读之分布式软总线:authmanager模块(6)/设备身份认证过程 新人创作奖励来咯,坚持创作打卡瓜分现金大奖