From 5c5f7eb7feb16ba2632ad4701d7ef283a3371fec Mon Sep 17 00:00:00 2001 From: dongheng Date: Fri, 23 Sep 2016 14:53:19 +0800 Subject: [PATCH] components/openssl: add openssl stack object function --- .../openssl/include/internal/ssl_stack.h | 33 +++++++++ components/openssl/library/ssl_stack.c | 70 +++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 components/openssl/include/internal/ssl_stack.h create mode 100644 components/openssl/library/ssl_stack.c diff --git a/components/openssl/include/internal/ssl_stack.h b/components/openssl/include/internal/ssl_stack.h new file mode 100644 index 0000000000..b97015bd95 --- /dev/null +++ b/components/openssl/include/internal/ssl_stack.h @@ -0,0 +1,33 @@ +#ifndef _SSL_STACK_H_ +#define _SSL_STACK_H_ + +#include "ssl_types.h" + +/** + * @brief create a openssl stack object + * + * @param c - stack function + * + * @return openssl stack object point + */ +OPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c); + +/** + * @brief create a NULL function openssl stack object + * + * @param none + * + * @return openssl stack object point + */ +OPENSSL_STACK *OPENSSL_sk_new_null(void); + +/** + * @brief free openssl stack object + * + * @param openssl stack object point + * + * @return none + */ +void OPENSSL_sk_free(OPENSSL_STACK *stack); + +#endif diff --git a/components/openssl/library/ssl_stack.c b/components/openssl/library/ssl_stack.c new file mode 100644 index 0000000000..46e6f7efd8 --- /dev/null +++ b/components/openssl/library/ssl_stack.c @@ -0,0 +1,70 @@ +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at + +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "ssl_stack.h" +#include "ssl_dbg.h" +#include "ssl_port.h" + +#ifndef CONFIG_MIN_NODES + #define MIN_NODES 4 +#else + #define MIN_NODES CONFIG_MIN_NODES +#endif + +/** + * @brief create a openssl stack object + */ +OPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c) +{ + OPENSSL_STACK *stack; + char **data; + + stack = ssl_malloc(sizeof(OPENSSL_STACK)); + if (!stack) + SSL_RET(failed1); + + data = ssl_malloc(sizeof(*data) * MIN_NODES); + if (!data) + SSL_RET(failed2); + + stack->data = data; + stack->num_alloc = MIN_NODES; + stack->c = c; + + return stack; + +failed2: + ssl_free(stack); +failed1: + return NULL; +} + +/** + * @brief create a NULL function openssl stack object + */ +OPENSSL_STACK *OPENSSL_sk_new_null(void) +{ + return OPENSSL_sk_new((OPENSSL_sk_compfunc)NULL); +} + +/** + * @brief free openssl stack object + */ +void OPENSSL_sk_free(OPENSSL_STACK *stack) +{ + SSL_ASSERT(stack); + + ssl_free(stack->data); + ssl_free(stack); +}