/* Copyright (C) 2007-2013 Open Information Security Foundation * * You can copy, redistribute or modify this Program under the terms of * the GNU General Public License version 2 as published by the Free * Software Foundation. * * This program 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 * version 2 along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ /** * \file * * \author Victor Julien * * Storage API */ #ifndef __UTIL_STORAGE_H__ #define __UTIL_STORAGE_H__ typedef enum StorageEnum_ { STORAGE_HOST, STORAGE_FLOW, STORAGE_IPPAIR, STORAGE_DEVICE, STORAGE_MAX, } StorageEnum; /** void ptr array for now */ typedef void* Storage; void StorageInit(void); void StorageCleanup(void); /** \brief Register new storage * * \param type type from StorageEnum * \param name name * \param size size of the per instance storage * \param Alloc alloc function for per instance storage * \param Free free function for per instance storage * * \note if size == ptr size (so sizeof(void *)) and Alloc == NULL the API just * gives the caller a ptr to store something it alloc'ed itself. */ int StorageRegister(const StorageEnum type, const char *name, const unsigned int size, void *(*Alloc)(unsigned int), void (*Free)(void *)); int StorageFinalize(void); unsigned int StorageGetCnt(const StorageEnum type); unsigned int StorageGetSize(const StorageEnum type); /** \brief get storage for id */ void *StorageGetById(const Storage *storage, const StorageEnum type, const int id); /** \brief set storage for id */ int StorageSetById(Storage *storage, const StorageEnum type, const int id, void *ptr); /** \brief AllocById func for prealloc'd base storage (storage ptrs are part * of another memory block) */ void *StorageAllocByIdPrealloc(Storage *storage, StorageEnum type, int id); /** \brief AllocById func for when we manage the Storage ptr itself */ void *StorageAllocById(Storage **storage, const StorageEnum type, const int id); void StorageFreeById(Storage *storage, const StorageEnum type, const int id); void StorageFreeAll(Storage *storage, const StorageEnum type); void StorageFree(Storage **storage, const StorageEnum type); void StorageRegisterTests(void); #endif