知识储备

  1. memset_s:定义于头文件<string.h>
    原型 errno_t memset_s(void * dest,rsize_t destsz,int ch,rsize_t count):
    将ch值(复制到dest指向的对象的每个第一个计数字符中并检查是否溢出

  2. 在变量名前面加(void)防止该变量的形参未赋值时,编译出现warning的提示

概况

下述所讲的部分是关于会话列表(数组)的相关函数:通过函数调用函数的方式,实现各个参数的检查与传输。将用户信息进行封装打包,通过特定关键字进行查找和删除修改,并做出一定的保护措施

auth_interface.h

与auth_conn.h头文件一样,条件编译当存在LITE_AUTH_INTERFACE_H时,进行宏定义。同时它还引用了auth_conn.h

  1. 宏定义变量用于指明对应数字的具体含义方便工程师门能够快速理解代码块的作用
    在这里插入图片描述
  2. 定义会话密钥的结构体SessionKey,包括int[ ]数组16位的密钥,int index标签和设备标识符int fd
    在这里插入图片描述
  3. 将密钥封装入链表的结构体SessionKeyNode,多一个List类型的头部
    在这里插入图片描述
  4. 用户会话结构体AuthSession,包括一个是否使用的标志位isUsed,一个long long序列id,一个无符号32位int的sessionid,以及在auth_conn.h中定义的会话认证结构体指针 AuthConn *conn
    在这里插入图片描述
  5. 四个在auth_interface.c中运用的函数声明
    在这里插入图片描述

auth_interface.c

会话链表的功能函数包括初始化会话数组的函数、通过序列id和sessionid返回对应结点的函数,插入,删除,替换,新建会话块并上链的函数等等

由于函数较多,这里重点讲解会话数组相关的函数

  1. 会话的初始化函数AuthSessionMapInit(void)
    当Map为空时,使用malloc分配其最大长度,分配失败返回-1,使用memset_s将其内容初始化为0
    在这里插入图片描述

  2. 两个通过指定条件(seqId sessionId)查找会话数组中特定会话的函数,模式几乎一致:先检查会话数组是否为空,使用for循环按顺序检查所有的会话,当isUsed=1且条件符合,返回该会话的地址作为AuthSession*指针,找不到则返回NULL
    在这里插入图片描述

  3. 通过sessionid找到对应会话块将其isUsed属性改为0,内容重置为0的函数
    AuthDelAuthSessionBySessionId(uint32_t sessionId)在这里插入图片描述

  4. 生成新会话的函数
    在这里插入图片描述

  5. 提交用户认证信息的函数
    在这里插入图片描述

  6. 封装一层identity身份的数据发送函数,从identity中可以获取sessionid从而调用函数AuthSendData()函数进行数据传输
    在这里插入图片描述

  7. 将需要的参数统一保存在para指针所指的operation_parameter结构体中
    在这里插入图片描述

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐