163 lines
4.5 KiB
C
163 lines
4.5 KiB
C
/**
|
||
* @file cm_ssl.h
|
||
* @brief SSL通用API接口
|
||
* @copyright Copyright ? 2021 China Mobile IOT. All rights reserved.
|
||
* @author By YeXiangji
|
||
* @date 2021/8/5
|
||
*
|
||
* @defgroup ssl SSL
|
||
* @ingroup SSL
|
||
* @{
|
||
*/
|
||
|
||
#ifndef _CM_API_SSL_H_
|
||
#define _CM_API_SSL_H_
|
||
|
||
/****************************************************************************
|
||
* Included Files
|
||
****************************************************************************/
|
||
|
||
/****************************************************************************
|
||
* Pre-processor Definitions
|
||
****************************************************************************/
|
||
|
||
/****************************************************************************
|
||
* Public Types
|
||
****************************************************************************/
|
||
|
||
/** SSL配置类型 */
|
||
typedef enum
|
||
{
|
||
CM_SSL_PARAM_VERIFY, /**< 设置验证方式, 参数(value): 类型uint8_t, 值为验证方式类型,0无身份验证,1单向验证, 2双向验证. */
|
||
CM_SSL_PARAM_NEGOTIME, /**< 设置握手超时时间, 参数(value): 类型uint16_t, 值为超时时间 单位:s*/
|
||
CM_SSL_PARAM_CA_CERT, /**< 设置CA证书, 参数(value): 类型char*, 值为CA证书字符串指针. */
|
||
CM_SSL_PARAM_CLI_CERT, /**< 设置客户端证书, 参数(value): 类型char*, 值为客户端证书字符串指针. */
|
||
CM_SSL_PARAM_CLI_KEY, /**< 设置客户端密钥, 参数(value): 类型char*, 值为客户端密钥. */
|
||
CM_SSL_PARAM_CA_CERT_DELETE, /**< 删除CA证书, 参数(value): 无意义. */
|
||
CM_SSL_PARAM_CLI_CERT_DELETE, /**< 删除客户端证书, 参数(value): 无意义. */
|
||
CM_SSL_PARAM_CLI_KEY_DELETE, /**< 删除客户端密钥, 参数(value): 无意义. */
|
||
} cm_ssl_param_type_e;
|
||
|
||
struct cm_ssl_ctx;
|
||
typedef struct cm_ssl_ctx cm_ssl_ctx_t;
|
||
|
||
/****************************************************************************
|
||
* Public Data
|
||
****************************************************************************/
|
||
|
||
/****************************************************************************
|
||
* Public Function Prototypes
|
||
****************************************************************************/
|
||
|
||
#ifdef __cplusplus
|
||
#define EXTERN extern "C"
|
||
extern "C"
|
||
{
|
||
#else
|
||
#define EXTERN extern
|
||
#endif
|
||
|
||
/**
|
||
* @brief 配置SSL参数
|
||
*
|
||
* @param [in] ssl_id ssl通道号,范围为0-5
|
||
* @param [in] type SSL配置项类型
|
||
* @param [in] value SSL配置项参数
|
||
*
|
||
* @return
|
||
* = 0 - 成功 \n
|
||
* = -1 - 参数错误
|
||
*
|
||
* @details 设置SSL配置参数,本接口配置证书时会将证书写入文件系统,故使用时需确保文件系统有足够空间
|
||
*/
|
||
int32_t cm_ssl_setopt(int32_t ssl_id,cm_ssl_param_type_e type,void * value);
|
||
|
||
/**
|
||
* @brief SSL连接
|
||
*
|
||
* @param [out] cm_ssl_ctx_p ssl上下文
|
||
* @param [in] ssl_id ssl通道号,范围为0-5
|
||
* @param [in] socket socket描述符
|
||
* @param [in] timeout 读取超时时间,单位ms
|
||
*
|
||
* @return
|
||
* = 0 - 成功 \n
|
||
* != 0 - 失败
|
||
*
|
||
* @details
|
||
*/
|
||
int cm_ssl_conn(void **cm_ssl_ctx_p, int ssl_id, int socket, int timeout);
|
||
|
||
/**
|
||
* @brief SSL关闭
|
||
*
|
||
* @param [in] cm_ssl_ctx_p ssl上下文
|
||
*
|
||
* @details
|
||
*/
|
||
void cm_ssl_close(void **cm_ssl_ctx_p);
|
||
|
||
/**
|
||
* @brief SSL写
|
||
*
|
||
* @param [in] cm_ssl_ctx ssl上下文
|
||
* @param [in] data 待写数据
|
||
* @param [in] data_len 数据长度
|
||
*
|
||
* @return
|
||
* >= 0 - 发送长度 \n
|
||
* < 0 - 错误码
|
||
*
|
||
* @details
|
||
*/
|
||
int cm_ssl_write(cm_ssl_ctx_t *cm_ssl_ctx, void *data, int data_len);
|
||
|
||
/**
|
||
* @brief SSL读
|
||
*
|
||
* @param [in] cm_ssl_ctx ssl上下文
|
||
* @param [in] data 读数据缓存区
|
||
* @param [in] data_len 缓存区长度
|
||
*
|
||
* @return
|
||
* >= 0 - 读取长度 \n
|
||
* < 0 - 错误码
|
||
*
|
||
* @details
|
||
*/
|
||
int cm_ssl_read(cm_ssl_ctx_t *cm_ssl_ctx, void *data, int data_len);
|
||
|
||
/**
|
||
* @brief 缓存区是否有未读数据
|
||
*
|
||
* @param [in] cm_ssl_ctx ssl上下文
|
||
*
|
||
* @return
|
||
* = 0 - 缓存中无未读数据\n
|
||
* = 1 - 缓存中有数据未读
|
||
*
|
||
* @details
|
||
*/
|
||
int cm_ssl_check_pending(cm_ssl_ctx_t *cm_ssl_ctx);
|
||
|
||
/**
|
||
* @brief 缓存区可读数据长度
|
||
*
|
||
* @param [in] cm_ssl_ctx ssl上下文
|
||
*
|
||
* @return
|
||
* 缓存区可读数据长度
|
||
*
|
||
* @details 使用本函数获取可读数据长度之前,需要先用cm_ssl_read()进行一次空读取,具体参考使用示例;
|
||
*/
|
||
int cm_ssl_get_bytes_avail(cm_ssl_ctx_t *cm_ssl_ctx);
|
||
|
||
#undef EXTERN
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __CM_SSL_H__ */
|
||
|
||
/** @}*/
|