Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: wolfssl/wolfcrypt/memory.h
- Revision:
- 17:ff9d1e86ad5f
- Parent:
- 16:048e5e270a58
--- a/wolfssl/wolfcrypt/memory.h Tue Nov 19 14:32:16 2019 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,195 +0,0 @@ -/* memory.h - * - * Copyright (C) 2006-2017 wolfSSL Inc. - * - * This file is part of wolfSSL. - * - * wolfSSL is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * wolfSSL is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA - */ - - -/* submitted by eof */ - -/*! - \file wolfssl/wolfcrypt/memory.h -*/ - -#ifndef WOLFSSL_MEMORY_H -#define WOLFSSL_MEMORY_H - -#include <stdlib.h> -#include <wolfssl/wolfcrypt/types.h> - -#ifdef __cplusplus - extern "C" { -#endif - -#ifdef WOLFSSL_STATIC_MEMORY - #ifdef WOLFSSL_DEBUG_MEMORY - typedef void *(*wolfSSL_Malloc_cb)(size_t size, void* heap, int type, const char* func, unsigned int line); - typedef void (*wolfSSL_Free_cb)(void *ptr, void* heap, int type, const char* func, unsigned int line); - typedef void *(*wolfSSL_Realloc_cb)(void *ptr, size_t size, void* heap, int type, const char* func, unsigned int line); - WOLFSSL_API void* wolfSSL_Malloc(size_t size, void* heap, int type, const char* func, unsigned int line); - WOLFSSL_API void wolfSSL_Free(void *ptr, void* heap, int type, const char* func, unsigned int line); - WOLFSSL_API void* wolfSSL_Realloc(void *ptr, size_t size, void* heap, int type, const char* func, unsigned int line); - #else - typedef void *(*wolfSSL_Malloc_cb)(size_t size, void* heap, int type); - typedef void (*wolfSSL_Free_cb)(void *ptr, void* heap, int type); - typedef void *(*wolfSSL_Realloc_cb)(void *ptr, size_t size, void* heap, int type); - WOLFSSL_API void* wolfSSL_Malloc(size_t size, void* heap, int type); - WOLFSSL_API void wolfSSL_Free(void *ptr, void* heap, int type); - WOLFSSL_API void* wolfSSL_Realloc(void *ptr, size_t size, void* heap, int type); - #endif /* WOLFSSL_DEBUG_MEMORY */ -#else - #ifdef WOLFSSL_DEBUG_MEMORY - typedef void *(*wolfSSL_Malloc_cb)(size_t size, const char* func, unsigned int line); - typedef void (*wolfSSL_Free_cb)(void *ptr, const char* func, unsigned int line); - typedef void *(*wolfSSL_Realloc_cb)(void *ptr, size_t size, const char* func, unsigned int line); - - /* Public in case user app wants to use XMALLOC/XFREE */ - WOLFSSL_API void* wolfSSL_Malloc(size_t size, const char* func, unsigned int line); - WOLFSSL_API void wolfSSL_Free(void *ptr, const char* func, unsigned int line); - WOLFSSL_API void* wolfSSL_Realloc(void *ptr, size_t size, const char* func, unsigned int line); - #else - typedef void *(*wolfSSL_Malloc_cb)(size_t size); - typedef void (*wolfSSL_Free_cb)(void *ptr); - typedef void *(*wolfSSL_Realloc_cb)(void *ptr, size_t size); - /* Public in case user app wants to use XMALLOC/XFREE */ - WOLFSSL_API void* wolfSSL_Malloc(size_t size); - WOLFSSL_API void wolfSSL_Free(void *ptr); - WOLFSSL_API void* wolfSSL_Realloc(void *ptr, size_t size); - #endif /* WOLFSSL_DEBUG_MEMORY */ -#endif /* WOLFSSL_STATIC_MEMORY */ - -/* Public get/set functions */ -WOLFSSL_API int wolfSSL_SetAllocators(wolfSSL_Malloc_cb, - wolfSSL_Free_cb, - wolfSSL_Realloc_cb); -WOLFSSL_API int wolfSSL_ResetAllocators(void); -WOLFSSL_API int wolfSSL_GetAllocators(wolfSSL_Malloc_cb*, - wolfSSL_Free_cb*, - wolfSSL_Realloc_cb*); - -#ifdef WOLFSSL_STATIC_MEMORY - #define WOLFSSL_STATIC_TIMEOUT 1 - #ifndef WOLFSSL_STATIC_ALIGN - #define WOLFSSL_STATIC_ALIGN 16 - #endif - #ifndef WOLFMEM_MAX_BUCKETS - #define WOLFMEM_MAX_BUCKETS 9 - #endif - #define WOLFMEM_DEF_BUCKETS 9 /* number of default memory blocks */ - #ifndef WOLFMEM_IO_SZ - #define WOLFMEM_IO_SZ 16992 /* 16 byte aligned */ - #endif - #ifndef WOLFMEM_BUCKETS - /* default size of chunks of memory to seperate into - * having session certs enabled makes a 21k SSL struct */ - #ifndef SESSION_CERTS - #define WOLFMEM_BUCKETS 64,128,256,512,1024,2432,3456,4544,16128 - #else - #define WOLFMEM_BUCKETS 64,128,256,512,1024,2432,3456,4544,21920 - #endif - #endif - #ifndef WOLFMEM_DIST - #define WOLFMEM_DIST 8,4,4,12,4,5,8,1,1 - #endif - - /* flags for loading static memory (one hot bit) */ - #define WOLFMEM_GENERAL 0x01 - #define WOLFMEM_IO_POOL 0x02 - #define WOLFMEM_IO_POOL_FIXED 0x04 - #define WOLFMEM_TRACK_STATS 0x08 - - #ifndef WOLFSSL_MEM_GUARD - #define WOLFSSL_MEM_GUARD - typedef struct WOLFSSL_MEM_STATS WOLFSSL_MEM_STATS; - typedef struct WOLFSSL_MEM_CONN_STATS WOLFSSL_MEM_CONN_STATS; - #endif - - struct WOLFSSL_MEM_CONN_STATS { - word32 peakMem; /* peak memory usage */ - word32 curMem; /* current memory usage */ - word32 peakAlloc; /* peak memory allocations */ - word32 curAlloc; /* current memory allocations */ - word32 totalAlloc;/* total memory allocations for lifetime */ - word32 totalFr; /* total frees for lifetime */ - }; - - struct WOLFSSL_MEM_STATS { - word32 curAlloc; /* current memory allocations */ - word32 totalAlloc;/* total memory allocations for lifetime */ - word32 totalFr; /* total frees for lifetime */ - word32 totalUse; /* total amount of memory used in blocks */ - word32 avaIO; /* available IO specific pools */ - word32 maxHa; /* max number of concurent handshakes allowed */ - word32 maxIO; /* max number of concurent IO connections allowed */ - word32 blockSz[WOLFMEM_MAX_BUCKETS]; /* block sizes in stacks */ - word32 avaBlock[WOLFMEM_MAX_BUCKETS];/* ava block sizes */ - word32 usedBlock[WOLFMEM_MAX_BUCKETS]; - int flag; /* flag used */ - }; - - typedef struct wc_Memory wc_Memory; /* internal structure for mem bucket */ - typedef struct WOLFSSL_HEAP { - wc_Memory* ava[WOLFMEM_MAX_BUCKETS]; - wc_Memory* io; /* list of buffers to use for IO */ - word32 maxHa; /* max concurent handshakes */ - word32 curHa; - word32 maxIO; /* max concurrent IO connections */ - word32 curIO; - word32 sizeList[WOLFMEM_MAX_BUCKETS];/* memory sizes in ava list */ - word32 distList[WOLFMEM_MAX_BUCKETS];/* general distribution */ - word32 inUse; /* amount of memory currently in use */ - word32 ioUse; - word32 alloc; /* total number of allocs */ - word32 frAlc; /* total number of frees */ - int flag; - wolfSSL_Mutex memory_mutex; - } WOLFSSL_HEAP; - - /* structure passed into XMALLOC as heap hint - * having this abstraction allows tracking statistics of individual ssl's - */ - typedef struct WOLFSSL_HEAP_HINT { - WOLFSSL_HEAP* memory; - WOLFSSL_MEM_CONN_STATS* stats; /* hold individual connection stats */ - wc_Memory* outBuf; /* set if using fixed io buffers */ - wc_Memory* inBuf; - byte haFlag; /* flag used for checking handshake count */ - } WOLFSSL_HEAP_HINT; - - WOLFSSL_API int wc_LoadStaticMemory(WOLFSSL_HEAP_HINT** pHint, - unsigned char* buf, unsigned int sz, int flag, int max); - - WOLFSSL_LOCAL int wolfSSL_init_memory_heap(WOLFSSL_HEAP* heap); - WOLFSSL_LOCAL int wolfSSL_load_static_memory(byte* buffer, word32 sz, - int flag, WOLFSSL_HEAP* heap); - WOLFSSL_LOCAL int wolfSSL_GetMemStats(WOLFSSL_HEAP* heap, - WOLFSSL_MEM_STATS* stats); - WOLFSSL_LOCAL int SetFixedIO(WOLFSSL_HEAP* heap, wc_Memory** io); - WOLFSSL_LOCAL int FreeFixedIO(WOLFSSL_HEAP* heap, wc_Memory** io); - - WOLFSSL_API int wolfSSL_StaticBufferSz(byte* buffer, word32 sz, int flag); - WOLFSSL_API int wolfSSL_MemoryPaddingSz(void); -#endif /* WOLFSSL_STATIC_MEMORY */ - -#ifdef __cplusplus - } /* extern "C" */ -#endif - -#endif /* WOLFSSL_MEMORY_H */ - -