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

一、概述

设备之间互联是基于系统的IoT设备(如AI音箱、智能家居、智能穿戴等设备)与IoT主控设备(手机、平板等)间建立点对点的信任关系,并在具备信任关系的设备间,搭建安全的连接通道,实现用户数据端到端加密传输。IoT主控设备和IoT设备建立点对点信任关系的过程,实际上是相互交换IoT设备的身份标识的过程。authmanager是openharmony为设备提供认证机制的模块。
上一篇文章OpenHarmony源码分析之分布式软总线:authmanager模块(2)/设备认证通信管理已经对设备间的身份认证过程进行了部分介绍,如认证连接的管理以及认证协议数据包头部的解析等,本文将继续分析认证协议数据包负载部分的处理过程。

二、源码分析

本模块大部分处理代码位于 wifi_auth_manager.c 中。下面将进行详细分析:

  1. 在函数ProcessPackets中,循环解析认证数据包,首先解析数据包头部,然后再解析数据包负载。
/*
函数功能:处理身份认证协议数据包
函数参数:conn——认证连接信息结构体;
		buf——数据缓冲区地址;
		size——数据缓冲区总大小;
		used——数据缓冲区已使用量,这里指的是已接收数据总量
函数返回值:返回已成功处理完的数据量
详细:循环解析收到的每一个数据包,先解析其头部,再解析其数据负载部分。
*/
static int ProcessPackets(AuthConn *conn, const char *buf, int size, int used)
{
   
   
    int processed = 0;//已处理数据量
    while (processed + PACKET_HEAD_SIZE < used) {
   
   //循环解析数据包头部
    	//解析包头部,返回认证协议数据包头部字段信息
        Packet *pkt = ParsePacketHead(buf, processed, used - processed, size);
        if (pkt == NULL) {
   
   
            SOFTBUS_PRINT("[AUTH] ProcessPackets ParsePacketHead fail\n");
            return -1;
        }

        int len = pkt->dataLen;//获取数据负载部分的长度
        //如果产生越界,跳出循环
        if ((len > PACKET_DATA_SIZE) || (processed + PACKET_HEAD_SIZE + len > used)) {
   
   
            free(pkt);
            pkt = NULL;
            break;
        }
        processed += PACKET_HEAD_SIZE;

        OnDataReceived(conn, pkt, buf + processed);//解析数据负载部分
        processed += len;
        free(pkt);
        pkt = NULL;
    }

    return processed;
}
  1. OnDataReceived
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值