一、概述
在HiChain本端接收数据的处理过程中:(1)在正确解析并处理完接收的数据之后,应构造相应的通知消息回复给对端。(2)在消息处理过程中会有出现错误的情况,在发现错误之后,应针对相应的错误情况通知对端,否则对端会一直处于未知状态。本文将介绍回复通知的相应过程。
二、源码分析
这一模块的源码位于:/base/security/deviceauth。
- 在receive_data函数中,出现错误会跳转到inform处,在inform阶段,首先调用函数encap_inform_message为通知消息申请内存空间,详细分析如下:
//为通知消息负载申请空间
static void encap_inform_message(int32_t error_code, struct message *send)
{
if ((error_code == HC_OK) || (send->msg_code != INFORM_MESSAGE) || (send->payload != NULL)) {
return;//如果错误码为0或者不等于INFORM_MESSAGE或者发送负载为空就直接返回
}
int32_t *err = (int32_t *)MALLOC(sizeof(int32_t));//申请内存空间
if (err == NULL) {
LOGE("Malloc for encape inform message failed");
return;
}
*err = error_code;//赋值错误码
send->payload = err;//赋值负载地址
}
- 紧接着执行build_send_data_by_struct函数,构造通知消息,详细分析如下:
/*
函数功能:构造结构化的发送消息
函数参数:
message:输出参数,消息地址
send_data:输出参数,消息有效载荷地址
send_data_len:输出参数,消息有效载荷长度
函数返回值:
成功:返回0
失败:返回错误码
*/
static int32_t build_send_data_by_struct(const struct message *message, void **send_data, uint32_t *send_data_len)
{
//消息构造表
const struct make_message_map map[] = {
{
PAKE_REQUEST, make_pake_request },//构造pake请求消息
{
PAKE_RESPONSE, make_pake_response },//构造pake响应消息
{
PAKE_CLIENT_CONFIRM, make_pake_client_confirm },//构造pake协议客户端认证消息
{
PAKE_SERVER_CONFIRM_RESPONSE, make_pake_server_confirm },//构造pake协议服务端认证消息
{
AUTH_START_REQUEST, make_auth_start_request