123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /*----------------------------------------------------------------------------
- * 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_ */
|