OpenHarmony源码分析之分布式软总线:authmanager模块(2)/设备认证通信管理

本文深入分析OpenHarmony的authmanager模块,探讨设备间socket连接建立后的数据处理流程,涉及报文接收、解密、加密和发送。主要内容包括在ProcessDataEvent()函数中处理设备认证请求,查找设备连接状态,使用AuthConnRecv()接收数据,ParsePacketHead()解析数据包头,以及OnDataReceived()解析数据包负载。后续文章将详述身份认证协议细节。
摘要由CSDN通过智能技术生成

一、 概述

authmanager模块是鸿蒙为设备提供认证机制的模块。模块内的主要处理过程包括报文的接收、解密、再次封装、加密、发送的步骤。备注:该版本的鸿蒙仅实现了基于WiFi即局域网的设备身份认证机制。
本文重点介绍在设备间建立起socket连接之后,系统是如何处理接收到的新数据。处理过程主要集中在wifi_auth_manager.c文件中。

二、 源码分析

  1. 当有设备发起连接请求时,首先在trans_service模块建立socket连接,建立连接之后,若有设备发送认证请求的数据,将在函数 ProcessDataEvent() 中进行处理,对该函数的阅读理解如下:
/*
函数功能:处理设备间通信(新数据到达)事件
函数参数:fd    用于通信的套接字fd
函数返回值:无
详细:
*/
void ProcessDataEvent(int fd)
{
   
    SOFTBUS_PRINT("[AUTH] ProcessDataEvent fd = %d\n", fd);
    AuthConn *conn = FindAuthConnByFd(fd);//通过fd查找认证连接链表中是否已存在该设备
    if (conn == NULL) {
   
        SOFTBUS_PRINT("ProcessDataEvent get authConn fail\n");
        return;
    }

    //已存在,则进行下一步

    if (conn->db.buf == NULL) {
   //如果是第一次通信,则初始化数据缓冲区
    	//申请用于设备间通信的数据缓冲区内存
        conn->db.buf = (char *)malloc(DEFAULT_BUF_SIZE);
        if (conn->db.buf == NULL) {
   
            return;
        }
        //清空数据缓冲区
        (void)memset_s(conn->db.buf, DEFAULT_BUF_SIZE, 0, DEFAULT_BUF_SIZE);
        conn->db.size = DEFAULT_BUF_SIZE;//默认缓冲区大小1536
        conn->db.used = 0;//缓冲区已使用量为0
    }

    //用局部变量保存数据缓冲区信息,因为参数通过地址传递,防止改变原有地址空间内容
    DataBuffer *db = &conn->db;
    char *buf = db->buf;
    int used = db->used;
    int size = db->size;
	//接收设备认证过程中传输的数据,预读取size-used大小
    int rc = AuthConnRecv(fd, buf, used, size - used, 0);
    if (rc == 0) {
   //若没有数据,则返回
        return;
    } else if (rc < 0) {
   
        CloseConn(conn);
        return;
    }

    used += rc;//更新缓冲区已使用空间
    int processed = ProcessPackets(conn, buf, size, used);//处理身份认证协议数据包
    if (processed > 0) {
   
        used -= processed;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值