bossay_release_out/iot_link/inc/dtls_al.h

147 lines
5.8 KiB
C
Raw Permalink Normal View History

2025-09-24 11:16:14 +08:00
/*----------------------------------------------------------------------------
* Copyright (c) <2018>, <Huawei Technologies Co., Ltd>
* All rights reserved.
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*---------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
* Notice of Export Control Law
* ===============================================
* Huawei LiteOS may be subject to applicable export control laws and regulations, which might
* include those applicable to Huawei LiteOS of U.S. and the country in which you are located.
* Import, export and usage of Huawei LiteOS in any manner by you shall be in compliance with such
* applicable export control laws and regulations.
*---------------------------------------------------------------------------*/
/**
* DATE AUTHOR INSTRUCTION
* 2019-10-17 19:50 zhangqianfu The first version
*
*/
#ifndef LITEOS_LAB_IOT_LINK_NETWORK_DTLS_DTLS_AL_DTLS_AL_H_
#define LITEOS_LAB_IOT_LINK_NETWORK_DTLS_DTLS_AL_DTLS_AL_H_
#include <stdint.h>
#include <stddef.h>
typedef enum
{
EN_DTLS_AL_ERR_OK = 0,
EN_DTLS_AL_ERR_PARA,
EN_DTLS_AL_ERR_SYS,
EN_DTLS_AL_ERR_SYSMEM,
EN_DTLS_AL_ERR_NOCONFIG,
EN_DTLS_AL_ERR_NETWORK,
EN_DTLS_AL_ERR_SERVERCERTPARSE,
EN_DTLS_AL_ERR_CLIENTCERTPARSE,
EN_DTLS_AL_ERR_CLIENTPKPARSE,
}en_dtls_al_err_t;
/** @brief this enum all the transport encode we support now*/
typedef enum
{
EN_DTLS_AL_SECURITY_TYPE_NONE = 0, ///< no encode
EN_DTLS_AL_SECURITY_TYPE_PSK, ///< use the psk mode in transport layer
EN_DTLS_AL_SECURITY_TYPE_CERT, ///< use the ca mode in transport layer,only check the server
}en_dtls_al_security_type_t;
/** @brief this data defines for the psk mode*/
typedef struct
{
uint8_t *psk_id; ///< the psk id
uint8_t *psk_key; ///< the psk key
int psk_id_len; ///< the psk id length
int psk_key_len; ///< the psk key length
}dtls_al_security_psk_t;
/** @brief this data defines for the cas mode:only check the server */
typedef struct
{
uint8_t *server_ca;
uint8_t *client_ca;
uint8_t *client_pk;
uint8_t *client_pk_pwd;
int server_ca_len;
int client_ca_len;
int client_pk_len;
int client_pk_pwd_len;
char *server_name;
}dtls_al_security_cert_t;
/** @brief this data defines for the encode parameter for the connect */
typedef struct
{
en_dtls_al_security_type_t type; ///< which security type of the data
union
{
dtls_al_security_psk_t psk; ///< psk data if the type is EN_DTSL_SECURITY_TYPE_PSK
dtls_al_security_cert_t cert; ///< cert data if the type is EN_DTSL_SECURITY_TYPE_CERT
}u;
}dtls_al_security_t;
typedef struct
{
int istcp;
int isclient;
dtls_al_security_t security;
}dtls_al_para_t;
en_dtls_al_err_t dtls_al_new(dtls_al_para_t *para,void **handle);
int dtls_al_connect(void *handle,const char *ip, const char *port, int timeout );
int dtls_al_write(void *handle, uint8_t *msg, size_t len, int timeout );
int dtls_al_read(void *handle,uint8_t *buf, size_t len,int timeout );
en_dtls_al_err_t dtls_al_destroy(void *handle);
typedef en_dtls_al_err_t (*fn_dtls_al_new)(dtls_al_para_t *para,void **handle);
typedef int (*fn_dtls_al_connect)(void *handle,const char *server_ip, const char *server_port,int timeout);
typedef int (*fn_dtls_al_write)(void *handle,uint8_t *msg, size_t len, int timeout);
typedef int (*fn_dtls_al_read)(void *handle, uint8_t *buf, size_t len, int timeout);
typedef en_dtls_al_err_t (*fn_dtls_al_destroy)(void *handle);
typedef struct
{
fn_dtls_al_new io_new;
fn_dtls_al_connect io_connect;
fn_dtls_al_write io_write;
fn_dtls_al_read io_read;
fn_dtls_al_destroy io_destroy;
}dtls_al_io_t;
typedef struct
{
const char *name;
dtls_al_io_t io;
}dtls_al_t;
int dtls_al_install(const dtls_al_t *dtls);
int dtls_al_uninstall(const char*name);
///< this function should implemented by the developer of the tls
int dtls_imp_init(void);
int dtls_al_init(void) ; ///< this function will call dtls_imp_init()
#endif /* LITEOS_LAB_IOT_LINK_NETWORK_DTLS_DTLS_AL_DTLS_AL_H_ */