一、概述
本文重点介绍客户端收到end响应消息之后的处理过程。
二、源码分析
这一模块的源码位于:/base/security/deviceauth。
1. 首先是parse_auth_ack_response函数,解析认证ack响应消息。获取该消息中的关键字段,保存在相应结构体中。
/*
函数功能:解析认证ack响应消息
函数参数:
payload:消息负载
data_type:数据类型
函数返回值:
成功:返回解析完成的消息负载地址
失败:返回NULL
*/
void *parse_auth_ack_response(const char *payload, enum json_object_data_type data_type)
{
//申请sts_end_response_data结构体空间保存解析的数据
struct sts_end_response_data *auth_ack_response =
(struct sts_end_response_data *)MALLOC(sizeof(struct sts_end_response_data));
if (auth_ack_response == NULL) {
return NULL;
}
(void)memset_s(auth_ack_response, sizeof(*auth_ack_response), 0, sizeof(*auth_ack_response));//清空该空间
//如果消息负载为json格式的字符串,则将json格式的数据解析成cjson结构体对象
json_handle obj = parse_payload(payload, data_type);
if (obj == NULL) {
LOGE("Parse Auth ACK Response parse payload failed");
goto error;
}
/* authData */
//获取authData,将原来的十六进制字符串格式转换为byte数组格式
int32_t result = byte_convert(obj, FIELD_AUTH_RETURN, auth_ack_response->auth_return.auth_return,
(uint32_t *)&auth_ack_response->auth_return.length, HC_AUTH_DATA_BUFF_LEN);
if (result != HC_OK) {
LOGE("Parse Auth ACK Reque