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

本文深入分析OpenHarmony的authmanager模块,探讨在设备发起身份认证连接请求时,系统如何进行管理。从源码层面解析,当设备请求连接时,从trans_service模块建立socket连接,通过ProcessAuthData()、onConnectEvent()和ProcessConnectEvent()函数处理新连接,并在全局认证设备链表中检查和添加设备。
摘要由CSDN通过智能技术生成

一、 概述

authmanager模块是鸿蒙为设备提供认证机制的模块。模块内的主要处理过程包括报文的接收、解密、再次封装、加密、发送的步骤。本文重点介绍当有设备发起身份认证连接请求时,系统是如何管理的。处理过程主要集中在wifi_auth_manager.c文件中。

二、 源码分析

  1. 当有设备发起连接请求时,首先在trans_service模块建立socket连接,主要在函数 ProcessAuthData() 中实现:
/*
函数功能: 处理listenFd的事件调用accept建立连接生成通信描述符g_dataFd,或者处理g_dataFd的通信事件
函数参数:监听描述符listenFd,可读描述符集合
函数返回值:成功返回true,失败返回false
详细:
*/
static bool ProcessAuthData(int listenFd, const fd_set *readSet)
{
   
    if (readSet == NULL || g_callback == NULL || g_callback->onConnectEvent == NULL ||
        g_callback->onDataEvent == NULL) {
   
        return false;
    }
	//如果有设备发起连接,响应listenFd事件,accept建立socket连接,然后调用回调函数onConnectEvent处理连接事件
    if (FD_ISSET(listenFd, readSet)) {
   
        struct sockaddr_in addrClient = {
   0};
        socklen_t addrLen = sizeof(addrClient);
		//建立socket连接
        g_dataFd = accept(listenFd, (struct sockaddr *)(&addrClient), &addrLen);
        if (g_dataFd < 0) {
   //accept函数执行出错
            CloseAuthSessionFd(listenFd);
            return false;
        }
        //更新最大描述符值,因为后续需要为select函数提供最大描述符值,select函数需要获得监听集合中所有文件描述符的范围
        RefreshMaxFd(g_dataFd);
        //响应新连接事件
        if (g_callback->onConnectEvent(g_dataFd, inet_ntoa(addrClient.sin_addr)) != 0) {
   
            CloseAuthSessionFd(g_dataFd);
        }
   
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值