OpenHarmony源码分析之分布式软总线:trans_service模块(6)/TCP会话管理

本文深入分析OpenHarmony的trans_service模块,聚焦TCP会话管理,涵盖新会话中客户端请求数据处理及普通会话新数据的接收和解密流程,探讨了会话监听器在会话管理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

trans_service模块基于系统内核提供的socket通信,向authmanager模块提供设备认证通道管理和设备认证数据的传输;向业务模块提供session管理和基于session的数据收发功能,并且通过GCM模块的加密功能提供收发报文的加解密保护。
本文是分布式软总线的会话管理机制的结尾部分,在前文中介绍了新会话中客户端请求数据的处理过程,本文重点介绍普通会话中的新数据处理。衔接OpenHarmony源码分析之分布式软总线:trans_service模块(5)/TCP会话管理

二、源码分析

  1. 在函数OnProcessDataAvailable()中,先根据会话名称进行判断,该设备是否属于未知设备,如果不是,将进行常规处理。首先根据会话名字在会话管理器的会话监听器表中查找相应会话监听器,若会话监听器已存在,则表明该会话已创建,然后在TcpSessionRecv()中接收会话新数据并进行解密,返回明文数据。TcpSessionRecv()函数的具体分析如下:
/*
函数功能:接收TCP会话新数据,并进行解密
函数参数:
    session:tcp通信会话
    buf:用于存储接收到并解密成功的明文数据
    size:除去OVERHEAD_LEN部分的数据长度
    timeout:超时时间
函数返回值:
    成功:返回实际接收到的明文数据长度
    失败:返回TRANS_FAILED(-1)
详细:
*/
static int32_t TcpSessionRecv(TcpSession *session, const char* buf, uint32_t size, int timeout)
{
   
   
    if (buf == NULL || session == NULL || session->fd < 0 || size <= 0 || timeout 
报错E (5540) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time: E (5540) task_wdt: - IDLE0 (CPU 0) E (5540) task_wdt: Tasks currently running: E (5540) task_wdt: CPU 0: main E (5540) task_wdt: CPU 1: IDLE1 E (5540) task_wdt: Print CPU 0 (current core) backtrace Backtrace: 0x42019626:0x3FC94A20 0x42019A48:0x3FC94A40 0x40377049:0x3FC94A70 0x42013ADF:0x3FC9B9C0 0x42014846:0x3FC9B9E0 0x42009684:0x3FC9BA10 0x4200979F:0x3FC9BAF0 0x420275FB:0x3FC9BB10 0x4037E011:0x3FC9BB40 --- 0x42019626: task_wdt_timeout_handling at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/esp_system/task_wdt/task_wdt.c:489 (discriminator 3) 0x42019a48: task_wdt_isr at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/esp_system/task_wdt/task_wdt.c:565 0x40377049: _xt_lowint1 at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/xtensa_vectors.S:1240 0x42013adf: lcd_ll_start at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/hal/esp32s3/include/hal/lcd_ll.h:305 (inlined by) lcd_periph_trigger_quick_trans_done_event at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/esp_lcd/src/esp_lcd_panel_io_i80.c:585 0x42014846: esp_lcd_new_i80_bus at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/esp_lcd/src/esp_lcd_panel_io_i80.c:181 (discriminator 2) 0x42009684: lcd_init at D:/Files/07_esp_adf/01_test/all_in_one/main/main.c:86 (discriminator 2) 0x4200979f: app_main at D:/Files/07_esp_adf/01_test/all_in_one/main/main.c:148 0x420275fb: main_task at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/freertos/app_startup.c:208 (discriminator 13) 0x4037e011: vPortTaskWrapper at F:/esp_5_1_5/Espressif/frameworks/esp-idf-v5.1.5/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:162
最新发布
05-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值