Link Kit C-SDK
4.1.0
|
#include "core_string.h"
#include "core_sha256.h"
#include "ota_md5.h"
#include "ota_private.h"
#include "core_log.h"
#include "core_global.h"
#include "aiot_http_download_api.h"
#include "http_download_private.h"
#include "core_http.h"
函数 | |
static void | _http_recv_handler (void *handle, const aiot_http_recv_t *recv_data, void *userdata) |
static int32_t | _download_parse_url (const char *url, char *host, uint32_t max_host_len, char *path, uint32_t max_path_len) |
static int32_t | _download_digest_update (download_handle_t *download_handle, uint8_t *buffer, uint32_t buffer_len) |
static int32_t | _download_digest_verify (download_handle_t *download_handle) |
void * | aiot_download_init (void) |
初始化download实例并设置默认参数 更多... | |
int32_t | aiot_download_deinit (void **handle) |
释放download实例句柄的资源 更多... | |
int32_t | aiot_download_setopt (void *handle, aiot_download_option_t option, void *data) |
设置download句柄参数 更多... | |
int32_t | aiot_download_report_progress (void *handle, int32_t percent) |
上报下载完成度的百分比或者错误码 更多... | |
int32_t | aiot_download_recv (void *handle) |
通过download实例句柄下载一段buffer 更多... | |
int32_t | aiot_download_send_request (void *handle) |
向云端发送GET固件报文请求 更多... | |
|
static |
|
static |
|
static |
|
static |
void* aiot_download_init | ( | ) |
初始化download实例并设置默认参数
非NULL | download实例句柄 |
NULL | 初始化失败, 或者是没有设置portfile, 或者是内存不足无法分配download或者http实例 |
int32_t aiot_download_deinit | ( | void ** | handle | ) |
释放download实例句柄的资源
[in] | handle | 指向download实例句柄的指针 |
STATE_DOWNLOAD_DEINIT_HANDLE_IS_NULL | handle或者handle指向的内容为空 |
STATE_SUCCESS | 执行成功 |
int32_t aiot_download_setopt | ( | void * | handle, |
aiot_download_option_t | option, | ||
void * | data | ||
) |
设置download句柄参数
配置固件下载会话的选项, 常见需要设置的选项包括
AIOT_DLOPT_RECV_HANDLER
: 用户告诉SDK, 当SDK收到固件内容的时候, 调用哪个用户函数来传出固件内容缓冲区AIOT_DLOPT_NETWORK_CRED
: 可以配置是走HTTP还是走HTTPS下载固件内容AIOT_DLOPT_BODY_BUFFER_MAX_LEN
: 这是个缓冲区的长度, SDK下载中, 每当填满这个长度就调用一次用户回调, 所以这里设置的越大, 下载越快, 内存开销也越大[in] | handle | download句柄 |
[in] | option | 配置选项, 更多信息请参考aiot_download_option_t |
[in] | data | 配置选项数据, 更多信息请参考aiot_download_option_t |
STATE_SUCCESS | 参数设置成功 |
STATE_DOWNLOAD_SETOPT_HANDLE_IS_NULL | download句柄为空 |
STATE_DOWNLOAD_SETOPT_DATA_IS_NULL | data字段为空 |
STATE_DOWNLOAD_SETOPT_COPIED_DATA_IS_NULL | 拷贝task_desc失败 |
STATE_DOWNLOAD_SETOPT_MALLOC_SHA256_CTX_FAILED | 为shs256算法的context分配内存失败 |
STATE_DOWNLOAD_SETOPT_MALLOC_MD5_CTX_FAILED | 为MD5算法的context分配内存失败 |
其他出错信息 | 请参考aiot_state_api.h |
int32_t aiot_download_report_progress | ( | void * | handle, |
int32_t | percent | ||
) |
上报下载完成度的百分比或者错误码
在设备开始下载固件的过程之后, 都可以用这个接口向云端上报进展情况, 包括下载进度或出错信息
[in] | handle | download句柄 |
[in] | percent | 当前所下载内容完成度的百分比或者错误码 |
STATE_SUCCESS | 参数设置成功 |
STATE_DOWNLOAD_REPORT_HANDLE_IS_NULL | 上报时handle为空 |
STATE_DOWNLOAD_REPORT_TASK_DESC_IS_NULL | 上报时task_desc为空, 无法找到相应的product_key, device_name |
其他出错信息 | 请参考aiot_state_api.h |
int32_t aiot_download_recv | ( | void * | handle | ) |
通过download实例句柄下载一段buffer
用户解析完OTA消息, 知道了固件的下载地址之后, 就可以用这个接口以HTTP下载固件内容
被下载到的内容, 会通过回调函数传递给用户, 用户调用 aiot_download_setopt 把自己的数据处理回调函数设置给SDK
[in] | handle | 指向download实例句柄的指针 |
>STATE_SUCCESS | 表示下载到的字节数 |
STATE_DOWNLOAD_HTTPRSP_CODE_ERROR | 下载所使用的url链接不可访问, 返回的code并非200或者206 |
STATE_DOWNLOAD_FINISHED | 整个固件包下载完成 |
STATE_DOWNLOAD_RANGE_FINISHED | 分段下载的时候, 单个分段下载完成 |
STATE_DOWNLOAD_HTTPRSP_HEADER_ERROR | 访问下载链接后http的回复报文中并没有Content-Length字段 |
STATE_DOWNLOAD_RECV_HANDLE_IS_NULL | download句柄为空 |
STATE_DOWNLOAD_RENEWAL_REQUEST_SENT | 进行断点续传往固件服务器重新发送了下载请求 |
其他出错信息 | 请参考aiot_state_api.h |
int32_t aiot_download_send_request | ( | void * | handle | ) |
向云端发送GET固件报文请求
设备通过OTA消息回调函数知道了固件下载地址后, 就可以调用这个接口, 下载一段固件
AIOT_DLOPT_RANGE_START
和AIOT_DLOPT_RANGE_END
选项设置AIOT_DLOPT_BODY_BUFFER_MAX_LEN
选项配置[in] | handle | download句柄, 包含了固件的url等信息 |
STATE_SUCCESS | 请求发送成功 |
STATE_DOWNLOAD_REQUEST_HANDLE_IS_NULL | 发送GET请求的时候handle为空 |
STATE_DOWNLOAD_REQUEST_URL_IS_NULL | 发送GET请求的时候task_desc不为空, 但是其中的url为空 |
STATE_DOWNLOAD_SEND_REQUEST_FAILED | 发送GET请求的时候http底层发包逻辑报错 |
STATE_DOWNLOAD_REQUEST_TASK_DESC_IS_NULL | 发送GET请求的时候task_desc字段为空 |
其他出错信息 | 请参考aiot_state_api.h |